I followed your instructions and am getting errors. Here is what I did.
XYNode src = "" Coordinate (101.603802, 3.071856));
XYNode dest = (XYNode)lgb.getNode(new Coordinate(101.71339200,3.15235700));
Error : java.lang.ClassCastException: org.geotools.graph.structure.basic.BasicNode
at test1.main(test1.java:86)
Line 86 refers to the first line above.
So I thought perhaps I should not have casted it and used this:-
Node src = "" Coordinate (101.603802, 3.071856));
Node dest = lgb.getNode(new Coordinate(101.71339200,3.15235700));
and i got the following error:-
java.lang.ClassCastException
at test1$1.getWeight(test1.java:93)
at org.geotools.graph.traverse.standard.DijkstraIterator.cont(DijkstraIterator.java:184)
at org.geotools.graph.traverse.basic.BasicGraphTraversal.traverse(BasicGraphTraversal.java:172)
at org.geotools.graph.path.DijkstraShortestPathFinder.calculate(DijkstraShortestPathFinder.java:85)
at test1.main(test1.java:102)
Line 93 : LineSegment line = (LineSegment)e.getObject(); (this is part of the getWeight method)
Line 102: dsp.calculate();
I did some debugging on dst and src to see if there was a value and there indeed was...
src="" while dst=6336
Thanks for helping me out with this.....
Jase
On 11/23/05, Justin Deoliveira <[EMAIL PROTECTED]> wrote:
Hi Jase,
Looking closer at your code snippet I see the problem. You are creating
new nodes for src and dest. Instead the nodes need to be pre-existing in
the graph.
The LineStringGraphGenerator has a method called getNode(Coordinate).
You can use it to a node in the graph at a particular coordinate.
So instead of:
XYNode src = "" BasicXYNode();
src.setCoordinate(new Coordinate (101.603802, 3.071856));
XYNode dest = new BasicXYNode();
dest.setCoordinate(new Coordinate(101.71339200,3.15235700));
You should use:
XYNode src = "" Coordinate(101.603802, 3.071856));
XYNode dest = lgb.getNode(new Coordinate(101.71339200,3.15235700 ));
Hope that helps, let me know if that works for you.
Justin
Jase wrote:
> hi Justin,
>
> I'm not getting any errors. it's just that when i printed the value of
> "p" i got a null value.
>
> Thanks
>
> Jase
>
> On 11/23/05, * Justin Deoliveira* <[EMAIL PROTECTED]
> <mailto: [EMAIL PROTECTED]>> wrote:
>
> Hi Jase,
>
> Could you send the stack trace of the exception. Thanks.
>
> Justin
>
> Jase wrote:
> > Hi Justin,
> >
> > Upon closer inspection on my database, I found that the roads
> have been
> > noded on the intersections. MOst of the roads I had a look shares a
> > common end point.
> >
> > I proceeded on with using some of the algorithms that you
> suggested in
> > this mailing list. What I'm getting is a null pointer. I'm a bit
> baffled
> > as to what might have gone wrong. I initially though that the roads
> > might not have been noded so I tried with two points on the same road
> > and got the same results.
> >
> > Attached are the codes that I used. I'm guessing I did something
> wrong
> > at the "src" and "dest"
> >
> > Thanks.
> >
> > Jase
> >
> >
> >
> > DataStore pgDatastore =
> DataStoreFinder.getDataStore(params);
> > FeatureSource fsBC = pgDatastore.getFeatureSource
> ("mustmrr");
> > System.out.println("Road to be added: " +
> > fsBC.getCount(Query.ALL));
> > System.out.println("Reading PostGIS datastore...");
> >
> > LineStringGraphGenerator lgb = new
> LineStringGraphGenerator();
> > //FeatureSource fs =
> (FeatureSource)layers.get("mustmrr");
> > FeatureResults fr = fsBC.getFeatures ();
> > FeatureCollection fc = fr.collection();
> > FeatureIterator feat = fc.features();
> >
> > Envelope envelope = fc.getBounds();
> > System.out.println ("Building graph network...");
> > while (feat.hasNext())
> > {
> > Feature ft = feat.next();
> >
> > if (envelope.contains(ft.getBounds ()))
> > {
> > System.out.println("Road Name:"+
> > ft.getAttribute("name").toString().trim() + "\tAtribute:"
> > +ft.getAttribute("wkb_geometry"));
> > lgb.add(ft.getAttribute("wkb_geometry"));
> >
> > }
> > }
> >
> > Graph g = lgb.getGraph();
> > System.out.println (g);
> > XYNode src = "">> > src = "" BasicXYNode();
> > src.setCoordinate(new Coordinate (101.603802, 3.071856));
> >
> > XYNode dest = new BasicXYNode();
> > dest.setCoordinate(new
> Coordinate(101.71339200,3.15235700));
> >
> > DijkstraIterator.EdgeWeighter weighter = new
> > DijkstraIterator.EdgeWeighter()
> > {
> > public double getWeight(Edge e)
> > {
> > LineSegment line = (LineSegment)e.getObject();
> > return(line.getLength());
> >
> > }
> > };
> >
> > DijkstraShortestPathFinder dsp = new
> > DijkstraShortestPathFinder(g, src, weighter);
> > System.out.println("Calculating Paths....");
> > dsp.calculate();
> > Path p = dsp.getPath(dest);
> > System.out.println(p);
>
>
> --
> Justin Deoliveira
> The Open Planning Project
> http://topp.openplans.org
>
>
--
Justin Deoliveira
The Open Planning Project
http://topp.openplans.org
