PostGIS学习教程十七:线性参考

PostGIS学习教程十七:线性参考

线性参考是一种表示要素的方法,这些要素可以通过引用一个基本的线性要素来描述。使用线性参照建模的常见示例包括:

公路资产,这些资产使用公路网络沿线的英里来表示。
道路养护作业,指在一对英里测量之间沿着公路网发生的作业。
水产库存,其中鱼的存在位置被记录为距离上游的一段位置之间。
河流的水文特征,以河流的某一个点到另一个点作为参考。
线性参考模型的优点是,从属空间观测信息不需要与基准空间观测信息分开记录,对基础观测信息进行更新时,从属观测信息将自动更新从而追踪新几何图形。

注意:ESRI的线性参照约定是有一个线性空间要素的基表和一个非空间的事件表,其中非空间的事件表包括对空间要素的外键引用和沿参照要素的测量值。我们将使用术语"事件表(event table)"来表示我们构建的非空间表。

文章目录

  • PostGIS学习教程十七:线性参考
  • 一、创建线性参考
  • 二、相关函数列表


一、创建线性参考

如果有一个要引用到线性网络的现有点表,要计算各点的线性参考比例,请使用ST_LineLocatePoint函数,该函数接受线串和点,并返回该点沿线串的线性参考比例。

-- Simple example of locating a point half-way along a line
SELECT ST_LineLocatePoint('LINESTRING(0 0, 2 2)', 'POINT(1 1)');
-- Answer 0.5-- What if the point is not on the line? It projects to closest point
-- 即做(0, 2)点到线串(0 0, 2 2)的垂线,使用对应的垂足点来求线性参考比例
SELECT ST_LineLocatePoint('LINESTRING(0 0, 2 2)', 'POINT(0 2)');
-- Answer 0.5

我们可以使用ST_LineLocatePoint函数根据nyc_subway_stations创建相对于街道的"事件表"。
– 下面所有的SQL都是用来创建新的事件表的

CREATE TABLE nyc_subway_station_events AS
-- 我们首先需要找到一组可能最接近的候选者
-- streets, 按id和distance排列...
WITH ordered_nearest AS (
SELECTST_GeometryN(streets.geom,1) AS streets_geom,streets.gid AS streets_gid,subways.geom AS subways_geom,subways.gid AS subways_gid,ST_Distance(streets.geom, subways.geom) AS distance
FROM nyc_streets streetsJOIN nyc_subway_stations subwaysON ST_DWithin(streets.geom, subways.geom, 200)
ORDER BY subways_gid, distance ASC
)
-- 我们使用'distinct on'使每个地铁站信息只出现一次。
-- 然后,我们可以将这条街道信息置入ST_LinLocatePoint函数,使其沿着它的候选地铁站来计算
SELECTDISTINCT ON (subways_gid)subways_gid,streets_gid,ST_LineLocatePoint(streets_geom, subways_geom) AS measure,distance
FROM ordered_nearest;-- 主码对于可视化软件很有用
ALTER TABLE nyc_subway_station_events ADD PRIMARY KEY (subways_gid);

在这里插入图片描述
一旦我们有了一个事件表,将其转换回一个空间视图是很有趣的,这样我们就可以将事件相对于派生出它们的原始点进行可视化。

要从线性参考比例值得到位于线段上的对应点,我们可以使用ST_LineInterpolatePoint函数,下面是关于我们前面的简单例子的逆过程:

-- Simple example of locating a point half-way along a line
SELECT ST_AsText(ST_LineInterpolatePoint('LINESTRING(0 0, 2 2)', 0.5));-- Answer POINT(1 1)

在这里插入图片描述
我们可以将nyc_subway_station_events表连接回nyc_streets表,并使用measure属性生成空间事件点(这个示例中是地铁站点),而无需引用原始nyc_subway_stations表。

-- New view that turns events back into spatial objects
CREATE OR REPLACE VIEW nyc_subway_stations_lrs AS
SELECTevents.subways_gid,ST_LineInterpolatePoint(ST_GeometryN(streets.geom, 1), events.measure) AS geom,events.streets_gid
FROM nyc_subway_station_events events
JOIN nyc_streets streets
ON (streets.gid = events.streets_gid);

在这里插入图片描述
查看街道上的原始地铁站点(红星)和事件点(蓝色圆圈),你可以看到事件是如何被直接捕捉到最近的街道线的(事件点全部位于街道线上)。
在这里插入图片描述
注意:线性参考函数的一个令人惊讶的用法与线性参考模型无关。如上所示,可以使用这些函数将点捕捉到线性要素(即可以使用线性参考来实现捕捉功能)。对于像GPS轨迹或其他预期参考线性网络的输入这样的用例,捕捉是一个方便的功能。

二、相关函数列表

