【问题标题】:MariaDB: Finding if a circular radius from a latitude and longitude point, intersects a polygonMariaDB:查找纬度和经度点的圆形半径是否与多边形相交
【发布时间】:2019-03-30 08:54:42
【问题描述】:

我正在构建一个谷歌地图搜索片段,我可以指定一个位置和一个“半径”。然后,我尝试获取半径搜索相交的已定义区域(在我的数据库中定义为多边形)的结果。

我目前正在使用以下查询(为了清晰起见,php 代码):

$km = ($miles * 1.852) * 1000;
$sql = "SELECT * FROM Regions WHERE ST_Intersects(poly, ST_BUFFER(ST_GeomFromText('POINT({$lat} {$lng})'), {$km}))"

Regions 数据库设置有一个“poly”多边形字段,该字段保存纬度和经度值的多边形数据。但是,在从 5 英里半径范围内搜索时,我收到了数据库中的所有多边形。

我的查询基于我找到的其他一些松散的答案,但现在我对自己可能做错了什么感到有些茫然。我在网上发现的大多数问题是在多边形或半径内查找特定位置,但在这里我需要知道我的半径搜索是否与我创建的多边形相交。

任何帮助将不胜感激!谢谢。

【问题讨论】:

    标签: mariadb geo


    【解决方案1】:

    对于遇到类似问题的任何人,我发现了我遇到的问题。

    在数据库中存储“多边形”值时,您必须将值提供为“经度纬度”,而我以相反的方式存储它们。我想这是因为 lng/lat 是 x/y 格式。

    然后,我还使用了此处https://github.com/bcalik/php-circle-to-polygon 中的一个类中的方法来生成一个圆形多边形。然后就这样使用它:

    SELECT id FROM Regions WHERE ST_Intersects(poly, GEOMFROMTEXT('POLYGON((" . implode(",", $circle) . "))', 0))
    

    其中$circle$longitude $latitude 字符串值的数组。

    ST_BUFFER 方法可能仍然有效,但现在我已经可以正常工作了,我不打算再搞砸它了 :)

    【讨论】:

      猜你喜欢
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      相关资源
      最近更新 更多