【问题标题】:Is possible to expand the border of a lat/long mysql polygon by x miles or km?是否可以将 lat/long mysql 多边形的边界扩大 x 英里或公里?
【发布时间】:2017-11-15 22:39:55
【问题描述】:

所以在 mysql 中搜索多边形内的点非常简单,可以这样做:

SELECT * FROM table WHERE ST_CONTAINS(ST_GEOMFROMTEXT('POLYGON((-72.0429540 42.9949644, -72.0405293 42.9929398, -72.0401645 42.9905541, -72.0353365 42.9888747, -72.0326543 42.9897850, -72.0343494 42.9935990, -72.0344567 42.9969733, -72.0367098 42.9980562, -72.0417953 42.9970361, -72.0429540 42.9949644))'), POINT(lat, long))

但假设我还想找到多边形边界 1 英里范围内的项目。在mysql中有一个简单的方法吗?我的另一个想法是,也许我可以以某种方式为我的多边形计算新点,但我不确定如何知道扩展方向。

【问题讨论】:

  • 这应该可以帮助您重新计算更宽边界处的经度和纬度gis.stackexchange.com/questions/142326/…
  • @BusinessPlanQuickBuilder - 似乎这将涉及“角落”处的圆形区域。也就是说,不能简单地移动角的坐标。

标签: mysql latitude-longitude point-in-polygon


【解决方案1】:

我想我通过 MySQL 文档找到了自己的答案。我可以使用 ST_Distance 查询两个几何之间的最短距离(以度为单位),而不是扩展多边形,如下所示:

SELECT * FROM table WHERE ST_DISTANCE(ST_GEOMFROMTEXT('POLYGON((-72.0429540 42.9949644, -72.0405293 42.9929398, -72.0401645 42.9905541, -72.0353365 42.9888747, -72.0326543 42.9897850, -72.0343494 42.9935990, -72.0344567 42.9969733, -72.0367098 42.9980562, -72.0417953 42.9970361, -72.0429540 42.9949644))'), ST_GEOMFROMTEXT(CONCAT('POINT(',lat,' ',long,')'))) < 50;

https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html#function_st-distance

【讨论】:

  • 那些看起来像 lat/lng?在这种情况下,你需要ST_Distance_Sphere() -- dev.mysql.com/doc/refman/5.7/en/…
  • @RickJames 这是纬度/经度,我试过st_distance_sphere,但它似乎不支持多边形,只支持点。 st_distance 返回坐标中的距离,所以它工作得很好:)
猜你喜欢
  • 2019-02-06
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多