<div dir="ltr">It's working! Thanks! :-)</div><div class="gmail_extra"><br clear="all"><div><div dir="ltr"><div>--</div><div>Helder Alves <br></div>+351912384076<br></div></div>
<br><br><div class="gmail_quote">On Mon, Nov 4, 2013 at 6:42 PM, Stephen Woodbridge <span dir="ltr"><<a href="mailto:woodbri@swoodbridge.com" target="_blank">woodbri@swoodbridge.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
You ways table does not have a column named "id" for now you might have to set up a view like:<br>
<br>
create view v_ways as select your_id_col as id, source, target, cost from ways;<br>
<br>
then try your query replacing 'ways' with 'v_ways'<br>
<br>
-Steve<div><div class="h5"><br>
<br>
On 11/4/2013 11:31 AM, Helder Alves wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
Hi Steve,<br>
<br>
select dmatrix::float8[]<br>
from pgr_vidstodmatrix(<br>
pgr_pointstovids(<br>
<br>
pgr_texttopoints('-7.50501,40.<u></u>26310;-7.48864,40.17530;-7.<u></u>49901,40.13950;-7.57596,40.<u></u>12350;-7.61591,40.13230;-7.<u></u>61935,40.13230;-7.67235,40.<u></u>13580;-7.67087,40.13660;-7.<u></u>66510,40.13860;-7.74559,40.<u></u>15640;-7.74588,40.15730;-7.<u></u>74746,40.15690;-7.74922,40.<u></u>15540;-7.74926,40.15310;-7.<u></u>73537,40.14230;-7.63556,40.<u></u>18920;-7.64849,40.22630;-7.<u></u>62354,40.25680;-7.62425,40.<u></u>26280;-7.62223,40.25830;-7.<u></u>62179,40.25680;-7.62116,40.<u></u>25580;-7.64803,40.22390;-7.<u></u>63916,40.20560;-7.63664,40.<u></u>20250;-7.63767,40.19970;-7.<u></u>63623,40.20000;-7.56974,40.<u></u>26710;-7.49104,40.26500;-7.<u></u>50473,40.26320',<br>
4326),<br>
'ways'),<br>
<br>
pgr_texttopoints('-7.50501,40.<u></u>26310;-7.48864,40.17530;-7.<u></u>49901,40.13950;-7.57596,40.<u></u>12350;-7.61591,40.13230;-7.<u></u>61935,40.13230;-7.67235,40.<u></u>13580;-7.67087,40.13660;-7.<u></u>66510,40.13860;-7.74559,40.<u></u>15640;-7.74588,40.15730;-7.<u></u>74746,40.15690;-7.74922,40.<u></u>15540;-7.74926,40.15310;-7.<u></u>73537,40.14230;-7.63556,40.<u></u>18920;-7.64849,40.22630;-7.<u></u>62354,40.25680;-7.62425,40.<u></u>26280;-7.62223,40.25830;-7.<u></u>62179,40.25680;-7.62116,40.<u></u>25580;-7.64803,40.22390;-7.<u></u>63916,40.20560;-7.63664,40.<u></u>20250;-7.63767,40.19970;-7.<u></u>63623,40.20000;-7.56974,40.<u></u>26710;-7.49104,40.26500;-7.<u></u>50473,40.26320',<br>
4326),<br>
'ways')<br>
<br>
<br>
<br>
While running the query above, I got the error below.<br>
<br>
column "id" does not exist<br>
LINE 1: select id, source, target, cost from ways where the_geom && ...<br>
^<br>
QUERY: select id, source, target, cost from ways where the_geom &&<br>
'<u></u>0103000020E6100000010000000500<u></u>00002E34D769A4651FC05EBA490C02<u></u>0344402E34D769A4651FC0492EFF21<u></u>FD2E444076ABE7A4F78D1DC0492EFF<u></u>21FD2E444076ABE7A4F78D1DC05EBA<u></u>490C020344402E34D769A4651FC05E<u></u>BA490C02034440'::geometry<br>
CONTEXT: PL/pgSQL function<br>
pgr_vidstodmatrix(integer[],<u></u>geometry[],text,double precision) line<br>
57 at FOR over EXECUTE statement<br>
<br>
<br>
I guess it's some kind of bug, which is something it may happen when we<br>
are testing something from the develop branch! :-)<br>
<br>
Can you help me with this?<br>
<br>
Thanks!<br>
<br>
<br>
<br>
<br>
<br>
--<br>
Helder Alves<br>
<a href="tel:%2B351912384076" value="+351912384076" target="_blank">+351912384076</a><br>
<br>
<br>
On Wed, Oct 9, 2013 at 5:26 PM, Stephen Woodbridge<br></div></div><div class="im">
<<a href="mailto:woodbri@swoodbridge.com" target="_blank">woodbri@swoodbridge.com</a> <mailto:<a href="mailto:woodbri@swoodbridge.com" target="_blank">woodbri@swoodbridge.<u></u>com</a>>> wrote:<br>
<br>
Another common problem is orienting the returned edges so they match<br>
up end to end. For example:<br>
<br>
select st_astext(the_geom) from<br></div>
pgr_tsptrsp(pgr_texttopoints('<u></u>__2,0;2,1;3,1;2,2;4,1;4,2;2,3;<u></u>3,__2',<div class="im"><br>
0), 'edge_table', true, true) a, edge_table b where a.id2=<a href="http://b.id" target="_blank">b.id</a><br></div>
<<a href="http://b.id" target="_blank">http://b.id</a>>;<div class="im"><br>
<br>
"LINESTRING(2 1,2 2)"<br>
"LINESTRING(2 2,3 2)"<br>
"LINESTRING(3 2,4 2)"<br>
"LINESTRING(4 1,4 2)" -- needs to be flipped<br>
"LINESTRING(3 1,4 1)" -- needs to be flipped<br>
"LINESTRING(2 1,3 1)" -- needs to be flipped<br>
"LINESTRING(2 1,2 2)"<br>
"LINESTRING(2 2,2 3)"<br>
"LINESTRING(2 2,2 3)" -- needs to be flipped<br>
"LINESTRING(2 1,2 2)" -- needs to be flipped<br>
"LINESTRING(2 0,2 1)" -- needs to be flipped<br>
"LINESTRING(2 0,2 1)"<br>
<br>
So I wrote a new function pgr_flipedges(ga geometry[]) that can be<br>
used like this:<br>
<br>
select st_astext(e) from (<br></div>
select unnest(pgr_flipedges(array___<u></u>agg(the_geom))) as e<br>
from<br>
pgr_tsptrsp(pgr_texttopoints('<u></u>__2,0;2,1;3,1;2,2;4,1;4,2;2,3;<u></u>3,__2',<div class="im"><br>
0), 'edge_table', true, true) a,<br>
edge_table b<br></div>
where a.id2=<a href="http://b.id" target="_blank">b.id</a> <<a href="http://b.id" target="_blank">http://b.id</a>><div><div class="h5"><br>
) as foo;<br>
<br>
"LINESTRING(2 1,2 2)"<br>
"LINESTRING(2 2,3 2)"<br>
"LINESTRING(3 2,4 2)"<br>
"LINESTRING(4 2,4 1)"<br>
"LINESTRING(4 1,3 1)"<br>
"LINESTRING(3 1,2 1)"<br>
"LINESTRING(2 1,2 2)"<br>
"LINESTRING(2 2,2 3)"<br>
"LINESTRING(2 3,2 2)"<br>
"LINESTRING(2 2,2 1)"<br>
"LINESTRING(2 1,2 0)"<br>
"LINESTRING(2 0,2 1)"<br>
<br>
Notice how all the edges have been flipped to return a continuous<br>
path from start to end of each adjacent segment in the path.<br>
<br>
-Steve<br>
All the mentioned code will eventually get checked into pgrouting<br>
2.1 development branch once it is stable and I have test cases and<br>
docs written for it.<br>
<br>
-Steve<br>
<br>
<br>
On 10/9/2013 10:29 AM, Stephen Woodbridge wrote:<br>
<br>
Hi all,<br>
<br>
I have been playing with some tools to allow me to integrate TSP<br>
optimization into a web application. I thought I would share<br>
what I have<br>
come up with for comments. One of the things I did was to try<br>
and break<br>
down the process into reusable modular functions. For example<br>
there are<br>
two functions to compute the distance matrix based on either<br>
Euclidean<br>
or kdijkstra distances. One could add other functions to compute<br>
them<br>
based on other algorithms. Also each function does one<br>
conversion so it<br>
is simple to understand and easy to test or replace with another<br>
function that does the transformation in a different way. Then<br>
the final<br>
function glues all the pieces together to get the final result.<br>
<br>
Goal:<br>
<br>
take a string or points like "x,y;x,y;x,y;..." and compute the TSP<br>
solution to order the points based on either Euclidean distance or<br>
network distances, then compute the route through the network<br>
and return<br>
the route geometry.<br>
<br>
Solution in progress:<br>
<br>
1. text to point geometry *<br>
pgr_texttopoints(pnts text, srid integer DEFAULT(4326))<br>
<br>
2. points to vertex ids *<br>
pgr_pointtoedgenode(edges text, pnt geometry, tol float8)<br>
pgr_pointstovids(pnts geometry[], edges text, tol float8<br>
DEFAULT(0.01))<br>
<br>
3. points to edge ids **<br>
<br>
4. points to [edge id, pct] **<br>
<br>
5. points to Euclidean distance matrix *<br>
pgr_points2dmatrix(pnts geometry[], OUT dmatrix double<br>
precision[],<br>
OUT ids integer[])<br>
<br>
6. vertex ids to kdijkstra distance matrix *<br>
pgr_vidstodmatrix(IN vids integer[], IN pnts geometry[], IN<br>
edges<br>
text, tol float8 DEFAULT(0.1), OUT dmatrix double precision[],<br>
OUT ids<br>
integer[])<br>
<br>
7. distance matrix to TSP to ordered list ***<br>
select * from pgr_tsp(<br>
(select dmatrix::float8[]<br>
from pgr_vidstodmatrix(<br>
pgr_pointstovids(<br>
<br></div></div>
pgr_texttopoints('2,0;2,1;3,1;<u></u>__2,2;4,1;4,2;2,3;3,2',<br>
0),<br>
'edge_table'),<br>
<br>
pgr_texttopoints('2,0;2,1;3,1;<u></u>__2,2;4,1;4,2;2,3;3,2', 0),<div class="im"><br>
'edge_table')<br>
),<br>
1<br>
);<br>
<br>
8. reorder vids based on ordered list *<br>
<br>
9. compute trsp for pairs of vids in ordered list *,!<br>
pgr_trsp(sql text, vids integer[], directed boolean,<br>
has_reverse_cost boolean, turn_restrict_sql text DEFAULT NULL::text)<br>
<br>
pgr_tsptrsp(pnts geometry[], edges text, directed boolean,<br>
has_reverse_cost boolean, tol float8 DEFAULT(0.1), turn_restrict_sql<br>
text DEFAULT NULL::text)<br>
<br>
select * from<br></div>
pgr_tsptrsp(pgr_texttopoints('<u></u>__2,0;2,1;3,1;2,2;4,1;4,2;2,3;<u></u>3,__2',<div class="im"><br>
0),<br>
'edge_table', true, true);<br>
<br>
<br>
10. output results **<br>
<br>
NOTES:<br>
* - done<br>
** - not done<br>
*** - already part of 2.0<br>
! - computing a route through via points can be optimized in the<br>
C/C++<br>
code for better performance, but I currently just prototyped<br>
this up in<br>
plpgsql<br>
<br>
Thoughts,<br>
-Steve<br></div>
______________________________<u></u>___________________<br>
pgrouting-dev mailing list<br>
<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a> <mailto:<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.<u></u>osgeo.org</a>><br>
<a href="http://lists.osgeo.org/__mailman/listinfo/pgrouting-dev" target="_blank">http://lists.osgeo.org/__<u></u>mailman/listinfo/pgrouting-dev</a><br>
<<a href="http://lists.osgeo.org/mailman/listinfo/pgrouting-dev" target="_blank">http://lists.osgeo.org/<u></u>mailman/listinfo/pgrouting-dev</a><u></u>><br>
<br>
<br>
______________________________<u></u>___________________<br>
pgrouting-dev mailing list<br>
<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a> <mailto:<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.<u></u>osgeo.org</a>><br>
<a href="http://lists.osgeo.org/__mailman/listinfo/pgrouting-dev" target="_blank">http://lists.osgeo.org/__<u></u>mailman/listinfo/pgrouting-dev</a><div class="im"><br>
<<a href="http://lists.osgeo.org/mailman/listinfo/pgrouting-dev" target="_blank">http://lists.osgeo.org/<u></u>mailman/listinfo/pgrouting-dev</a><u></u>><br>
<br>
<br>
<br>
<br>
______________________________<u></u>_________________<br>
pgrouting-dev mailing list<br>
<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/pgrouting-dev" target="_blank">http://lists.osgeo.org/<u></u>mailman/listinfo/pgrouting-dev</a><br>
<br>
</div></blockquote><div class="HOEnZb"><div class="h5">
<br>
______________________________<u></u>_________________<br>
pgrouting-dev mailing list<br>
<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/pgrouting-dev" target="_blank">http://lists.osgeo.org/<u></u>mailman/listinfo/pgrouting-dev</a><br>
</div></div></blockquote></div><br></div>