Re: [Jts-topo-suite-user] Noder usage
Brought to you by:
dr_jts
From: Martin D. <mtn...@gm...> - 2011-12-20 17:40:11
|
Glad that you've figured out how to use the Noder API. It looks like you are doing the right thing in the code sample. The Noder API is a bit complex. It initially wasn't really intended for use outside of JTS, so the Javadoc hasn't had as much attention as it could have. geomgraph is *definitely* not intended for external use, and it's fairly ugly non-resusable code. Using it is discouraged. Planar graph doesn't in itself do any noding - it's just used for representing topology. I think what might be better is to identify the desired use case, and then provide an easier-to-use public API over top of the Noder API. I presume your use case is that you would like to node one or two sets of linestrings, and preserve their orientation and their parentage for use in further topology manipulation? 2011/12/20 Michaël Michaud <mic...@fr...> > Hi Martin, > > Thanks for answering, > I finally get what I need using MXIndexNoder and IntersectionAdder (see > code below). I should have made a mistake when I have tried the same > code from beanshell a few days ago. > > Noding package is quite complex, and I always have hard time to find > which Noder and which SegmentIntersector to use to achieve what I need to. > Any reference, examples, presentation, or faq would be much appreciated. > > Question : am I supposed to be able to achieve the same thing (i.e. > getting non intersecting edges from intersecting linestring) with > geomgraph package and/or planargraph package ? > I've tried without much success yesterday. > > Thanks for help, and have a happy X-mas > > Michaël > > Code finally showing the linestring to edges decomposition > > import com.vividsolutions.jts.geom.Coordinate; > import com.vividsolutions.jts.geom.GeometryFactory; > import com.vividsolutions.jts.geom.LineString; > import com.vividsolutions.jts.noding.*; > import com.vividsolutions.jts.algorithm.RobustLineIntersector; > import java.util.List; > > public class TestNoder { > public static void main(String[] args) { > RobustLineIntersector RLI = new RobustLineIntersector(); > IntersectionAdder SI = new IntersectionAdder(RLI); > GeometryFactory GF = new GeometryFactory(); > LineString line0 = GF.createLineString(new Coordinate[]{new > Coordinate(0,0), new Coordinate(5,0), new Coordinate(10,0)}); > LineString line1 = GF.createLineString(new Coordinate[]{new > Coordinate(5,5), new Coordinate(5,0), new Coordinate(5,-5)}); > MCIndexNoder noder = new MCIndexNoder(); > noder.setSegmentIntersector(SI); > List list = SegmentStringUtil.extractSegmentStrings(line0); > list.addAll(SegmentStringUtil.extractSegmentStrings(line1)); > noder.computeNodes(list); > System.out.println(noder.getNodedSubstrings()); > } > } > > ==> [LINESTRING (0.0 0.0, 5.0 0.0), LINESTRING (5.0 0.0, 10.0 0.0), > LINESTRING (5.0 5.0, 5.0 0.0), LINESTRING (5.0 0.0, 5.0 -5.0)] > > > Le 20/12/2011 05:00, Martin Davis a écrit : > > Hmmm.... not sure what's going on here. > > > > Did you use the getNodedSubstrings method after noding? > > > > If you can provide a Java code showing the issue that would help to > > debug it. > > > > On 12/16/2011 12:13 AM, Michaël Michaud wrote: > >> Hi all, > >> > >> I'm using Noder in a OpenJUMP plugin, but I can't find options to split > >> input linestrings into SegmentStrings when intersecting lines already > >> have a common node. > >> > >> In this case > >> > >> o > >> | > >> | > >> o------------o > >> | > >> | > >> o > >> > >> noder.getNodedSubstrings() give me 4 SegmentStrings > >> o > >> | > >> | > >> o------o-----o > >> | > >> | > >> o > >> > >> But in this case (2 LineStrings already noded) > >> > >> o > >> | > >> | > >> o------x-----o > >> | > >> | > >> o > >> > >> noder.getNodedSubstrings() give me 2 SegmentStrings, not 4, whatever > >> parameter I use for SegmentIntersector > >> I use MCIndexNoder > >> o > >> | > >> | > >> o------x-----o > >> | > >> | > >> o > >> > >> Is finding 4 SegmentStrings something Noder is supposed to be able to do > >> in this case ? > >> Or what is the class to use for that (I want to keep source features > >> attributes, which does not seem possible with union) ? > >> > >> I tried the following intersectors with MCIndexNoder > >> intersectors[0] = new InteriorIntersectionFinder(ROBUST); > >> intersectors[0].setFindAllIntersections(false); > >> intersectors[1] = new InteriorIntersectionFinder(ROBUST); > >> intersectors[1].setFindAllIntersections(true); > >> intersectors[2] = new IntersectionAdder(ROBUST); > >> intersectors[3] = new IntersectionFinderAdder(ROBUST); > >> intersectors[4] = new SegmentIntersectionDetector(ROBUST); > >> intersectors[4].setFindAllIntersectionTypes(false); > >> intersectors[4].setFindProper(false); > >> intersectors[5] = new SegmentIntersectionDetector(ROBUST); > >> intersectors[5].setFindAllIntersectionTypes(false); > >> intersectors[5].setFindProper(true); > >> intersectors[6] = new SegmentIntersectionDetector(ROBUST); > >> intersectors[6].setFindAllIntersectionTypes(true); > >> intersectors[6].setFindProper(false); > >> intersectors[7] = new SegmentIntersectionDetector(ROBUST); > >> intersectors[7].setFindAllIntersectionTypes(true); > >> intersectors[7].setFindProper(true); > >> > >> Thanks for help > >> > >> Michaël > >> > >> > >> > >> > ------------------------------------------------------------------------------ > >> Learn Windows Azure Live! Tuesday, Dec 13, 2011 > >> Microsoft is holding a special Learn Windows Azure training event for > >> developers. It will provide a great way to learn Windows Azure and what > it > >> provides. You can attend the event by watching it streamed LIVE online. > >> Learn more at http://p.sf.net/sfu/ms-windowsazure > >> _______________________________________________ > >> Jts-topo-suite-user mailing list > >> Jts...@li... > >> https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user > >> > >> > >> ----- > >> No virus found in this message. > >> Checked by AVG - www.avg.com > >> Version: 2012.0.1890 / Virus Database: 2108/4682 - Release Date: > 12/15/11 > >> > >> > >> > > > ------------------------------------------------------------------------------ > > Write once. Port to many. > > Get the SDK and tools to simplify cross-platform app development. Create > > new or port existing apps to sell to consumers worldwide. Explore the > > Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join > > http://p.sf.net/sfu/intel-appdev > > _______________________________________________ > > Jts-topo-suite-user mailing list > > Jts...@li... > > https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user > > > > > > > > ------------------------------------------------------------------------------ > Write once. Port to many. > Get the SDK and tools to simplify cross-platform app development. Create > new or port existing apps to sell to consumers worldwide. Explore the > Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join > http://p.sf.net/sfu/intel-appdev > _______________________________________________ > Jts-topo-suite-user mailing list > Jts...@li... > https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user > |