Postgis - 一个圆圈包含另一个圆圈

时间:2015-06-25 02:47:31

标签: postgresql postgis coordinate-systems

我使用带有gps数据的postgis,并试图找出一个带有GPS坐标和半径(以米为单位)的圆圈是否包含另一个圆圈。

如果我没有使用GPS坐标,但我只是在图表上指出了点,那么我能够做到这一点,但如果我用lat和lon点代替,这不起作用:

-- 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;

思想?

1 个答案:

答案 0 :(得分:5)

我的方法是:

  1. 通过SRID(ST_SetSRID(your_geom, 4326)执行此操作)将CRS(坐标参考系统)分配给gps数据(我假设它们在WGS84中,因此是srid 4326)
  2. 然后(只有在你分配了srid 4326时才可以)将它们投射到地理位置(::geography执行此操作)以启用以米为单位设置缓冲区radiae,
  3. 然后将它们转换回几何体(::geometry执行此操作)以使st_contains函数正常工作
  4. 查询:

        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