Mysql SQL需要基于具有最小/最大距离约束的lat/long获取位置子集

Mysql SQL需要基于具有最小/最大距离约束的lat/long获取位置子集,mysql,Mysql,我有一个MySQL表,其中包含500条位置记录,其结构类似于: id, name, lat, long Lat和long是十进制浮点位置值 我需要的是返回一个随机的100个记录集,它们之间的距离最小为200米,最大为500米。我熟悉使用大圆公式来计算两点之间的距离。但是,我不知道如何编写select语句来比较所有位置,以确保随机选择的100个位置的距离要求?如有任何想法或帮助,将不胜感激。我唯一的工具是MySQL数据库,所以解决方案需要用MySQL编写。先谢谢你 如果你只看500米,那么走一些

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

id, name, lat, long
Lat和long是十进制浮点位置值


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

如果你只看500米,那么走一些捷径,假装这是一个xy空间,然后使用简单的三角法。你能拿个正方形而不是油炸圈饼吗

你可以把它作为第一个切入点,然后对剩下的部分进行适当的数学运算

你的第二个伤口现在足够小了。给每个人分配一个随机编号,然后取最上面的X。瞧


编辑的第一部分,欺骗和使用谷歌地图。找出赤道上一度的分数等于500米。使用x+/-该值,y使用相同的值。第一刀又快又脏**好吧,这在两极是行不通的**

到目前为止你试过什么?我假设lat和long的度量单位是米?您需要将表连接到自身,并将500个位置的纬度和经度与所有500个其他位置进行比较-这将返回一个完整的数据集,其中包含250k条记录,这些记录将根据距离条件进行精简。这不是正确的解决方案,因为表中只有纬度和经度字段,而没有纬度字段1,latitude2和Longtude1,Longtude2字段。你的目标很好,但应该加入。。。其中放置p1、p2并选择p1.latittude作为latitude1,以此类推
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