mysql:根据距给定点的距离排序地理位置点?

时间:2018-07-02 15:03:30

标签: mysql gis

我们有一个地理定位点,其纬度为28.638753,经度为77.073803

我们有一个区域表,其中包含列ID,名称和点类型的“位置”(具有经度和纬度)。我们要列出此给定点3公里范围内的所有区域(纬度:28.638753,经度:77.073803)。我们已经为其编写了以下查询。

SELECT  *
    FROM    areas 
    WHERE   MBRContains
                    (
                    LineString
                            (
                            Point (
                                    28.638753 + 3 / ( 111.1 / COS(RADIANS(77.073803))),
                                    77.073803 + 3 / 111.1
                                  ),
                            Point (
                                    28.638753 - 3 / ( 111.1 / COS(RADIANS(77.073803))),
                                    77.073803 - 3 / 111.1
                                  ) 
                            ),
                    position
                    );

这会返回3公里(纬度:28.638753,经度:77.073803)区域,但我还想要:

  1. 其他列距离:这应该给我
  2. 按从给定点开始的距离的升序对结果进行排序。

Here是小提琴链接。在此示例中,给定的点最接近A,最远的是C,但显示顺序为A,C,B。如何按距给定点(即A,B,C)的距离的降序排序?

一种解决方法是按照here的建议进行这样的查询:

SELECT id, name, ( 3959 * acos( cos( radians(28.638753) ) * cos( radians( Lattitude ) ) * cos( radians( Longitude ) - radians(77.073803) ) + sin( radians(28.638753) ) * sin( radians( Lattitude ) ) ) ) AS distance 
FROM areas 
HAVING distance < 3 
ORDER BY distance asc;

问题在于查询的性能。这需要太多时间。

0 个答案:

没有答案