Re: [Jts-topo-suite-user] LineString crosses
Brought to you by:
dr_jts
From: Martin D. <mtn...@gm...> - 2014-10-20 22:17:55
|
Good point, Michael. That would be an elegant and efficient way to implement the "strict crosses" predicate. And there's a fair bit of existing SegmentIntersector code which does "almost" the needed thing. See for instance SegmentIntersectionDetector. The net new code needed is the code to build the local topology at each intersection to test for strict crossing. On Mon, Oct 20, 2014 at 2:48 PM, Michael Michaud < m.m...@or...> wrote: > Hi, > > It has been a long time I've not played with noding package, but would a > Noder (ex. MCIndexNoder) with an appropriate SegmentIntersector be a > solution ? > > Michaël > > Unfortunately the DE-9IM model (which is used to define the OGC SFS > spatial predicates which JTS implements) doesn't allow specifying true line > crossing (as far as I can tell). So there's no direct way to compute this > using existing JTS predicates. > > Determining this condition would require building a simple topological > structure for each LineString (essentially a chain of segments). Then each > segment can be checked against all others to determine if a true crossing > exists. There are three situations which need to be checked: a) crossing > at interior point of 2 segments, (b) crossing at a vertex on one segment, > and (c) crossing at vertices on both segments. (This is why the full > topology is required, rather than just checking segments individually). To > make this performant, the segments would need to be indexed in some way > (for instance, using the JTS STRtree > > This seems like a useful predicate to have for JTS. Feel free to post > the code if you implement it. > > > On Mon, Oct 20, 2014 at 6:28 AM, Tore Halset <ha...@pv...> wrote: > >> Hello. >> >> I have two LineString depth contours that I want to check for crossing. >> For this domain, overlap/touch is fine, but not crossing. >> >> The following junit-formatted example show two LineStrings that touch >> each other in (2 2). This is reported as a crossing by >> LineString#crosses(LineString), but for my domain this is not a cross. >> >> public void testCrosses() throws ParseException { >> WKTReader r = new WKTReader(); >> LineString ls1 = (LineString) r.read("LINESTRING (1 2, 3 2)"); >> LineString ls2 = (LineString) r.read("LINESTRING (1 1, 2 2, 3 >> 1)"); >> assertFalse(ls1.crosses(ls2)); >> } >> >> Any tips to how I can check for crossing, but not touches like this? >> >> Regards, >> Tore Halset. >> >> ------------------------------------------------------------------------------ >> Comprehensive Server Monitoring with Site24x7. >> Monitor 10 servers for $9/Month. >> Get alerted through email, SMS, voice calls or mobile push notifications. >> Take corrective actions from your mobile device. >> http://p.sf.net/sfu/Zoho >> _______________________________________________ >> Jts-topo-suite-user mailing list >> Jts...@li... >> https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user >> > > > > ------------------------------------------------------------------------------ > Comprehensive Server Monitoring with Site24x7. > Monitor 10 servers for $9/Month. > Get alerted through email, SMS, voice calls or mobile push notifications. > Take corrective actions from your mobile device.http://p.sf.net/sfu/Zoho > > > > _______________________________________________ > Jts-topo-suite-user mailing lis...@li...https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user > > > > > ------------------------------------------------------------------------------ > Comprehensive Server Monitoring with Site24x7. > Monitor 10 servers for $9/Month. > Get alerted through email, SMS, voice calls or mobile push notifications. > Take corrective actions from your mobile device. > http://p.sf.net/sfu/Zoho > _______________________________________________ > Jts-topo-suite-user mailing list > Jts...@li... > https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user > > |