我不是很喜欢数据库和GIS,我对MySql数据库中用于计算2点之间距离的函数有以下疑问。
我从本教程开始,这个函数用于计算2 point 字段之间的距离:
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
我认为它应该以 km 的形式返回一个值作为单位测量值。
然后我用它来计算空间中2点之间的距离(取自谷歌地图,例如罗马和米兰城市,在意大利)。
我正在获得合理的价值观。我怀疑的是,然后我使用Gooogle地球中的标尺工具检查了距离,我获得了不同的值。
考虑到2点附近(距离2公里)的敌人我获得了Google Earth计算的差异和我以前的功能之间300米的差异。
考虑到2个非常遥远的点(对于示例罗马和米兰),我获得了Google Earth计算的值与前一个函数计算的值之间100 km的差异。
上一个函数总是给出更大的值。
所以我必须用它来计算小距离(最大30公里),所以误差应该很小,可以用于我的pourpose。
但为什么我在使用谷歌地球计算的距离和距离之间获得这些差异?
答案 0 :(得分:0)
SQL Server使用以下代码返回534.728893656916km:
declare @g geography = geography::Point(9.191884,45.464090,4326) -- Latitude, Longitude, SRID
declare @h geography = geography::Point(12.492359,41.890365,4326)
select @g.STDistance(@h)/1000.00