ST_LineInterpolatePoint(geometry A, double measure): Returns a point interpolated along a line.
ST_LineLocatePoint(geometry A, geometry B): Returns a float between 0 and 1 representing the location of the closest point on LineString to the given Point.
ST_Line_Substring(geometry A, double from, double to): Return a linestring being a substring of the input one starting and ending at the given fractions of total 2d length.
ST_Locate_Along_Measure(geometry A, double measure): Return a derived geometry collection value with elements that match the specified measure.
ST_Locate_Between_Measures(geometry A, double from, double to): Return a derived geometry collection value with elements that match the specified range of measures inclusively.
ST_AddMeasure(geometry A, double from, double to): Return a derived geometry with measure elements linearly interpolated between the start and end points. If the geometry has no measure dimension, one is added.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/324826.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux Shell】7. printf 命令

文章目录 【 1. printf 命令的使用方法 】【 2. 实例 】 【 1. printf 命令的使用方法 】 printf 命令模仿 C 程序库(library)里的 printf() 程序,printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。prin…

ClickHouse数据库详解和应用实践

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 概述1.适用场景2.不适用场景 一、核心特性1.完备的DBMS功能2.列式存储与数据压缩 二、安装部署1.在线安装2.离线安装 三、jdbc访问总结 概述 ClickHouse 是一个用于…

PPT插件-大珩助手-免费功能-特殊格式介绍

上、下标切换 直接切换选中的字符为上、下标。 大小金额 支持超大金额的大写金额转换 当前日期 本次打开文件的时间 转二维码 将当前选中的文字,转为二维码图片,并插入到PPT当前位置 特殊字符 内置常用的特殊字符,点击使用 软件介绍 …

202366读书笔记|《人间小满》——心静江湖远,取舍有道、进退有度

202366读书笔记|《人间小满》——心静江湖远,取舍有道、进退有度 《人间小满》作者姑苏阿焦。很棒的一本书,有扎根生活的无奈,但处处透露着热爱生活的蓬勃气息。是那种有英雄主义热爱生活的精神。非常非常非常值得一读的小书。 部分节选如下:…

(八)矩阵按键

文章目录 本章学习类比独立按键矩阵按键原理图三行代码法简单概述代码书写键码推算如何使用短按键长按键不松手长按键松手长按键 状态机法简单概述代码书写键码推算如何使用短按键长按键不松手长按键松手长按键 部分代码展示现象演示 本章学习类比独立按键 矩阵按键原理图 三行…

图纸防泄密软件有哪些用处?

公司电脑文件数据透明加密防泄密软件系统——德人合科技 提供软件系统及技术支持 防止公司内部数据泄密 通过动态加解密技术,有效防止公司内部数据泄密。即员工在创建、编辑文档时会被自动加密存放在硬盘上,防止员工故意或由于疏忽而造成泄密或对文件恶…

贝锐花生壳全新功能:浏览器一键远程访问SSHRDP远程桌面

为了满足特定场景的远程访问需求,如:远程群晖NAS设备、远程SQL Server数据库/MySQL数据库、3389远程桌面(RDP远程桌面)、远程SSH、我的世界游戏联机…… 贝锐花生壳推出了场景映射服务,不仅提供满足相应场景的网络带宽…

gitlab高级功能之Kubernetes Agent介绍

文章目录 1. 前置条件2. 简介3. GitLab Kubernetes Agent 的部署3.1 启用 Agent 服务端3.2 创建 Agent 配置和清单仓库 4. 安装agent4.1 连接k8s集群4.2 在集群中部署4.3 修改资源清淡,调整pod的副本数 5. 思考 1. 前置条件 gitlab 14.5 专业版k8s集群helm客户端工…

【DevOps-07-2】Sonarqube基本使用

一、简要说明 Sonar Qube的使用方式很多,Maven可以整合,也可以采用sonar-scanner的方式,再查看Sonar Qube的检测效果 Sonarqube集成在Maven实现代码检测使用sonar-scanner客户端的方式 二、Sonarqube管理后台安装中文插件 1、登录Sonarqube管…

使用(?<!pattern) 负向后行断言正则表达式提取一个双引号开头和结尾的字符串

如下是一段java代码,我想用正则表达从中提取代码中的字符串 cond_buffer.append(" ORDER BY \"name\" \"").append(join(order_by_column,"\","));java是通过前后用双引号包含定义字符串的。但简单使用正则表达式".…

【SpringMVC】常用注解

什么是MVC? MVC是一种程序分层开发模式,分别是Model(模型),View(视图)以及Controller(控制器)。这样做可以将程序的用户界面和业务逻辑分离,使得代码具有良好…

【字典树Trie】LeetCode-139. 单词拆分

139. 单词拆分。 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s "leetcode&q…