【问题标题】:Find polygons that fall within a latitude/longitude combination with a N margin in degrees in MySQL/PostgreSQL在 MySQL/PostgreSQL 中查找位于纬度/经度组合内的多边形,以度数为单位
【发布时间】:2014-07-04 08:11:30
【问题描述】:

通常要查找包含某个 GPS 点的多边形,您可以使用如下查询:

SELECT * FROM `polygons` WHERE ST_CONTAINS(`polygon`, POINT(-33.874087, 151.207865)));

但是,如果您想为 GPS 点提供一定的度数余量,您该怎么做呢?我目前能想到的唯一方法是创建一个 MySQL 函数,该函数执行一个循环,遍历每个纬度/经度组合,直到它到达边距并最终返回它找到的多边形。但是,我希望有一种更有效的方法来做到这一点。我很高兴在 MySQL 或 PostgreSQL 中做到这一点。查找指南针多边形的示例输入:

latitude = 33.8275
longitude = 151.2695
latitude_span = 0.0216
longitude_span =0.0437

【问题讨论】:

  • margin in degrees 是什么意思?
  • @Fabricator 纬度/经度组合在查找罗盘多边形时可能不同的度数。例如:"latitude": -33.8275 "longitude":151.2695 "latitude_span":0.0216 "longitude_span":0.0437

标签: mysql postgresql gps


【解决方案1】:

您可以在该点周围创建一个Buffer 来表示一个圆,并检查它是否与多边形相交。它似乎存在于psql 和 mysql 中,但我找不到 mysql 的任何文档。

select polygon
from polygons
where ST_Intersects(polygon, ST_Buffer(ST_GeomFromText('POINT(100 90)'), degrees));

【讨论】:

  • 我在想的是用纬度/经度组合+以度为单位的边距来创建一个多边形,然后找出哪些多边形与该多边形重叠。例如 lat=50、lng = 50、degrees_lat=5、degrees_lng=10 生成以下多边形:(47.5 55, 47.5 45, 52.5 55, 52.5 45)。知道找到与输入多边形重叠的多边形的 mysql/postgre 函数吗?
  • @bicycle,我认为在这种情况下重叠和相交意味着同样的事情。
  • @bicycle,其实有一个overlap的功能,和intersect的功能有点不同。
  • 是的,但你知道我的意思吗?要查找与输入多边形重叠/相交的多边形?现在在 Google 上搜索,但目前找不到......他们主要是在谈论您的解决方案,半径创建一个圆。
  • @bicycle,我认为相交和重叠功能适用于所有几何特征。
猜你喜欢
  • 2017-08-08
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多