[postgis-users] pgRouting Query : Shooting Star

Matthew Pulis mpulis at gmail.com
Tue Nov 27 08:34:52 PST 2007


Hi, 

 

 

I am trying to play a bit with the Shooting Star Query of pgRouting, since I
need it to use it for one-way streets. 

 

I am trying this query : 

SELECT gid, the_geom 

FROM shootingstar_sp('streets', 

give_source('POINT(640905 225230)',1000,200), 

give_target('POINT(640982 225439)',1000,200), 2000,

'length',true,true); 

 

and also tried this query : 

select rt.gid, rt.the_geom, length(rt.the_geom), streets.gid 

from streets,

 (select gid, the_geom

 from shootingstar_sp(

 'streets', 

give_source('POINT(640905 225230)',1000,200), 

give_target('POINT(640982 225439)',1000,200), 5000, 'length', true, true

) 

)as rt 

 

For half of the results both edge_ids are the same, however when I project
the result on a shapefile then on QGis on my map, the points where the route
should start and end are FAR from the points I selected. 

 

The functions give_source and give_target are functions I gave to transfrom
the Point to the source colum and this is the function : -- Function:
give_source(text, integer, integer) 

 

-- DROP FUNCTION give_source(text, integer, integer); 

 

CREATE OR REPLACE FUNCTION give_source(text, integer, integer) 

 

RETURNS integer AS 

 

$BODY$ 

 

DECLARE 

 

pojnt ALIAS FOR $1; box ALIAS FOR $2; dist ALIAS FOR $3; 

 

r_source INTEGER; 

 

BEGIN 

 

SELECT source INTO r_source FROM streets s WHERE 

 

( the_geom && expand (pointfromtext(pojnt),box) and distance (s.the_geom ,
pointfromtext(pojnt)) < dist ) 

 

ORDER BY distance (s.the_geom , pointfromtext(pojnt)) ASC LIMIT 1; 

 

RETURN r_source; 

 

END; $BODY$ 

 

LANGUAGE 'plpgsql' VOLATILE; 

 

ALTER FUNCTION give_source(text, integer, integer) OWNER TO yancho; 

 

I know it should be something stupid that I am doing, but really am out of
ideas why it is not working. For sure the routing is being done well, but
the start / end points are wrong, so it should be something from the
give_source / give_target problem. BTW I used these two functions for my
astar_sp_delta testing and it worked perfectly : 

 

SELECT gid, AsText?(the_geom) AS wkt 

 

FROM astar_sp_delta( 

 

'streets', (select give_source('POINT(640905 225230)',1000,200), (select
give_target('POINT(640982 225439)',1000,200), 3000 ); 

 

"; 

 

 

As you can see on the paste here : http://yancho.pastebin.com/f7f44a0c2 

 

The first result row of astar_sp_delta is :
40617;"MULTILINESTRING((640920.707155369 225441.381903503,640919.710413482
225419.024734874,640904.400352 225231.230885577))" 

 

.. Which is very near the POINT : POINT(640905 225230), 

 

However the first result row of shootingstar_sp is :
791;"MULTILINESTRING((629357.137492173 222486.61416491,629357.137492172
222526.524103276))" followed by these two : 

 

47462;"MULTILINESTRING((629357.137492172 222526.524103276,629355.842055444
222559.004436553))" 44423;"MULTILINESTRING((629355.842055444
222559.004436553,629354.394306192 222605.962730528))" 

 

Which shows clearly how far it is from the starting point : POINT(640905
225230) 

 

Also I tried this function : 

 

SELECT * FROM shortest_path_shooting_star(' 

 

SELECT gid as id, 

 

source::integer, target::integer, length::double precision as cost,
rcost::double precision as reverse_cost, x1, y1, x2, y2, rule, to_cost 

 

FROM streets', 

 

give_source('POINT(640905 225230)',1000,200), give_target('POINT(640982
225439)',1000,200), 

 

false,true); 

 

Highted and pasted here : http://yancho.pastebin.com/d216a2408 

 

Which is giving me these 3 rows as my first resultset :
13065;791;39.9099383660941 13066;47462;32.5061564333317
21733;44423;46.9806061157797 

 

Which have the same gid as the first 3 resultset given from shootingstar_sp
.. so it is quite obvious I am giving the functions the wrong starting
location / ending .. any one can shed some light on what I should fix
please? 

 

Any ideas will be extremely appreciated and keep up the good work :)

 

Thanks and regards 

 

Matthew

 

 

 

 

  _____  

I am using the free version of SPAMfighter for private users.
It has removed 18348 spam emails to date.
Paying users do not have this message in their emails.
Try SPAMfighter <http://www.spamfighter.com/len>  for free now!

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20071127/000c802b/attachment.html>


More information about the postgis-users mailing list