SQL需要基于具有最小/最大距离约束的纬度/经度来获得位置的子集

时间:2016-06-01 21:42:15

标签: mysql

我有MySQL表,其中包含500个位置记录,其结构类似于:

id, name, lat, long

Lat& long是十进制(浮点)位置值。

我需要返回一个随机的100个记录集,它们至少相距200米,最远距离500米。我熟悉使用大圆公式来获得两点之间的距离。但是,我不知道如何编写一个select语句来比较所有位置,以确保选择随机100的距离要求?任何想法或帮助将不胜感激。我唯一的工具是MySQL数据库,所以解决方案需要用MySQL SQL编写。先感谢您。

2 个答案:

答案 0 :(得分:1)

SELECT * 
FROM (
    SELECT p.latitude1 AS latitude1, p.longitude1 AS longitude1, p.latitude2 AS latitude2, p.longitude2 AS longitude2,
    (((ACOS(SIN((latitude2*PI()/180)) * SIN((latitude1*PI()/180))+COS((latitude2*PI()/180)) * COS((latitude1*PI()/180)) * COS(((longitude2- longitude1)* PI()/180))))*180/PI())*60*1.1515) AS distance
    FROM places p
    )
WHERE distance > 200 AND distance < 500
ORDER BY RAND()
LIMIT 100

答案 1 :(得分:0)

如果你只看500米然后采取一些捷径,并假装这是一个xy空间并使用简单的三角法。你甚至可以用方形代替甜甜圈吗?

您可以将其用作第一次剪切,然后使用其余的正确数学。

你的第二次切割现在足够小了。为每个人分配一个随机的no并取得顶部X. Voila

编辑对于第一部分,请欺骗并使用Google地图。找出赤道相当于500米的度数。使用x +/-该值和y相同。第一次切割快速而肮脏。 **好吧,它不会在极地工作! **