我有MySQL表,其中包含500个位置记录,其结构类似于:
id, name, lat, long
Lat& long是十进制(浮点)位置值。
我需要返回一个随机的100个记录集,它们至少相距200米,最远距离500米。我熟悉使用大圆公式来获得两点之间的距离。但是,我不知道如何编写一个select语句来比较所有位置,以确保选择随机100的距离要求?任何想法或帮助将不胜感激。我唯一的工具是MySQL数据库,所以解决方案需要用MySQL SQL编写。先感谢您。
答案 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相同。第一次切割快速而肮脏。 **好吧,它不会在极地工作! **