设为首页 收藏本站
查看: 1035|回复: 0

[经验分享] pgrouting示例

[复制链接]
发表于 2016-11-22 07:45:18 | 显示全部楼层 |阅读模式
今天搞定pgrouting,记录
感谢 网友 前进
以前用pgdijkstra,遇到一些问题,后来出了pgrouting,使用还是有些问题
主要问题是

ERROR: relation with OID 51307 does not exist SQL state: 42P01 Context: SQL statement "SELECT id, the_geom FROM vertices_tmp WHERE distance(the_geom, $1 ) < $2 " PL/pgSQL function "point_to_id" line 7 at select into variables PL/pgSQL function "assign_vertex_id" line 50 at assignment
网上别人的办法
Ok found out that the problem was due to that the function gets compiled only once per connection, so I had to reconnect
而我的情况是,我直接在pgadmin里执行assign_vertex_id函数,会报上面的错,而从上面方法启示,在psql的命令行方式下执行sql语句,成功了,呵呵,相信如果我直接用php连pgrouting就不会出现这么多麻烦了


下面是pgrouting完整的解决方案:
这里用的版本是postgresql8.2 ,pgrouting_1.0.0_win32
1.postgresql和postgis安装略过
2.安装pgrouting,将pgrouting下doc lib share三个文件夹靠到postgresql文件夹下
3.执行routing_core.sql,routing_core_wrappers.sql,安装pgrouting,这里安装了dijkstra算法包,另外还有driving distance,travling sales man两个算法包,可以选择安装(routing_dd.sql,routing_dd_wrappers.sql,routing_tsp.sql,routing_tsp_wrappers.sql)
4.导入示例数据    psql -d pgrouting -U postgres -f d:\data\victoria.sql             示例数据在官网可下载
5.为victoria表添加the_geom字段
ALTER TABLE victoria RENAME COLUMN the_geom TO geom;
SELECT AddGeometryColumn('victoria','the_geom',54004,'MULTILINESTRING',2);
UPDATE victoria SET the_geom=geom;
ALTER TABLE victoria DROP COLUMN geom;
6.为victoria赋  source,target值,执行   
SELECT assign_vertex_id('victoria', 0.001, 'the_geom', 'gid');
0.001为阈值范围,可视具体情形设定,计算好后,会生成一张vertex_tmp的临时表(psql执行sql命令哦)
7.一切准备好后,就可以计算最短路径了,以dijkstra算法为例,这里用长度当作权重,求起点248到终点1455的最短路径
SELECT * FROM shortest_path('
SELECT gid as id,
source::integer,
target::integer,
length::double precision as cost
FROM victoria',
248, 1455, true, false);

得到结果

vertex_id    edge_id    cost
248    82102    110.559379577637
84    57984    141.242736816406
1252    193310    52.5332260131836
1970    207837    80.3645401000977
100    180746    284.944580078125
1720    176290    143.326675415039
910    35578    139.427536010742
911    143636    140.143005371094
1495    204813    139.011123657227
430    143222    123.869613647461
1594    155785    253.544082641602
684    26341    243.902267456055
685    56973    141.959945678711
1239    195168    48.8763236999512
1147    112572    161.616928100586
1839    119499    303.865966796875
1759    188892    56.5326347351074
1575    143214    77.3971405029297
2050    140591    158.934661865234
2051    216067    115.035369873047
1950    122139    11.0751705169678
1060    44613    182.172515869141
1061    148709    111.463470458984
908    211592    12.3400468826294
771    29588    126.651756286621
774    63990    175.560150146484
1338    142395    101.610443115234
1978    125346    79.8519439697266
1268    58800    91.4863662719727
1269    83787    87.1205139160156
1613    96196    98.0832748413086
586    22142    275.695068359375
33    108489    152.655151367188
1455  -1    0



#drop table tmp;
select * into tmp from vertices_tmp as vt where vt.id in (SELECT vertex_id FROM shortest_path('SELECT gid as id,source::integer,target::integer,length::double precision as cost FROM road',248, 400, true, false));
或者
SELECT sp.vertex_id,vt.the_geom  into tmp FROM shortest_path('SELECT gid as id,source::integer,target::integer,length::double precision as cost FROM road',123, 334, true, false) as sp,vertices_tmp as vt where sp.vertex_id=vt.id

ALTER TABLE tmp ADD CONSTRAINT tmp_pk PRIMARY KEY (id);
这样可以直接在qgis里打开tmp表来看最短路径的结果了

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-303681-1-1.html 上篇帖子: Jasper Report + iReport + NetBeans 4 下篇帖子: MapServer是一款成功的开源网络制图软件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表