使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
在安装PostGIS前首先必须安装PostgreSQL,然后再安装好的Stack Builder中选择安装PostGIS组件。具体安装步骤可参照PostGIS的安装与初步使用
2.加载Post GIS扩展选中指定数据库,执行加载扩展语句
–添加支持CREATE EXTENSION postgis; 添加postgis扩展
CREATE EXTENSION pgrouting; 添加pgrouting扩展
CREATE EXTENSION postgis_topology;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION postgis_tiger_geocoder;
在做两点间河流轨迹及流经长度计算过程中,需要加载postgis和pgrouting两个扩展
可以通过查看加载扩展的版本验证扩展加载是否成功
–查看postgresql版本show server_version;
–查看postgis版本
SELECT PostGIS_full_version();
–查看pgrouting版本
select pgr_version();
河流包括各种汇入和汇出,为了实现流经流域的计算,河流水系矢量数据需要一个河流一个ID的方式,可以在河流交汇点处将河流进行打段处理。
打开位于 开始 所有程序 PostGIS 2.3 bundle for PostgreSQL 之中的PostGIS Shapefile Import/Export Manager。
首先单击 View connection details 按钮,打开 PostGIS connection 对话框,输入用户名 postgres 及其对应的密码,设置连接的数据库,如下图所示:
连接数据库之后,单击 Add file 按钮,加入***.shp文件,并将其SRID设置为 4326 ,如下图所示。这一步绝对不能省略,否则不能正确导入数据。
在数据分析过程中,使用到了pgrouting扩展中的 pgr_dijkstra 算法
Dijkstra算法(迪杰斯特拉算法),由荷兰计算机科学家Edsger Dijkstra于1956年提出。它是一种图搜索算法,它解决了非负代价边路径图的最短路径问题,即从起始顶点(start_vid)到结束顶点(end_vid)的最短路径。此算法可以与有向图或无向图一起使用。
函数的签名摘要:
在实际使用中,需要先明确所有的顶点,并为所有顶点分配唯一的编号,函数的 start_vid 和 end_vid 都是整型数值,函数使用edges_sql参数(sql脚本)筛选出和顶点相邻的所有边信息(即河流信息)。
所以,在使用pgr_dijkstra方法前,需要
对找到河流的所有顶点信息,并做唯一整型值编号 在数据库中为每条河流设置好起始顶点和结束顶点 筛选出所有顶点信息,st_dump函数主要是将MultiLineString类型 调整成 LineString类型select st_astext(st_startpoint((ST_Dump(geom)).geom)) from singleriver
union
select st_astext(st_endpoint((ST_Dump(geom)).geom)) from singleriver
将查询结果在Excel中进行整型值编号,再导入到postgresql中的新建表distinctpoint 中,然后关联河流数据表,更新河流的开始顶点(source)和结束顶点编号(target)
更新起始顶点编号update singleriver q
set source=tt.sourcepoint
from singleriver s,
(select gid,p.id as sourcepoint from
(select gid,st_astext(st_startpoint((ST_Dump(geom)).geom)) as startpoint, st_astext(st_endpoint((ST_Dump(geom)).geom)) as endpoint from singleriver )s
left join distinctpoint p
on s.startpoint=p.point) tt
where q.gid=tt.gid 插入结束顶点编号
update singleriver q
set target=tt.endpoint
from singleriver s,
(select gid,p.id as endpoint from
(select gid,st_astext(st_startpoint((ST_Dump(geom)).geom)) as startpoint, st_astext(st_endpoint((ST_Dump(geom)).geom)) as endpoint from singleriver )s
left join distinctpoint p
on s.endpoint=p.point) tt
where q.gid=tt.gid
至此,河流拓扑数据处理完成
PG分析处理函数 1.函数编写 2.参数说明输入参数:开始点和结束点的经纬度坐标
输出结果:river_name:河流名称;v_shppath:流经的河流路径; cost:河流流经长度
3.内部调用函数说明函数调用过程,根据postgis不同版本,函数名称可能会有偏差,有版本展示形式为st_linesubstring ,有版本展示形式为st_line_substring
4.输出结果验证为了验证河流输出结果是否正确,流经河流路径是否连通,可以通过在线geojson地图(geojson.io)呈现出来验证。
在右侧json-features-geometry 中填充函数输出的v_shppath参数内容(按照行单独输入,可以输入多个,注意需要增加json属性)
到此这篇关于使用PostGIS完成两点间的河流轨迹及流经长度的计算的文章就介绍到这了,更多相关PostGIS两点间的河流轨迹计算内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
相关文章
- 论述人工智能,大数据,云计算之间的关系_物联网大数据人工智能的关系
- 像经典计算机一样「开箱即用」,百度走出中国量子计算产业化的重要一步
- ECCV 2022 | 在视觉Transformer上进行递归,不增参数,计算量还少
- 根据经纬度计算两点之间的距离的公式是_知道两点经纬度求距离
- 网络中超好玩的路由环路(3)——两个标准的战争:OSPF计算环路
- 隐私计算一体机,金融大数据规模商用的催化剂
- 云计算三类巨头:IaaS、PaaS、SaaS,分别是什么意思,应用场景是什么?
- 妙用Ps计算工具调出另类色调PS全版本软件下载地址包括最新的2023
- 【运筹学】表上作业法 ( 示例 | 使用 “ 闭回路法 “ 计算检验数判定最优解 )
- 【数字信号处理】卷积编程实现 ( 卷积计算原理 | 卷积公式计算 | 使用 matlab 计算卷积 | 使用 C 语言实现卷积计算 )
- Nat. Commun.| 将酶化学和合成化学与计算合成规划相结合
- 使用Oracle的SUM函数计算总和(Sumoracle)
- Linux:开启另一种计算和运维之旅(linux的分支)
- 使用 Ansible 在树莓派上构建一个基于 Linux 的高性能计算系统
- : MySQL实现数据排名功能(mysql 计算排名)
- 函数SQL Server中计算位数的函数使用技巧(sqlserver中位数)
- MSSQL中使用求余数函数计算模糊结果(mssql求余数)
- 使用MSSQL查询实现简单的小计计算(mssql 查询加入小计)
- 如何在MySQL中使用Comput函数进行计算(mysql中comput)
- MySQL中如何使用AVG函数计算平均值(mysql中avg怎么用)
- MySQL计算两条数据之差(mysql 两条数据差值)
- 使用MySQL计算两个日期之间的月份数差异(mysql 两时间差月份)
- mysql字符串长度计算实现代码(gb2312+utf8)
- 关于PHP的相似度计算函数:levenshtein的使用介绍