[pgrouting-dev] Building some tools to work with TSP

Helder Alves helderalvespt at gmail.com
Fri Dec 13 00:41:10 PST 2013


Steve,

Thanks for your time. Definitely will try that!

As I had no problem creating the vertices table and the graph check
returned "OK", I assumed everything was OK.

--
Helder Alves
On Dec 13, 2013 1:57 AM, "Stephen Woodbridge" <woodbri at swoodbridge.com>
wrote:

> On 12/12/2013 7:13 PM, Helder Alves wrote:
>
>> Hi again Steve!
>>
>> You got it right.
>>
>> All the simple pgr_trsp queries you suggested returned:
>>
>> *seq;id1;id2;cost*
>> 0;-1;0;0
>>
>> The result from pgr_analyzegraph check is "OK".
>>
>>     SELECT id1 as path,
>>     ST_Length_Spheroid(st_astext(st_linemerge(st_union(b.the_geom))),
>>     'SPHEROID["GRS_1980",6378137,298.257222101]')
>>        FROM pgr_kdijkstraPath(
>>            'SELECT id, source, target, cost, reverse_cost FROM ways',
>>            98306, array[146098], true, true) a,
>>                  ways b
>>     WHERE a.id3=b.id <http://b.id>
>>     GROUP by id1
>>     ORDER by id1;
>>
>>
>> Definitely I think something is not OK. The output of the query above is
>> the following one:
>>
>> *path;st_length_spheroid*
>> 146098;4374.81625857547
>>
>> As may be guessing already, this query for the other 2 pairs of vids
>> (228347, 228369 and 228369,98306) also returned the expected distances.
>>
>> What do you suggest as next step?
>>
>
> https://github.com/pgRouting/pgrouting/wiki/Working-with-OSM-Data
>
> This is a script that I use to create a big rectangular grid of
> overlapping horizontal and vertical lines that I call pgr_nodenetwork on,
> the join it back to the original table to make a useful table for
> pgRouting. Mostly I offer it so you can see how to:
>
> 1. run pgr_nodenetwork
> 2. create a new table using a join
> 3. and then create a topology
>
> You probably need to run the three steps above to get a usable table for
> pgRouting.
>
> -Steve
>
>
> [] ~/work/osrm-tools$ cat mk-testdb2
> #/bin/sh
>
> DBNAME=osrm_test
> DBUSER=postgres
> DBHOST=mappy
>
> dropdb -U $DBUSER -h $DBHOST $DBNAME
> createdb -U $DBUSER -h $DBHOST $DBNAME
>
> psql -U $DBUSER -h $DBHOST $DBNAME <<EOF
> create extension postgis;
> create extension pgrouting;
>
> -- create 50x50 grid of overlapping lines horizontal and vertical
>
> create table ddunnoded (
>   id serial not null primary key,
>   name text,
>   dir_travel character(1),
>   speed_cat character(1)
> );
> select addgeometrycolumn('ddunnoded', 'the_geom', 4326, 'LINESTRING', 2);
>
> insert into ddunnoded (dir_travel, speed_cat, name, the_geom)
> select case when s1%7 = 0 then 'F' when s1%7 = 4 then 'T' else 'B' end,
>        (random()*4+1)::character,
>        'H'||s1,
>        st_setsrid(st_makeline(st_makepoint(-77.0, 42.0+(3.0/50.0*(s1-1))),
>                               st_makepoint(-74.0,
> 42.0+(3.0/50.0*(s1-1)))), 4326)
>   from (select generate_series(1,50) as s1) as foo
> union all
> select case when s1%11 = 0 then 'F' when s1%11 = 7 then 'T' else 'B' end,
>        (random()*4+1)::character,
>        'V'||s1,
>        st_setsrid(st_makeline(st_makepoint(-77.0+(3.0/50.0*(s1-1)), 42.0),
>                               st_makepoint(-77.0+(3.0/50.0*(s1-1)),
> 45.0)), 4326)
>   from (select generate_series(1,50) as s1) as foo;
>
> -- node the grid so we can use it
> select pgr_nodenetwork('ddunnoded',0.000001);
>
>
> -- cat m/sec   kph     mph
> -- 1   25      90      56
> -- 2   18      65      40
> -- 3   15      54      33
> -- 4   10      36      22
> -- 5    5      18      11
>
> -- copy the noded table into a table we can use for a graph
> -- and add the required columns
> create table ddnoded2 (
>   gid serial not null primary key,
>   id integer,
>   name text,
>   source integer,
>   target integer,
>   dir_travel character(1),
>   speed_cat character(1),
>   roundabout character(1) default 'N',
>   tunnel character(1) default 'N',
>   bridge character(1) default 'N',
>   len_m float8,
>   cost float8
> );
> select addgeometrycolumn('ddnoded2', 'the_geom', 4326, 'LINESTRING', 2);
>
> insert into ddnoded2 (id, name, dir_travel, speed_cat, len_m, cost,
> the_geom)
> select a.id,
>        name,
>        dir_travel,
>        speed_cat,
>        st_length2d_spheroid(a.the_geom, 'SPHEROID["GRS_1980",6378137,298.257222101]')
> as len_m,
>        st_length2d_spheroid(a.the_geom, 'SPHEROID["GRS_1980",6378137,298.257222101]')
> / case when speed_cat='1' then  25.0
>            when speed_cat='2' then  18.0
>            when speed_cat='3' then  15.0
>            when speed_cat='4' then  10.0
>            else 5.0 end as cost,
>        a.the_geom
>   from ddunnoded_noded a, ddunnoded b
>  where a.old_id=b.id
>  order by a.old_id, a.sub_id;
>
> -- now create a topology
> select pgr_createtopology('ddnoded2', 0.000001, id:='gid');
>
> create table ddnoded2_restrictions (
>     id serial not null primary key,
>     n_via integer,
>     n_from integer,
>     n_to integer,
>     is_forbidden boolean,
>     to_way_id integer
> );
>
> -- Total query runtime: 8080 ms.
> EOF
>
> _______________________________________________
> pgrouting-dev mailing list
> pgrouting-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/pgrouting-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/pgrouting-dev/attachments/20131213/eeddf1c2/attachment-0001.html>


More information about the pgrouting-dev mailing list