0

私はデータベースと GIS にはあまり興味がなく、MySql データベースで 2 点間の距離を計算するために使用されるこの関数について、次の疑問があります。

私は、2フィールド間の距離を計算するために使用されるこの関数があるこのチュートリアルから始めました:

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 点間の距離を計算しました (ここではイタリアのローマミラノの都市などのGoogle マップから取得)。

妥当な値を取得しています。私の疑問は、Google Earth の定規ツールを使用して距離を確認し、異なる値を取得していることです。

近くにある 2 つのポイント (2 km の距離) を考慮した敵の例では、Google Earth によって計算された差と以前の関数との間に 300 m のような差が得られます。

非常に離れた 2 つのポイント (ローマとミラノなど) を考慮すると、Google Earth で計算された値と前の関数で計算された値との間に 100 km ほどの差が得られます。

前の関数は常により大きな値を与えます。

したがって、短い距離(最大30 km)で計算するためにそれを使用する必要があるため、エラーはほとんどなく、私の目的では問題ありません。

しかし、関数と Google Earth を使用して計算された距離との間でこれらの差が得られるのはなぜですか?

4

1 に答える 1

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

于 2016-12-22T11:47:20.347 に答える