Mysql - GPS位置x 3以及如何从搜索中排除任何位置结果

时间:2012-08-20 20:28:21

标签: mysql math gps

所以我已经在这个问题上工作了几天。目的是基于用户当前位置(纬度/经度)产生数据的半径搜索。我怎么想通过计算B Lat / Lon& amp;来为搜索添加一些智能。 B Lat / Lon(我可以做)然后从半径搜索中删除这个三角形内的任何匹配的GPS点....

我最接近的人是将B匹配到C而不是A中包括的点......

这是部分数学和部分MySQL,因为这是我想用来实现它的最终方法。

有什么想法吗?

人族

Main Image

The Final Result

来自其他地方

问:如果你想要返回的唯一半径是A,为什么B和C周围有半径?这只是为了显示每个点的纬度...我添加了一个额外的图表来说明如何使用它。

问:B和C实际代表什么(A是当前位置) 答:B和C将根据用户当前位置,方位和速度计算出来(通过数学计算)。

“测试点是否在三角形中很容易 - 想想三角形边缘矢量和从三角形角到测试点的矢量的交叉积。内部点在三个边内。”

链接 - Inside Triangle Calc - http://www.mathworks.com/matlabcentral/fileexchange/22690-inside-triangle/content/inside_triangle.m

1 个答案:

答案 0 :(得分:2)

此过程有几个步骤。

在圆圈的边界框内找到点。如果在经度维度上略微不妥当,那么这种方法可以很好地有效地工作

   SELECT *
     FROM points p
    WHERE p.lat >= alat-radius
      AND p.lat <= alat+radius
      AND p.lon >= alon-radius
      AND p.lon <= alon+radius

接下来,排除三角形内的点。你需要编写一个存储函数来进行三角形包含来处理这个问题。

   SELECT *
     FROM points p
    WHERE p.lat >= alat-radius
      AND p.lat <= alat+radius
      AND p.lon >= alon-radius
      AND p.lon <= alon+radius
      AND NOT Inside_Triangle(p.lat, p.lon, alat, alon, blat, blon, clat, clon)

您可以在此处查看包含三角形的算法。 How can I determine whether a 2D Point is within a Polygon?

最后,排除半径之外的点。

   SELECT *
     FROM points p
    WHERE p.lat >= alat-radius
      AND p.lat <= alat+radius
      AND p.lon >= alon-radius
      AND p.lon <= alon+radius
      AND NOT Inside_Triangle(p.lat, p.lon, alat, alon, blat, blon, clat, clon)
      AND Haversine(p.lat,p.lon,alat,alon) > radius

以下是Haversine功能的示例。请注意,您必须仔细挑选半径单位。 Why does this MySQL stored function give different results than to doing the calculation in the query?

你有它。如何获得包含所需点的结果集。