sql查询地图,lat,长距离给出不合逻辑的距离结果

时间:2014-11-20 08:51:04

标签: mysql sql google-maps distance latitude-longitude

我试图通过数据库中的查询来获取地图点的距离。 我用它来达到千米的距离。

  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

然后很好。

1 个答案:

答案 0 :(得分:0)

我认为问题可能是你的方程不正确给定坐标投影?你在使用哪个投影? (我相信谷歌地图是球形墨卡托)。

如果您无法使查询正常工作,另一种解决方案是使用距离计算器中内置的地图api:

var distance = google.maps.geometry.spherical.computeDistanceBetween(latLong, latLong);

您可以在客户端的foreach循环中轻松完成此操作,以便为您提供所需的距离。

For reference.