我正在使用postgis和gps数据,并试图找出一个带有gps坐标和半径(以米为单位)的圆是否包含另一个圆。
如果我不使用GPS坐标,而只使用图形上的点,我就可以做到这一点,但如果我用纬度和经度点替换,这就不起作用:
-- A circle within a circle
SELECT ST_Contains(bigc,smallc) As bigcontainssmall
FROM (SELECT ST_Buffer(ST_MakePoint(21, 38)::geography, 40) As smallc,
ST_Buffer(ST_MakePoint(21, 39)::geography, 400) AS bigc) foo;
思想?
最佳答案
我的方法是:
通过srid为gps数据分配CRS(坐标参考系)(我假设它们在WGS84中,因此srid 4326)(这样做ST_SetSRID(your_geom, 4326)
)
然后(只有在分配了srid 4326的情况下才可能)将它们投射到地理位置(::geography
这样做)以启用以米为单位的缓冲半径设置,
并将它们转换回几何体(::geometry
这样做)以便st_contains
函数工作
查询:
SELECT ST_Contains(bigc::geometry,smallc::geometry) as bigcontainssmall
from (select
st_buffer(ST_SetSRID(ST_MakePoint(-71.10434, 42.31506),4326)::geography,40) as smallc,
st_buffer(ST_SetSRID(ST_MakePoint(-71.10434, 42.31507),4326)::geography,400) as bigc) foo