簡體   English   中英

POSTGRESQL-用於地理位置的多邊形函數

[英]POSTGRESQL - Polygon function for geolocations

我有2個表User_places,可以為每個用戶查看由2個單獨的屬性(經度和緯度)定義的家位置。 我有第二個表格鄰域,屬性為“區域”,將每個鄰域定義為多邊形-jsonb格式-“ [{” latitude“:XXXXX,” longitude“:YYYYY},{” latitude“:ZZZZZ,” longitude“:AAAAA },{“ latitude”:BBBBBB,“ longitude”:CCCCC},{“ latitude”:DDDDD,“ longitude”:EEEEE}]“。

有人知道如何檢查特定用戶是否居住在Postgresql中的給定社區中嗎?

SELECT
user_id,
ST_Contains(
ST_GeomFromText(
   (select 
   replace(replace(replace(replace(replace(area::text,']','))'),'[','POLYGON(('),'}',  ''),',"longitude":',' '),'{"latitude":','')
   from neighbourhoods
   limit 1), 4326)
   (ST_SetSRID(ST_MakePoint(latitude, longitude),4326))
) as polygon_check
from user_places

我假設您在Postgresql副本上安裝了Postgis 因為它具有對Postgresql的所有Geometry和地理功能擴展。

您可以使用ST_Contains檢查指定多邊形中是否包含點,這將返回一個布爾值。

select ST_Contains(neigbourhood.polygon,User_place.geom) 

如果User_places表中沒有幾何點值,則可以使用ST_SetSRID函數和ST_MakePoint函數來創建。

例如SELECT ST_SetSRID(ST_MakePoint(LAT, LON),SRID);

其中SRID是您正在使用的投影的參考,例如WGS 84`4326

我建議在PostgreSQL中確保所有地理表中都包含幾何圖形,因為這樣可以使比較容易得多。

供參考,以獲得基於地理和幾何數據庫問題的答案的好地方是https://gis.stackexchange.com/

暫無
暫無

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

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