我目前正在尝试在Mysql和PHP中设置空间搜索。为此,我使用了以下链接中的hasrsin公式:
http://www.notaires.fr/sites/default/files/geo_searchjkkjkj_0.pdf
目前,出于测试目的,我使用直接查询(当然是最慢的方法),但它的行为非常奇怪。
从我的一个数据库条目中复制纬度和经度信息并将其用于测试目的但我仍然得到一个空的结果。所以我删除了having语句来查看我的图像实际出现的距离,对于我从中获取坐标的数据库条目,它是4098.9334608610825。
我正在使用幻灯片8中显示的确切公式(当然我将字段名称和表名称改编为我的数据库)在链接的powerpoint中,但我只是不断得到这些奇怪的结果。
我有什么想法或建议可以解决这个问题?或者也许有更好的方法来进行空间搜索,如果是这样,请告诉我(暂时不是狮身人面像,因为我现在无法在我的服务器上安装类似的东西,因为我不是所有者)
在这里你可以看到我的结果图片。第一个结果是我从中获取坐标的数据库条目。
提前致谢。
答案 0 :(得分:0)
尝试
select (acos(sin(radians(@orig_lat)) * sin(radians(latitude)) + cos(radians(@orig_lat)) * cos(radians(latitude)) * cos(radians(longitude) - radians(@orig_lon))) * 6378) as dist
认为我正确地写了
答案 1 :(得分:0)
尝试使用不同版本的球形余弦定律公式。这是针对MySQL的:
DEGREES(ACOS(COS(RADIANS(lat1))
* COS(RADIANS(lat2))
* COS(RADIANS(long1 - long2))
+ SIN(RADIANS(lat1))
* SIN(RADIANS(lat2)))) AS distance_in_degrees
然后,您可以将这些度数转换为km。乘以111.045即可。
如果你需要更大数量的大圆距离计算版本(你可能不会),试试Vincenty公式:
DEGREES(
ATAN2(
SQRT(
POW(COS(RADIANS(lat2))*SIN(RADIANS(lon2-lon1)),2) +
POW(COS(RADIANS(lat1))*SIN(RADIANS(lat2)) -
(SIN(RADIANS(lat1))*COS(RADIANS(lat2)) *
COS(RADIANS(lon2-lon1))) ,2)),
SIN(RADIANS(lat1))*SIN(RADIANS(lat2)) +
COS(RADIANS(lat1))*COS(RADIANS(lat2))*COS(RADIANS(lon2-lon1))))
它也以度为单位返回距离。
这篇材料是在这里写的。 http://www.plumislandmedia.net/mysql/haversine-mysql-nearest-loc/