mysql - sql查询 map ,纬度,长距离给出不合逻辑的距离结果

标签 mysql sql google-maps distance latitude-longitude

我正在尝试通过数据库中的查询获取与 map 点的距离。 我用它来计算公里数。

  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

然后就好了。

最佳答案

我想问题可能出在给定坐标投影的情况下您的方程式不正确?您使用的是哪种投影? (我相信 Google map 是球形墨卡托)。

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

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

您可以在客户端的 foreach 循环内轻松执行此操作,从而为您提供所需的距离。

For reference.

关于mysql - sql查询 map ,纬度,长距离给出不合逻辑的距离结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27035278/

相关文章:

mysql - 存储在数据库中的平均操作时间

javascript - 如何在谷歌地图中添加获取路线选项

java - 谷歌上次更新后方向 API 谷歌地图出现问题

mysql - SQL查询中不相关表的使用计数

php - 使用 PHP 从 MySQL 列中删除重复的逗号分隔值

mysql - Node/Express + MySQL,错误: ER_PARSE_ERROR. 数据插入正确,但错误仍然出现

sql - 如何使用 Groovy StreamingJsonBuilder 将 SQL 结果流式传输到 JSON?

java - 从 Java 和 Ruby 访问 HSQL?

mysql - 如何计算 mysql 中过去 7 天的每一天的条目?

google-maps - LatLngBounds - 如何获得 SW 和 NE 点