簡體   English   中英

如何在postgis中找到多邊形內的所有點?

[英]How to find all points within polygon in postgis?

我將位置存儲在 location_table(point_location 幾何)中,現在我在谷歌地圖上繪制一個多邊形並將該多邊形(幾何)傳遞給后端,我想找到該多邊形內的所有位置。

SELECT POINT_LOCATION 
FROM LOCATIONS_TABLW 
WHERE ST_Contains(GeomFromEWKT(?), POINT_LOCATION);

當我將多邊形從谷歌地圖傳遞到后端時,這給了我隨機結果。 它沒有給我完全在多邊形內的所有點。 它給了我甚至在多邊形之外的點。

在postgis中准確找到多邊形內所有點的正確方法是什么(也包括邊界情況)

更新:我們嘗試使用 st_intersects() 它也不起作用。 在此處輸入圖片說明

更新

請查找以下查詢

SRID = 4326; POLYGON(( - 103.30549637500008 20.852735681153252,-103.08103481249998 20.612974162085475,-101.6261045 20.537532106266806,-99.83567868749998 20.395877027062447,-99.80306537500002 22.0572706994358,-99.64994812500004 28.918636198451633,-121.1212769375 8.69559423007209,-103.30549637500008 20.852735681153252))SRID = 4326; POINT(-103.496956 20.722446) SRID=4326;點(-103.4955 20.723544)

選擇ST_Intersects(GeomFromEWKT( 'SRID = 4326; POINT(-103.496956 20.722446)'),GeomFromEWKT('SRID = 4326; POLYGON(( - 103.30549637500008 20.852735681153252,-10 3.08103481249998 20.612974162085475,-101.6261045 20.537532106266806,-99.83567868749998 20.395877027062447,-99.80306537500002 22.0572706994358, -99.64994812500004 28.918 636198451633,-121.1212769375 8.69559423007209,-103.30549637500008 20.30549637500008 20.30549637500008 20.63)5)3)5) 852) 這應該返回 False,但它返回 true。

你可以使用

SELECT POINT_LOCATION 
FROM LOCATIONS_TABLE 
WHERE ST_Contains(ST_GEOMFROMTEXT('POLYGON((P1.X P1.Y, P2.X P2.Y, ...))'), LOCATIONS_TABLE.POINT_LOCATION);

注意:Polygon 必須是閉合的(即最后一個坐標 == 第一個坐標)。 第二個參數 POINT_LOCATION 必須是點表中的幾何列。

更新:我試圖在我的 pg 數據庫中重放您的步驟。 我創建了 2 個表,LOCATIONS_TABLE (id, geom) 和 POLYGON (id, geom)。 之后,我用 2 點填充了 LOCATIONS_TABLE

SRID=4326;POINT(-103.4955 20.723544)
SRID=4326;POINT(-103.496956 20.722446)

之后我在 POLYGON 表中插入了多邊形

SRID=4326;POLYGON((-103.305496375 20.8527356811533,-103.0810348125 20.6129741620855,-101.6261045 20.5375321062668,-99.8356786875 20.3958770270624,-99.803065375 22.0572706994358,-99.649948125 28.9186361984516,-121.1212769375 8.69559423007209,-103.305496375  (...)

我在qgis中可視化了情況,見下圖: 樣品

如您所見,這 2 個點位於多邊形內。 所以我手動在多邊形外創建了一個點。 之后,您可以使用以下 sql 查詢,查看點是否在多邊形內:

SELECT ST_Contains(polygon.geom, point.geom) 
FROM public."LOCATIONS_TABLE" point, public."POLYGON" polygon

它為內部的 2 個點返回 t,為第三個點返回 false。

暫無
暫無

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

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