资料准备:postgres、postgis、pgrouting
1. 下载shp文件
2. 通过PostGis Shapefile Import/Export Manager将shp导入到Postgres中。注意SRID设为4326,选项中勾选Generate simple geometries instead of MULTIgeometries(为了将多线转成线)。
3. 通过pgAdmin 4查看数据
4. 通过SQL截取全国路网数据产生新表pg_roads;
5. 通过ST_DumpPoints函数切分线LINESTRING按顺序获取线中的所有点POINT从而生成pg_points表。
create temp sequence temp_point_seq;
create table pg_points as SELECTnextval('temp_point_seq') as id,(ST_DumpPoints(geom)).geom aspoint,(ST_DumpPoints(geom)).path[1] as index,* FROM pg_roads;
6. 通过ST_MakeLine将pg_points表数据组合成两两相连的线段表pg_points_roads。
create temp sequence temp_roads_seq;
create table pg_points_roads asSELECT nextval('temp_roads_seq') as road_id,gid,ST_MakeLine(pre_point,point)line,id point_id,pre_point_id, index,osm_id, code, oneway, layer, bridge, tunnel FROM
(SELECT lag(point) over (partition by gid order byindex) pre_point,lag(id) over (partition by gid order by index) pre_point_id,*FROM pg_points) tt where index>1;
7. 添加格式化所需字段SOURCE,TARGET,length,cost,reverse_cost
ALTER TABLE pg_points_roads ADD SOURCE integer;