/
install osm road network for routing
install osm road network for routing
This document describes how download and install a working network available for routing
Download osm2po
Make sure you have av home directory with full access.
Osm2po webb page is http://osm2po.de/ and the lates releases from http://osm2po.de/releases/
download
#download osm2po (check version) wget http://osm2po.de/releases/osm2po-5.1.35.zip #unzip mkdir osm2po unzip osm2po-5.1.35.zip -d ./osm2po rm osm2po-5.1.35.zip
Change open2po.config
The default is good but it does not include bike and walk path.
osm2po.config changes
# only convert ways with one of these flags #.default.wtr.finalMask = car .default.wtr.finalMask = car|bike #.default.wtr.finalMask = bike|foot&goodgrade (since v5.0.20) # osm2po needs to know the anchor-tag and some default values if not tagged. # To avoid ambiguities configure a well chosen priority. # Main-Tag definitions. Params 1-4: # 1) priority # 2) clazz identifier (1-127) # 3) default speed in kmh # 4) allowed transportation type (optional) .default.wtr.tag.highway.motorway = 1, 11, 100, car .default.wtr.tag.highway.motorway_link = 1, 12, 30, car .default.wtr.tag.highway.trunk = 1, 13, 90, car .default.wtr.tag.highway.trunk_link = 1, 14, 30, car .default.wtr.tag.highway.primary = 1, 15, 70, car .default.wtr.tag.highway.primary_link = 1, 16, 30, car .default.wtr.tag.highway.secondary = 1, 21, 60, car .default.wtr.tag.highway.secondary_link = 1, 22, 30, car .default.wtr.tag.highway.tertiary = 1, 31, 40, car|bike .default.wtr.tag.highway.tertiary = 1, 33, 40, car|bike .default.wtr.tag.highway.tertiary_link = 1, 32, 20, car|bike .default.wtr.tag.highway.residential = 1, 41, 40, car|bike .default.wtr.tag.highway.road = 1, 42, 50, car|bike .default.wtr.tag.highway.unclassified = 1, 43, 50, car|bike .default.wtr.tag.highway.service = 1, 51, 5, car|bike .default.wtr.tag.highway.living_street = 1, 63, 7, car|bike|foot .default.wtr.tag.highway.pedestrian = 1, 62, 5, bike|foot .default.wtr.tag.highway.track = 1, 71, 10, bike|foot .default.wtr.tag.highway.path = 1, 72, 10, bike|foot .default.wtr.tag.highway.cycleway = 1, 81, 15, bike #.default.wtr.tag.highway.footway = 2, 91, 5, foot #.default.wtr.tag.highway.steps = 2, 92, 5, foot .default.wtr.tag.route.ferry = 2, 1, 10, ferry #.default.wtr.tag.route.shuttle_train = 2, 2, 50, rail|car #.default.wtr.tag.railway.rail = 3, 3, 50, rail # Other tags may also overwrite the default transportation type definition. # Tags without explicit values like wtr.deny.motorcar act like # an else-part and will be used if no other tag=value matches. .default.wtr.allow.motor[car|_vehicle].[yes|destination] = car .default.wtr.allow.[bicycle|cycleway] = bike .default.wtr.allow.[footway|sidewalk] = foot #.default.wtr.deny.tracktype.grade[4|5] = car|bike #.default.wtr.deny.access.no = car|bike|foot|rail|ferry #.default.wtr.deny.vehicle.no = car|bike #.default.wtr.deny.motor[_vehicle|car] = car #.default.wtr.deny.bicycle.no = bike #.default.wtr.deny.foot.no = foot #.default.wtr.deny.footway.none = foot
Get data and run osm2po
running osm2po
cd osm2po java -Xmx1g -jar osm2po-core-5.1.35-signed.jar prefix=sweden tileSize=x http://download.geofabrik.de/europe/sweden-latest.osm.pbf postp.0.class=de.cm.osm2po.plugins.postp.PgRoutingWriter cmd=c
Using existing database 'globalmap' and load data
Create osm2po database
#be postgres sudo su postgres #run psql psql globalmap create extension postgis; \i ./sweden/sweden_2po_4pgr.sql; \q exit
Create tables and views
Update sweden_2po_4pgr with cost for bike and walk. Create index
osm2po tables
create extension pgrouting; alter table public.sweden_2po_4pgr add column bike_cost double precision; alter table public.sweden_2po_4pgr add column walk_cost double precision; update public.sweden_2po_4pgr set bike_cost = CASE WHEN clazz IN (11,12,13,14) THEN 100000 when kmh < 17 then km/kmh ELSE (km/17)::double precision END , walk_cost= CASE WHEN clazz IN (11,12,13,14) THEN 100000 when kmh < 6 then km/kmh ELSE (km/6)::double precision END; #create index for the id column and for the geom_way column CREATE INDEX idx_sweden_2po_4pgr_id ON public.sweden_2po_4pgr(id); CREATE INDEX sweden_2po_4pgr_gix ON public.sweden_2po_4pgr USING GIST (geom_way); vacuum analyze public.sweden_2po_4pgr; CREATE TABLE public.sweden_osm2po_nodes (id integer primary key); SELECT AddGeometryColumn('public','sweden_osm2po_nodes','geom',4326,'point',2); INSERT INTO public.sweden_osm2po_nodes(id, geom) ( select id, st_centroid(st_collect(pt)) as geom from ( (select source as id, st_startpoint(geom_way) as pt from public.sweden_2po_4pgr ) union (select target as id, st_endpoint(geom_way) as pt from public.sweden_2po_4pgr ) ) as foo group by id ); CREATE INDEX idx_sweden_osm2po_nodes_id ON public.sweden_osm2po_nodes(id); CREATE INDEX osm2po_nodes_gix ON public.sweden_osm2po_nodes USING GIST (geom); --drop table public.distance_nodes CREATE TABLE public.distance_nodes (id serial, "name" text, node integer, edge integer, cost double precision ); SELECT AddGeometryColumn('public','distance_nodes','geom',4326,'point',2); -- isocrones CREATE TABLE distance_polygons (id serial, name text, max_cost double precision); SELECT AddGeometryColumn('distance_polygons','geom',4326,'POLYGON',2);
Add a column and update a link to Gadm, worldwide admin areas
Gadm
alter table public.sweden_2po_4pgr add column gadm_link integer; UPDATE public.sweden_2po_4pgr SET gadm_link=gadm.objectid from gadm.gadm WHERE gadm.iso= 'SWE' and ST_Intersects(sweden_2po_4pgr.geom_way, gadm.the_geom);
Create tables 'sweden_osm2po_nodes' with all nodes, 'distance_nodes' with calculated ditances from a location and 'distance_polygons' with calculated iso-crone polygons
osm2po tables
CREATE TABLE public.sweden_osm2po_nodes (id integer primary key); SELECT AddGeometryColumn('public','sweden_osm2po_nodes','geom',4326,'point',2); INSERT INTO public.sweden_osm2po_nodes(id, geom) ( select id, st_centroid(st_collect(pt)) as geom from ( (select source as id, st_startpoint(geom_way) as pt from public.sweden_2po_4pgr ) union (select target as id, st_endpoint(geom_way) as pt from public.sweden_2po_4pgr ) ) as foo group by id ); CREATE INDEX idx_sweden_osm2po_nodes_id ON public.sweden_osm2po_nodes(id); CREATE INDEX osm2po_nodes_gix ON public.sweden_osm2po_nodes USING GIST (geom); --drop table public.distance_nodes CREATE TABLE public.distance_nodes (id serial, "name" text, node integer, edge integer, cost double precision ); SELECT AddGeometryColumn('public','distance_nodes','geom',4326,'point',2); -- isocrones CREATE TABLE distance_polygons (id serial, name text, max_cost double precision); SELECT AddGeometryColumn('distance_polygons','geom',4326,'POLYGON',2);
Create a table with all road names
Gadm
CREATE TABLE public.osm_roadnames (id serial primary key, name_0 text, name_1 text, name_2 text, name text, km double precision); SELECT AddGeometryColumn('public','osm_roadnames','geom',4326,'MULTILINESTRING',2); insert into public.osm_roadnames (name_0, name_1, name_2, name,km,geom) SELECT name_0, name_1, name_2, osm_name, sum(km), ST_Multi(st_union(geom_way)) FROM sweden_2po_4pgr JOIN gadm.gadm ON gadm.objectid = sweden_2po_4pgr.gadm_link where osm_name is not null group by 1,2; CREATE INDEX osm_roadnames_gix ON public.osm_roadnames USING GIST (geom); vacuum analyze public.osm_roadnames;
Find a start and end node for making examples of routing and distances
Longitude (west) and Latitude (north) , place
59,1214893, 18,1033966, Villavägen 1 Västerhaninge
59,2717347, 18,0460712, Kallforsvägen, Bandhagen
find node
select id from public.sweden_osm2po_nodes order by ST_Distance_Spheroid(ST_Transform(geom,4326), ST_GeomFromText('POINT(59.1214893 18.1033966)',4326), 'SPHEROID["WGS84",6378137,298.25728]' ) limit 1;
Example how to create isocrone polygons based on traveltime - DEV-8Getting issue details... STATUS
Isocrones
--Create a dataset with nodes insert into distance_nodes (name,node,edge,cost,geom) ( SELECT '1h_walk_vh',id1 AS node, id2 AS edge, cost, geom FROM pgr_drivingdistance( 'SELECT id, source, target, walk_cost as cost FROM public.sweden_2po_4pgr', 732011, 1, false, false --from VH an one hour away ) as di JOIN sweden_osm2po_nodes pt ON di.id1 = pt.id ); --Create a isocrone polygon INSERT INTO distance_polygons (name,max_cost, geom) ( SELECT 'Ola',0.25, ST_ConvexHull(ST_SetSRID(ST_MakePolygon(ST_AddPoint(foo.openline, ST_StartPoint(foo.openline))),4326)) as geom from ( SELECT ST_MakeLine(points ORDER BY id) AS openline FROM ( SELECT ST_MakePoint(x, y) AS points, row_number() over() AS id from pgr_alphashape($$SELECT node as id, ST_X(geom) AS x, ST_Y(geom) AS y FROM public.distance_nodes WHERE cost < 0.25 and name ='test'$$) ) as a ) as foo )
, multiple selections available,
Related content
iKartan konfiguration
iKartan konfiguration
More like this
Client Map Layer URL parser
Client Map Layer URL parser
More like this
Viamap wiki Home
Viamap wiki Home
More like this
Skador i verksamheten (SIV)
Skador i verksamheten (SIV)
More like this
Datakälla
Datakälla
More like this
Ny interaktiv webservice för iKartan: Hämta en områdespolygon
Ny interaktiv webservice för iKartan: Hämta en områdespolygon
More like this