Php 如何使用GPS数据,如getLatitude()返回的双精度值?

Php 如何使用GPS数据,如getLatitude()返回的双精度值?,php,android,mysql,gps,location,Php,Android,Mysql,Gps,Location,我一直在寻找答案,但也许我没有使用正确的术语。我正在创建一个应用程序,该应用程序将访问数据库,以返回距离用户位置一定距离内的其他用户列表。我从未使用过这种类型的数据,我也不知道这些值的含义。我想用MySQL或PHP在后端完成所有计算。目前,我正在数据库中将纬度和经度存储为双倍。我可以访问和存储它们,但我不知道如何根据距离对它们进行排序。也许我应该使用一种不同的类型或一些在这方面很常见的技术。TIA.听起来您需要使用,它可以获取两组长坐标/纬度坐标之间的距离(根据地球的曲率进行调整) 如果运行一个

我一直在寻找答案,但也许我没有使用正确的术语。我正在创建一个应用程序,该应用程序将访问数据库,以返回距离用户位置一定距离内的其他用户列表。我从未使用过这种类型的数据,我也不知道这些值的含义。我想用MySQL或PHP在后端完成所有计算。目前,我正在数据库中将纬度和经度存储为双倍。我可以访问和存储它们,但我不知道如何根据距离对它们进行排序。也许我应该使用一种不同的类型或一些在这方面很常见的技术。TIA.

听起来您需要使用,它可以获取两组长坐标/纬度坐标之间的距离(根据地球的曲率进行调整)

如果运行一个查询并将其作为输出,则可以根据与用户的最小距离轻松对其进行排序

下面是实现所用语言的链接,它在SQL查询中实现

以下是您可以调整的查询(从最近到最远的顺序获取25英里内的任何内容):

选择
身份证件
(3959*acos(cos(弧度(37))*cos(弧度(lat))*cos(弧度(lng)-弧度(-122))+sin(弧度(37))*sin(弧度(lat)))作为距离
从…起
标记
有
距离<25
订购人
距离
极限
0 , 20;

我建议使用维琴蒂的逆公式(“s_公式”)而不是哈弗森大圆距离,因为维琴蒂被证明更精确(维琴蒂假设地球是一个扁球体,而不是一个更精确的完美球体)

这是Vincenty关于公式的原始文件: -第四节

以下是来自Android平台的实际代码,用于计算distanceTo(Location)的距离,它使用Vincety的逆公式:

至于基于数据库查询的距离排序,为了获得最佳性能,您需要使用允许空间查询的空间数据库。MySQL有一个空间数据库插件:

查看这篇文章,它将为您提供详细信息,包括使用Vicenty时有关精度的注释:

这正是我需要的。谢谢。我得调查一下这个。谢谢你的信息。
SELECT 
    id, 
    ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance 
FROM 
    markers 
HAVING 
    distance < 25 
ORDER BY 
    distance 
LIMIT 
    0 , 20;