Yo pude importar un archivo planetario completo en unos 5 días usando osm2pgsql con casi las mismas especificaciones de máquina que tú.
Podrías hacer eso, y luego usar el PGRouting Calcular la topología (además de la otra información en esa página) para construir su red.
Esto tiene la ventaja añadida de proporcionarle una base de datos PostGis con todas las etiquetas para utilizarla en las consultas o en el renderizado de mapas.
Echa un vistazo a Esta entrada del blog pero tenga en cuenta que debe cambiar la declaración de creación de la tabla por la siguiente:
create table network(gid bigserial, osm_id bigint, name varchar, the_geom geometry, source bigint, target bigint, length float);
La instalación de PGSql es una brisa en Trusty, con Postgres 9.3 hice lo siguiente:
sudo apt-get install postgresql-9.3-pgrouting
sudo apt-get update
psql -U username -d dbname
CREATE EXTENSION pgrouting;
/q
Luego ejecuté el Sql de la entrada del blog anterior para dividir los caminos en segmentos enrutables y crear un gráfico de red, sin embargo me encontré con que tenía que modificarlo para que no fallara en los errores y quitar las NOTAS, así que esto es lo que usé
drop table if exists network;
create table network(gid bigserial, osm_id bigint, name varchar, the_geom geometry, source bigint, target bigint, length float);
CREATE OR REPLACE FUNCTION compute_network() RETURNS text as $$
DECLARE
streetRecord record;
wayRecord record;
pointCount integer;
pointIndex integer;
geomFragment record;
BEGIN
-- for each street
--FOR streetRecord in select way, osm_id, name from planet_osm_line where highway is not null and st_contains((select way from planet_osm_polygon where boundary = 'administrative' and name like 'Sector 1' limit 1), way) LOOP
FOR streetRecord in select way, osm_id, name from planet_osm_line where highway is not null LOOP
-- for each street in the region of interest
SELECT * from planet_osm_ways where id = streetRecord.osm_id into wayRecord;
BEGIN
FOR pointIndex in array_lower(wayRecord.nodes, 1)..array_upper(wayRecord.nodes,1)-1 LOOP
-- RAISE NOTICE 'Inserting name % source %, target %', streetRecord.name, wayRecord.nodes[pointIndex], wayRecord.nodes[pointIndex+1];
select st_makeline(st_pointn(streetRecord.way, pointIndex), st_pointn(streetRecord.way, pointIndex+1)) as way into geomFragment;
insert into network(osm_id, name, the_geom, source, target, length) values(streetRecord.osm_id, streetRecord.name, geomFragment.way, wayRecord.nodes[pointIndex], wayRecord.nodes[pointIndex+1], st_length(geomFragment.way));
END LOOP;
EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE 'ERROR: on streetRecord Id - % - Name < % >' ,streetRecord.osm_id, streetRecord.name;
END;
END LOOP;
return 'Done';
END;
$$ LANGUAGE 'plpgsql';
select * from compute_network();
El blog también es incorrecto, no utiliza assign_vertex, debería ser
SELECT pgr_createTopology('network', 0.00001, 'the_geom', 'gid');
Todavía no he hecho ninguna ruta. Te sugiero que lo pruebes primero en un pequeño extracto del país. Haremos todo el planeta eventualmente cuando esté seguro de que tengo suficiente espacio en el disco para el gráfico de la red.