postgis 最短路径查询

    最近在学习使用postgis查询两点之间最近路径,将整理的问题记录提供需要的人参考使用,接下来我以北京为例。

1.数据下载

https://www.openstreetmap.org,这个网站下载的数据没有特定某个城市,是全国的数据文件,需要某一个的只能去网上搜索(度娘);

2.数据导入

需要的数据下载成功后,有多个格式文件,dbf、shp.....其他省略号代替;

可以用命令将shp文件转换成sql文件直接使用navicat导入sql文件

转换文件命令:cmd进入到PostgreSQL\10目录,

shp2pgsql -W UTF-8 -s 4326 -g geom_data C:/Users/vis/Desktop/lw/bjluw/市区道路_polyline  改成你的文件名>C:/Users/vis/Desktop/你的文件名.sql

到此sql文件转换完成。

需要注意:

使用PostGIS PostGIS Bundle 3 for PostgreSQL x64 10 Shapefile and DBF Loader Exporter 导入的时候需要改一下编码格式,文件可能是utf8或者gbk。(navicat 可以直接导入多种格式,但是不支持shp文件,需要用上述插件来导入shp文件);至此数据文件导入完成。

3.添加字段

https://github.com/cytggit/Map-openlayers/wiki/%E8%B7%AF%E5%BE%84%E8%A7%84%E5%88%92%E7%9A%84%E5%BA%94%E7%94%A8 可以跟着网址给的步骤操作。

需要注意:

1、道路权重值字段可能在你导入的文件中存在了,如果存在可以忽略;

2、为source和target字段创建索引,和上一步一样,可能会存在索引不需要再次创建;

3.为length赋值,同上;

字段添加结束.

4.使用pgr_dijkstra算法查询

SELECT seq, node, edge, cost FROM pgr_dijkstra('

SELECT gid as id,

source::integer,

target::integer,

length::double precision AS cost,

x1,y1,x2,y2

FROM _polyline',

103, 128,directed:=false)

5.将查询结果存表

insert into line2 (the_geom) select ST_MakeLine(ARRAY (select the_geom

from (SELECT seq,  node FROM pgr_dijkstra(

'SELECT  gid AS id,

source::integer,

target::integer,

length::double precision AS cost

FROM _polyline', 103, 128,directed:=false))path, _polyline_vertices_pgr p

where path.node = p.id order by seq));

6.使用qgis展示

打开QGIS Desktop 3.12.3 左侧postgis连接自己的库可以看自己的查询数据了。

到此全部完成。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。