簡體   English   中英

如何使用 ST_Touches 獲取接觸幾何的交集長度

[英]How to get the intersection length of touching geometries with ST_Touches

我正在嘗試在 Postgis 中開發一個查詢,它可以解決這個問題:

我有一個幾何體,我想知道哪個多邊形接觸它,這個幾何體的接觸面積最大。 在我識別出這個多邊形后,我將在特定列中取其值並將該值放在同一列中但在我的幾何中。

有人知道我該怎么做? 我是 postgresql/postgis 的新用戶。

正如@JGH 在評論中指出的那樣,如果單獨使用ST_Touches ,重疊區域將為零。 您可以做的是僅過濾掉與您的參考幾何圖形接觸的幾何圖形,然后使用ST_Intersection獲取相交區域,以便您最終可以使用ST_Length計算相交的長度。

數據樣本

在此處輸入圖片說明

上面描述的幾何值在CTE

WITH j (id,geom) AS (
  VALUES 
  (1,'POLYGON((-4.64 54.19,-4.59 54.19,-4.59 54.17,-4.64 54.17,-4.64 54.19))'),
  (2,'POLYGON((-4.59 54.19,-4.56 54.19,-4.56 54.17,-4.59 54.17,-4.59 54.19))'),
  (3,'LINESTRING(-4.65 54.19,-4.57 54.21)'),
  (4,'POLYGON((-4.66 54.21,-4.60 54.21,-4.60 54.20,-4.66 54.20,-4.66 54.21))'),
  (5,'POINT(-4.57 54.20)')
)
SELECT 
  id, 
  ST_Length(
    ST_Intersection(
      geom,
      'POLYGON((-4.62 54.22,-4.58 54.22,-4.58 54.19,
                -4.62 54.19,-4.62 54.22))')) AS touch_length
FROM j
WHERE 
  ST_Touches(
    geom,
    'POLYGON((-4.62 54.22,-4.58 54.22,-4.58 54.19,
              -4.62 54.19,-4.62 54.22))')
ORDER BY touch_length DESC
LIMIT 1;

 id |    touch_length     
----+---------------------
  1 | 0.03000000000000025
(1 Zeile)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM