PostGIS教程十八 線性參考

2021-09-22 12:23:31 字數 4111 閱讀 1399

目錄

一、建立線性參考

二、函式列表

附:關於線性參考的概念,可以參考這篇文章:arcgis中的線性參考/動態分段技術(一):linear referencing背景

線性參考模型的優點是,從屬空間觀測資訊不需要與基準空間觀測資訊分開記錄,並且對基礎觀測資訊進行更新時,從屬觀測資訊將自動更新從而追蹤新幾何圖形。

注意:esri的線性參照約定是有乙個線性空間要素的基表和乙個非空間的事件表,其中非空間的事件表包括對空間要素的外來鍵引用和沿參照要素的測量值。我們將使用術語"事件表(event table)"來表示我們構建的非空間表。

如果要參照線性網路的現有點表,請使用st_linelocatepoint函式,該函式接受線串和點,並返回該點沿線串的線性參考比例。

-- ****** example of locating a point half-way along a lineselect 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 (

select

st_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 streets

join nyc_subway_stations subways

on st_dwithin(streets.geom, subways.geom, 200)

order by subways_gid, distance asc

)

-- 我們使用'distinct on'postgresql功能為每各唯一的街道gid獲取第一條街道(最近的街道)。

-- 然後,我們可以將這條街道資訊置入st_linlocatepoint函式,使其沿著它的候選地鐵站來計算

select

distinct on (subways_gid)

subways_gid,

streets_gid,

st_linelocatepoint(streets_geom, subways_geom) as measure,

distance

from ordered_nearest;

-- 主碼對於視覺化軟體很有用

一旦我們有了乙個事件表,將其轉換回乙個空間檢視是很有趣的,這樣我們就可以將事件相對於派生出它們的原始點進行視覺化。

而且,我們可以將nyc_subway_station_events表連線回nyc_streets表,並使用measure屬性生成空間事件點(這個示例中是地鐵站點),而無需引用原始nyc_subway_stations表。

檢視街道上的原始地鐵站點(紅星)和事件點(藍色圓圈),你可以看到事件是如何被直接捕捉到最近的街道線的(事件點全部位於街道線上)。

注意線性參考函式的乙個令人驚訝的用法與線性參考模型無關。如上所示,可以使用這些函式將點捕捉到線性要素(即可以使用線性參考來實現捕捉功能)。對於像gps軌跡或其他預期參考線性網路的輸入這樣的用例,捕捉是乙個方便的功能。

PostGIS教程二 PostGIS的安裝

目錄 二 安裝postgresql 三 安裝postgis 在安裝postgis前首先必須安裝postgresql,然後在安裝好的stack builder中選擇安裝postgis元件。這裡使用的postgresql版本是9.6。安裝postgresql安裝完成後,提示執行stack builder...

PostGIS教程二 PostGIS的安裝

目錄 二 安裝postgresql 三 安裝postgis 在安裝postgis前首先必須安裝postgresql,然後在安裝好的stack builder中選擇安裝postgis元件。這裡使用的postgresql版本是9.6。安裝postgresql安裝完成後,提示執行stack builder...

Java基礎(三十八) 執行緒相關

執行緒的同步與死鎖 1 同步問題的引出 class mythread implements runnable else public class test 執行結果 票販子b賣票,ticket 10 票販子b賣票,ticket 8 票販子a賣票,ticket 9 票販子a賣票,ticket 6 票販...