mysql - 为什么使用 "Great-circle distance"公式和 Google 地球工具计算空间中两点之间的距离时会得到不同的值?

标签 mysql gis geospatial mysql-spatial

我对数据库和GIS不太感兴趣,我对在MySql数据库上使用这个函数来计算两点之间的距离有以下疑问。

我从本教程开始,其中有一个用于计算两个字段之间的距离的函数:

CREATE FUNCTION earth_circle_distance(point1 point, point2 point) RETURNS double
    DETERMINISTIC
begin
  declare lon1, lon2 double;
  declare lat1, lat2 double;
  declare td double;
  declare d_lat double;
  declare d_lon double;
  declare a, c, R double;

  set lon1 = X(GeomFromText(AsText(point1)));
  set lon2 = X(GeomFromText(AsText(point2)));
  set lat1 = Y(GeomFromText(AsText(point1)));
  set lat2 = Y(GeomFromText(AsText(point2)));

  set d_lat = radians(lat2 - lat1);
  set d_lon = radians(lon2 - lon1);

  set lat1 = radians(lat1);
  set lat2 = radians(lat2);

  set R = 6372.8; -- in kilometers

  set a = sin(d_lat / 2.0) * sin(d_lat / 2.0) + sin(d_lon / 2.0) * sin(d_lon / 2.0) * cos(lat1) * cos(lat2);
  set c = 2 * asin(sqrt(a));

  return R * c;
end

我认为它应该返回一个以公里为单位的值作为测量单位。

然后我用它来计算空间中两点之间的距离(取自Google map ,例如罗马米兰城市,在意大利)。

我正在获得合理的值。我的疑问是,然后我使用 Google Earth 中的标尺工具检查了距离,并且获得了不同的值。

敌人的例子考虑到附近的 2 个点(距离 2 公里),我得到了 Google 地球计算出的差异与我之前的函数之间大约有 300 m 的差异。

考虑到距离很远的 2 个点(例如罗马和米兰),我得到了 Google 地球计算的值与上一个函数计算的值之间大约有 100 公里的差异。

前一个函数总是给出更大的值。

所以我必须用它来计算小距离(最大30公里),这样误差应该很小,并且可以满足我的目的。

但是为什么我的函数和使用 Google Earth 计算的距离之间存在这些差异?

最佳答案

SQL Server 使用以下代码返回 534.728893656916km: 声明 @g geography = geography::Point(9.191884,45.464090,4326) -- 纬度、经度、SRID 声明@h geography = geography::Point(12.492359,41.890365,4326) 选择@g.STDistance(@h)/1000.00

关于mysql - 为什么使用 "Great-circle distance"公式和 Google 地球工具计算空间中两点之间的距离时会得到不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40483404/

相关文章:

solr - 使用 Solr 在边界框内进行地理空间搜索

mysql同字段值累计和

php - 搜索器 php 中的 mysql_query() 错误(无效查询)

javascript - OpenLayers 测量功能使 IE 崩溃

python - 如何使用 Shapely 获取 MultiPolygon 内每个点的列表

gis - Openlayers 标记出现在 map 中心

python - 用于存储嵌套框的数据结构?

php - 从两个有关地理区域的 mysql 表中获取行

php - ListView 与 android mysql 数据库使用 php

mysql - 计算MYSQL日期时间