[英]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.