Postgis - 一个圆圈包含另一个
Postgis - one circles contains another
我正在使用带有 GPS 数据的 postgis,并试图弄清楚一个带有 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
我正在使用带有 GPS 数据的 postgis,并试图弄清楚一个带有 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