我试图通过数据库中的查询来获取地图点的距离。 我用它来达到千米的距离。
SELECT title_fr,
type,
property_type,
price,
longi,
lat,
( 6371 * acos ( cos ( radians(10.811812877) ) * cos( radians( lat ) ) * cos( radians( longi ) - radians(36.461330195) ) + sin ( radians(10.811812877) ) * sin( radians( lat ) ) ) ) AS distance
FROM skopeo_annonce_immo
ORDER BY distance
我的变量是:
latitude = 10.811812877
longitude = 36.461330195
我的问题是该查询给出了错误的距离计算结果。示例给出3841.9933722712412
的距离
当我的数据库中的纬度和经度与我在查询中用作参数的纬度和经度相同时,作为距离结果而不是0。
其他结果是不相干的,它们给我的距离太大了。
title_fr type property_type price longi lat distance
Villa avec picsine très... to_sell home 640000 11.035560071 33.825791858 3637.6770884050457
Belle maison à vendre to_sell home 192600 10.8492136 33.866210798 3653.92943440657
villa meublée a louer to_rent furnished 3000 10.70034027 34.774895801 3728.0785739669286
terrain à reougeb to_sell land 70 9.0293884277 33.449776583 3760.4640127561815
Appartement La Plage to_rent home 300 10.811812877 36.461330195 3841.9933722712412
Terrain Adel to_sell land 270 10.809098482 36.462822475 3842.2851686112595
Appartement Maamoura to_sell apartment 180000 10.801491737 36.466369224 3843.056144544567
Dar Maamoura Club to_sell home 400000 10.801513195 36.466403736 3843.057245114819
DAR L'ELEGANTE to_sell home 645000 10.82118988 36.485348924 3843.1331942217366
距离在最后一列。 我已尝试过其他公式,它也给了我错误的结果。
更新和解决方案
有时解决方案很简单,获得我使用的距离的公式是正确的。 问题是我把变量倒转了! 正确的顺序应该是这个。
latitude = 36.461330195
longitude = 10.811812877
然后很好。
答案 0 :(得分:0)
我认为问题可能是你的方程不正确给定坐标投影?你在使用哪个投影? (我相信谷歌地图是球形墨卡托)。
如果您无法使查询正常工作,另一种解决方案是使用距离计算器中内置的地图api:
var distance = google.maps.geometry.spherical.computeDistanceBetween(latLong, latLong);
您可以在客户端的foreach循环中轻松完成此操作,以便为您提供所需的距离。