Thanx Steve, your information were helpful, but when I think of it it
confuses me a lot, lets first start with my fields in DB.
Columns are:
gid serial NOT NULL,
rod_name_a character varying(50),
label character varying(50),
rod_length integer,
rod_no integer,
rod_type character varying(1),
rod_class character varying(1),
rod_code character varying(10),
shape_leng numeric,
the_geom geometry,
source integer,
target integer,
length double precision,
x1 double precision,
y1 double precision,
x2 double precision,
y2 double precision,
to_cost double precision,
"rule" text,
cost_factor integer,
main_cost double precision,
reverse_cost double precision,
roadclass text DEFAULT 'OTHER'::text,
cost_reverse_factor integer DEFAULT 5,
Now, I am confused, because I cannot calculate the heading in the
first place, If I have
B+---\
x2,y2
|
x1,y1
A+---/
Now I can calculate the heading simply by comparing x1 and y1 to x2
to y2 and which is larger (based on lonlat) so I can judge it, but
some times I am having this:
B+---\
x1,y1
|
x2,y2
A+---/
Now it is misleading, maybe thats why you told me not to use start
and end point, but wait, what else to use ? According to my DB I
cannot think of any other way to calculate headings and angles.
Regards
On Wed, Dec 31, 2008 at 7:45 AM, Stephen Woodbridge
<[email protected] <mailto:[email protected]>> wrote:
Ahmad Bdair wrote:
Yes, that is something very similar to what I need to do, I
already wrote a php code to check angels and slopes, but it was
not accurate, it was more life "if else" code, I check the
longlat for current segment
When you check the angles do not use the end points because they are
mis-leading.
B+---\
|
A+---/
If you have a segment from A to B like the above and you calculate
the heading or angles based on the vector AB then it will point
north and is should be pointing west at the end of the vector or
east at the start of the vector.
You also need to look at weather or not you need to flip segments
because you route might traverse them from start to end OR from end
to start.
When I compute angles I grid the angles into 8 pie pieces of 45
degrees each.
continue straight
turn slight right/left
turn right/left
turn sharp right/left
make a u-turn
with longlat for the previous one, I guess you didn't use the
database for direction calculation(except for routing) am I
right? Isn't steps 3 and 4 depends on your angel calculations?
I have done this in C in a prototype router I wrote years ago. I
have implemented it in PHP and in perl in various incarnations in
the past. The demo page has it written in pgpsql, but it is based on
my own heavily modified versions of the pgRouting stored procedures.
Hope the above helps with your problems. I find it easiest to work
out the math problems of computing the angles and headings first and
make sure they are correct. Then move on to the other issues. If
your math is wrong computing the headings and angles it will cloud
all the other results.
Best regards,
-Steve
I have the roads with two different languages, a road map like
anyother road map I guess.
On Tue, Dec 30, 2008 at 3:17 AM, Stephen Woodbridge
<[email protected] <mailto:[email protected]>
<mailto:[email protected]
<mailto:[email protected]>>> wrote:
bdair2002 wrote:
Hello,
I am developing an application using Pgrouting with
Postgis
data, everything
is fine, but now I am looking to do something like
Google
directions guide,
where it tells you turn left or right, I am wondering
if this
feature is a
built-in feature in Pgrouting or Postgis.
Regards
No this is not a feature that is part of either.
I have implemented a directions explicator, but it is
somewhat
specific to the data that you have, as you need to know what
column(s) contain the road names, if you have signage
information
then you need to know how to link to that. If you want to be
able to
explicate in multiple languages, then you probably need to
consider
supporting multiple languages each in a separate table the
you can
select from when you generate the languages.
The algorithm is pretty straight forward as the you currently
get a
list of segments that make up the route. Then you need to:
analyze each segment and
1) check to see if you want to join it with the previous
segment
because the road name matches
2) check the angle that it makes with the last segment to
determine
right, left, straightness of turn
3) compute the compass heading for the segment
4) determine if you have signage
5) based on these, determine if you are read to explicate and
which
predefined instruction you need to explicate an instruction
6) loop through all segments
For a demo of this you can try:
http://imaptools.com/leaddog/routing/dd.html
Zoom into a city in one of the yellow areas, set a start
and end
point and click [calculate route] button. The driving
directions
should show below the button if it was successful, be
patience the
routing is running on a 333MHz box.
-Steve
_______________________________________________
postgis-users mailing list
[email protected]
<mailto:[email protected]>
<mailto:[email protected]
<mailto:[email protected]>>
http://postgis.refractions.net/mailman/listinfo/postgis-users
------------------------------------------------------------------------
_______________________________________________
postgis-users mailing list
[email protected]
<mailto:[email protected]>
http://postgis.refractions.net/mailman/listinfo/postgis-users
_______________________________________________
postgis-users mailing list
[email protected]
<mailto:[email protected]>
http://postgis.refractions.net/mailman/listinfo/postgis-users
------------------------------------------------------------------------
_______________________________________________
postgis-users mailing list
[email protected]
http://postgis.refractions.net/mailman/listinfo/postgis-users