jts secrets foss4g2007 - jump gisjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf ·...
TRANSCRIPT
![Page 1: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/1.jpg)
W W W . R E F R A C T I O N S . N E T
Secrets of the JTS Topology SuiteSecrets of the JTS Topology Suite
Martin DavisMartin DavisRefractions Research Inc.Refractions Research Inc.
![Page 2: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/2.jpg)
W W W . R E F R A C T I O N S . N E T
Overview of presentationOverview of presentation
• Survey of JTS functions and components• Tips for using JTS as an engine for
processing Geometry• Tips for using JTS components and APIs
for spatial algorithm development• Future Enhancements
![Page 3: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/3.jpg)
W W W . R E F R A C T I O N S . N E T
Overview of JTSOverview of JTS
• Java API for modeling & manipulating planar linear vector geometry– License: LGPL
• Development History– Version 1.0 - May 2001– Version 1.8 - December 2006– Version 1.9 – Q4 2007
• Clients:– JUMP, GeoTools (uDig, GeoServer), eXist, etc.– (as GEOS) PostGIS, FME, OGR, MapServer, MapGuide
Open Source, etc.– (as NTS) monoGIS, SharpMap, etc?
![Page 4: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/4.jpg)
W W W . R E F R A C T I O N S . N E T
JTS as a Geometry EngineJTS as a Geometry Engine
• Geometry types• Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon, GeometryCollection
• Geometry methods• Spatial Predicates, relate()• Overlay ops, buffer(), convexHull()• Metrics: area(), length()• distance(), withinDistance()
• Geometry Processing• Line Merging• Noding & Polygonization• Simplification• Linear Referencing
![Page 5: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/5.jpg)
W W W . R E F R A C T I O N S . N E T
Geometry Operation ClassesGeometry Operation Classes
• Most non-trivial Geometry methods are implemented as classes
• Often classes provides extra functionality• Examples:
– DistanceOp can return two closest points– IsSimpleOp can return location of non-simplicity– IsValid gives option to check for SDE-style polygon
topology– RelateOp allows BoundaryNodeRule to be
specified
![Page 6: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/6.jpg)
W W W . R E F R A C T I O N S . N E T
• How boundary points of linear geometries are determined– OGC-SFS specifies “Mod-2” Rule
• Other rules sometimes useful– All Endpoints
• Ex: Do roads touch only at nodes?
– Monovalent Endpoints– Multivalent Endpoints
• RelateOp class allows specifying rule to use
Spatial Relationships & Boundary Node Spatial Relationships & Boundary Node RulesRules
![Page 7: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/7.jpg)
W W W . R E F R A C T I O N S . N E T
• OGC-SFS spatial predicates have some subtle behaviour
• contains() : Polygons do not “contain” their boundary!– A & B : contains()==true– C : contains()==false
• JTS provides covers() and coveredBy() , which treat boundary and interior identically
• Side benefit – easier to optimize – e.g. <rectangle>.covers()
Additional Spatial PredicatesAdditional Spatial Predicates
![Page 8: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/8.jpg)
W W W . R E F R A C T I O N S . N E T
Optimized Spatial PredicatesOptimized Spatial Predicates
• Spatial query / join is common use pattern– i.e. repeated predicate operation on same geometry
• PreparedGeometry improves performance– Uses caching, algorithm optimizations– Over 100x faster in some cases!
• Currently provides most important predicates– intersects, contains, covers
• New in JTS 1.9
PreparedGeometry targetPrep= PreparedGeometryFactory.prepare(targetGeom);
for ( <geometries to test> ) {Geometry test = ...if (targetPrep.intersects(test)) {...
![Page 9: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/9.jpg)
W W W . R E F R A C T I O N S . N E T
LineString LineString NodingNoding, , PolygonizationPolygonization
• Problem: Node & Dissolve a set of LineStrings, then Polygonize
![Page 10: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/10.jpg)
W W W . R E F R A C T I O N S . N E T
LineString LineString NodingNoding, , PolygonizationPolygonization contcont’’dd
• Trick: to node & dissolve, combine LineStrings into a MultiLineString, then union them with a Point from one of the lines
• Noded lines can be polygonized using the Polygonizer class
• New in JTS 1.9: Geometry.union()
Collection lines = ...Geometry mls = geomFactory.buildGeometry(lines);Point mlsPt = geomFactory.createPoint(mls.getCoordinate());Geometry nodedLines = mls.union(pt);
![Page 11: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/11.jpg)
W W W . R E F R A C T I O N S . N E T
Polygon Union using buffer(0)Polygon Union using buffer(0)
• Merging a large set of Polygons using repeated polyUnion.union(poly)can be slow
• Trick: combine Polygons into a GeometryCollection, then compute gc.buffer(0.0)
• Warning - doesn’t work for non-polygonal features!
• New in JTS 1.9: Geometry.union()
![Page 12: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/12.jpg)
W W W . R E F R A C T I O N S . N E T
Polygon Cleaning using buffer(0)Polygon Cleaning using buffer(0)
• Polygons from external data sources can be invalid because of self-intersections or overlaps
• Trick: computing buffer(0.0) removes pinch-offs, merges overlapping polygons
• It would be nice to have more control over cleaning behaviour!
• Future: PolygonRectifier
![Page 13: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/13.jpg)
W W W . R E F R A C T I O N S . N E T
Geometry SimplificationGeometry Simplification
• Two types– DouglasPeuckerSimplifier
• standard Douglas-Peucker• Faster, but does not preserve topology
– TopologyPreservingSimplifier• Slower, but preserves topology (lines will not cross,
holes are preserved)
• Not Geometry methods – use classes directly
![Page 14: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/14.jpg)
W W W . R E F R A C T I O N S . N E T
JTS as an algorithm libraryJTS as an algorithm library
• JTS contains many algorithms and components for building spatial algorithms & processes– Fast Point-in-Polygon– Robust Line-Point orientation, Ring orientation– Line segment intersection detection & computation– Spatial indexes (and MonotoneChain)– Indexed Noding & Intersection detection for line
arrangements– PlanarGraph package– Primitive Geometric objects & methods
• LineSegment, Triangle, Angle
![Page 15: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/15.jpg)
W W W . R E F R A C T I O N S . N E T
Fast PointFast Point--InIn--PolygonPolygon
• Common use case is repeated P-I-P queries against a fixed polygon
• This case can be optimized by using spatial indexing
• Options: – As component: IndexedPointInAreaLocator
• Result in {INTERIOR, BOUNDARY, EXTERIOR}– Also PreparedGeometry.intersects(), contains()
• Uses incremental RayCrossingCounter – easy to use over custom Ring data structures
![Page 16: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/16.jpg)
W W W . R E F R A C T I O N S . N E T
Spatial IndexesSpatial Indexes
• Several types of spatial index available– 2-D: QuadTree, STRtree– 1-D: Bintree, SortedPackedIntervalRTree
• Used in many internal JTS operations to improve performance– Line noding– Line segment intersection detection– Point-in-polygon
• Often useful for improving performance of “naive” spatial algorithms– In theory takes O(n2) into O(n log n) !
![Page 17: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/17.jpg)
W W W . R E F R A C T I O N S . N E T
Spatial Indexes Spatial Indexes –– STRtreeSTRtree VS VS QuadTreeQuadTree
• STRtree– Packed R-Tree– Cannot be modified once built (no insert or
delete)– Fastest performance
• QuadTree– Slower performance (but still good!)– Supports insert & delete– Useful for “online” algorithms
![Page 18: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/18.jpg)
W W W . R E F R A C T I O N S . N E T
Future EnhancementsFuture Enhancements
• Polygon Fixing/Cleaning• PreparedGeometry.intersection()• Rectangle clipping (intersection)• Buffer enhancements: variable-width, single-sided,
offset lines• Geometry Smoothing, Densification• Measures support for Linear Referencing• Geometry.cut(Geometry)• Topology API• Interface-based Geometry model
– Easier to use JTS over other geometry implementations– Coordinate interface too!
![Page 19: jts secrets foss4g2007 - JUMP GISjump-pilot.sourceforge.net/pdfs/jts_secrets_foss4g2007.pdf · Microsoft PowerPoint - jts_secrets_foss4g2007.ppt Author: finstef Created Date: 10/15/2007](https://reader035.vdocuments.mx/reader035/viewer/2022071212/60250c3aa0b24c40e725fef8/html5/thumbnails/19.jpg)
W W W . R E F R A C T I O N S . N E T
Downloads & InformationDownloads & Information
• Download JTS
http://sourceforge.net/projects/jts-topo-suite
• JTS Mailing List
http://lists.jump-project.org/mailman/listinfo/jts-devel