Paul,

Thanks for welcoming Chris and getting involved. I hope to respond to
his e-mail, but I won't get to it tomorrow. I have the feeling Chris
will be a great addition to our team. His programming experience is
was more extensive than my own.

The Sunburned Surveyor

On Mon, Mar 31, 2008 at 10:58 AM, Paul Austin <[EMAIL PROTECTED]> wrote:
> Christopher,
>
> Here is some code I started to create a TIN API.
>
> http://rsiaf.googlecode.com/svn/rs-gis-core/trunk/src/main/java/com/revolsys/gis/tin/
>
> It works well for the case where you just have DEM points but there are some
> issues when you start introducing breaklines. The problems come down to
> dealing with cases where you have very thin slivers of triangles created
> when a breakline is very close to an edge of a traingle. You will need to
> look into a precision model to slightly adjust the path the breaklines take
> to sometimes follow edges of the triangles once you get to the point where
> say one edge of the triangle is < 1m in length.
>
> In general when building a TIN you can add points to it and lines to it. The
> approach I took was to first add the points and lines and do the triangle
> creation at the end, which worked out faster and easier. Once all the points
> and lines are added you then build the trainagles by using the points and
> all the vertices's of the lines.  Do this using Delaney triangulation. Then
> go back and add in the hard edges for the breaklines. With this approach if
> you want to add more points or lines you need to rebuild the TIN.
>
> You may want to split it into two interfaces/classes
>
> TinBuilder {
>   add(Coordinate c);
>   add(Point p);
>   add(LineString l);
>   // plus list versions (e.g. add(List<Coordinate) coords) or array
> add(Coordinate[] coords) )
>   Tin generate();
> }
>
> Tin {
>   double getElevation(Coordinate c);
>    :
>   :
> }
>
> Anyway that's enough thoughts for now, there will need to be extra methods
> on the TIN to get triangles by bounding box, calculate the elevation fro a
> geometry returning a new geometry with calculated z-values and also ones to
> return lines for a given height which you could then use to create a
> smoothed contour line.
>
>
> Paul
>
>
>
> Paul Austin
> President/CEO
> Revolution Systems Inc.
>
> +1 (604) 288-4304 x201
> www.revolsys.com
>
> Christopher wrote:
>
> --- Paul Austin <[EMAIL PROTECTED]> wrote:
>
> Christopher,
>
> Welcome aboard, glad to see someone working on this.
>
> I'm
> going to write a longer email later but one of
> the things we should
>
> consider is splitting the model and operations for
> the TIN itself from
> the
> visualization and IO code. So the TIN model
> should not be dependent
> on
> anything in JUMP so it could be used in other
> projects.
>
> Paul
>
> I tried to send off a longish reply to Landon and this
> list, but it never
> showed up on the list, so I'm
> resending it.
>
> I agree that TIN related
> functions not be dependent on
> any display code.
>
> --Christopher
>
>
>
>
> Following
> is an interleaved reply...
>
>
> --- Landon Blake <[EMAIL PROTECTED]> wrote:
>
> Before I respond to your comments, let me ask you a
> question:
> Did you turn
> in your student application yet?
>
> Yes I have.
>
>
> You wrote: " I planning on first writing code that
> can read, write
> and
> display TIN files."
>
> I would split this up similarly. I would say that
> we
> need code to read
> TIN files, write TIN files, create TIN files from
> other
> data sources,
> display TIN files, and produce data products from
> TIN files.
> I'm
> thinking we could encapsulate this in the following
> package
> structure:
>
> net.surveyos.sourceforge.jtin: Contains classes to
> represent a
> TIN and
> its elements. This would include objects like a TIN
> face, a TIN
> face
> edge, a TIN Breakline, TIN Boundaries, and a TIN
> Point.
>
> A TIN surface is simply a subcategory of
> PolyhedralSurface.
>
> Quoting the
> OpenGIS Simple Features spec:
> "A PolyhedralSurface is a contiguous
> collection of
> polygons, which share common boundary segments. For
> each pair
> of polygons that "touch", the common
> boundary shall be expressible as a
> finite collection
> of LineStrings. Each such LineString shall be part of
> the
> boundary of at most 2 Polygon patches. A TIN
> (triangulated irregular
> network) is a
> PolyhedralSurface consisting only of Triangle patches.
>
>
> In
> order to incorporate breaklines and boundaries, I
> think a TIN should be a
> Feature that contains a
> PolyhedralSurface as its main element with
> the
> breaklines and boundaries as LineStrings that overlap
> certain triangle
> edges.
>
> I'm trying to think of what will be best for OpenJUMP
> in the long
> run. By slightly expanding the core in
> order to implement Surfaces, full 3D
> functionality
> becomes rather easy. I fully intend to heavily
> leverage the
> existing codebase and make any additions
> as seamless and invisible as
> possible. At heart I'm a
> stereotypical "lazy" programmer who loves code
> reuse,
> object inheritance, and overflowing standard
> libraries. :)
>
>
> net.surveyos.sourceforge.jtin.io: Contains classes
> to read and write
> TIN
> files.
>
> net.surveyos.sourceforge.jtin.create: Contains
> classes to create
> TIN
> objects from source data that is not a TIN file.
>
> I think jtin.create should be merged into jtin.io.
> Conversion should be
> automatic, if you ask for a TIN
> from a DEM file you shouldn't have to go
> through any
> more steps than necessary.
>
>
> net.surveyos.sourceforge.jtin.display: Contains
> classes to display a TIN
> in
> 2D and 3D.
>
> This should be taken care of in the same way
> LineString or Point are
> displayed. I don't think it
> should be a separate class/package.
>
>
> net.surveyos.sourceforge.jtin.contours: Contains
> classes to represent
> and
> generate contours and contour labels.
>
> Good idea, but I'd put it down the list, to be
> implemented as time allows.
>
>
> net.surveyos.sourceforge.jtin.hillshade: Contains
> classes to represent
> and
> generate hillshades.
>
> Hillshades should be part of the display code. Once
> the jump to 3D data
> storage, manipulation and display
> is made, things like this become simple.
> In the case
> of hillshades, simply move the light source. We could
> have a
> plug-in that allows you to choose the time and
> date and see the shadow cast
> by the sun at that
> altitude. Even simpler, we could have a Sun
> plug-in
> cursor tool that turns the mouse cursor into the light
> source so
> that when you move your mouse around, the
> shadows cast by the terrain will
> move in sync.
>
> I would put this type of functionality high on the
> "time
> allows" queue.
>
>
> Other possible packages might
> include:
>
> net.surveyos.sourceforge.jtin.volumes: Contains
> classes to
> calculate the
> volumes between two TINs.
>
> TINs are 2D surfaces. What would we be using as the
> base in order to measure
> volume? Sea level? The lowest
> point on the TIN border? The center of the
> Earth?
> Selectable from all the above?
>
> Is this kind of functionality needed
> by the surveying
> community? Since we're dealing with connected polygons
> and
> not curves, it should be fairly easy to implement
> (ie no 3d calculus). I
> think it should be a method in
> the TIN class not a whole class/package of
> its own.
>
>
> net.surveyos.sourceforge.jtin.query: Contains
> classes that allow a TIN
> to be
> queried.
>
> What kind of queering are you thinking about and why
> can't they be get*
> methods within the TIN class?
>
>
> net.surveyos.sourceforge.jtin.topology: Classes to
> represent and manage
> the
> topology of a TIN.
>
> Again, this functionality sounds like it should be
> represented by methods in
> the TIN class itself.
>
> What kind of topology modification would you like
> to
> be able to do?
>
>
> net.surveyos.sourceforge.jtin.watershed: Classes to
> generate watersheds
> and
> perform watershed analysis using a TIN.
>
> This is a great idea. Mathematically, it shouldn't be
> too hard to classify
> watersheds based on the normals
> of the triangles composing the TIN.
>
> I
> would put this task about midway in the "time
> allows" column.
>
>
> I think we need to separate two different components
> here.
>
> The first
> component is used to represent the
> different building blocks
> of a TIN. I
> already mentioned some of these: TIN
> Point, Tin Face, TIN
> Face Edge.
>
> I would say that a TIN Point is nothing more than a
> Point, a TIN Face
> nothing more than a Polygon, and a
> TIN Face Edge is nothing more than a
> LinearRing. We
> shouldn't be defining new data types when JTS
> or
> SimpleFeatures already defines them.
>
>
> The second component is what is needed to display a
> TIN in Swing.
>
> These
> two components shouldn't be mixed. OpenJUMP
> already follows
> this
> methodology. Feature Geometries are not stored as
> Java2D graphics.
> They
> are stored as JTS Geometry objects. When OpenJUMP
> renders a Layer
> the
> JTS Geometries contained by the Layer's features are
> converted
> to
> Java2DGraphics and then painted on the screen.
>
> 3D display should be functionally identical to 2D
> display. Instead of
> converting to Java2DGraphics, the
> JTS Geometries would be converted to
> OpenGL then sent
> to a GLJPanel which should interface seamlessly with
> other
> swing components.
>
>
> I strongly believe that we should tap into the power
> of JTS. JTS has
> the
> ability to store a Z ordinate for its Geometry
> objects. We can
> represent
> a TIN Point as a JTS Point, a TIN Face as a JTS
> Polygon, and a TIN
> Face
> Edge as a JTS LineString. This will allow us to do
> two (2) things
> right
> out of the box. First, it will allow us to tap into
> all of the
> great
> algorithms and data structures that are in JTS. We
> don't want to
> write
> this stuff from scratch. Secondly, it would allow us
> to easily render
> a
> 2D view of a TIN in OpenJUMP's existing rendering
> system, without
> any
> modifications. That is a great thing.
>
> I fully agree. It's wonderful to hear that JTS already
> works with z
> coordinates. That will make life much,
> much, easier.
>
>
> It seems like you already have some experience in 3D
> display, and that
> this
> is an area that interests you. Here is a
> suggestion:
>
> I can bang out some
> simple TIN elements that use JTS
> Geometries to
> represent their shape and
> location.
>
> You can write the code that converts the JTS
> geometries into
> objects
> suitable for display using Java OpenGL bindings. You
> can then write
> a
> Swing component that displays the TIN in 3D. This
> could serve as a
> basis
> for future display of 3D objects in OpenJUMP.
>
> We can then work on the
> code that creates the TIN
> elements from
> different sources.
>
> This will be a good beginning to a testing suite.
> Before this happens
> though, I think there should first
> be work done to create the internal data
> structures
> for TINs and the Surfaces they depend on. Only when
> that is done
> should work begin on translating TINs
> into OpenGL commands. This is
> partially compensation
> for the learning curve necessary to get inside
> the
> OpenJUMP codebase: once I got the foundation under my
> belt, everything
> else becomes clearer.
>
> Speaking of test suites, does OpenJUMP use
> unit
> testing or any other standardized testing procedure?
>
>
> I guess this depends on your perspective. DEM is a
> common elevation
> data
> format, but in my profession almost all of our
> surface models
> are
> constructed from point data, usually stored in CSV
> files. But
> my
> surveying background taints my perspective somewhat.
> We can tackle
> this
> problem later. I can always write CSV support later.
>
> This is the beauty of OpenSource software: developers
> and users are very
> tightly coupled :)
>
> I was looking through the glasses of a programmer
> and
> GIS monkey, not from a surveyor's perspective.
>
> We should make things as
> file agnostic as possible:
> adding new file types that can be read into
> an
> internal TIN format should be simple
> and
> straightforward.
>
> --Christopher
>
>
>
> ____________________________________________________________________________________
> OMG,
> Sweet deal for Yahoo! users/friends:Get A Month of Blockbuster Total Access,
> No Cost. W00t
>
> http://tc.deals.yahoo.com/tc/blockbuster/text2.com
>
> -------------------------------------------------------------------------
> Check
> out the new SourceForge.net Marketplace.
> It's the best place to buy or sell
> services for
> just about anything Open
> Source.
> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
> _______________________________________________
> Jump-pilot-devel
> mailing
> list
> Jump-pilot-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>
>
> -------------------------------------------------------------------------
> Check out the new SourceForge.net Marketplace.
> It's the best place to buy or sell services for
> just about anything Open Source.
> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
> _______________________________________________
> Jump-pilot-devel mailing list
> Jump-pilot-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>
>

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to