5

2 つのジオコード間の距離を計算する式は何ですか? このサイトでいくつかの回答を見てきましたが、基本的に SQL Server 08 の機能に頼るように言われていますが、私はまだ 08 ではありません。どんな助けでも大歓迎です。

4

9 に答える 9

8

地球の近似値とHaversine式を使用します。次の URL で JavaScript バージョンを取得できます。このバージョンは、選択した言語に翻訳できます。

http://www.movable-type.co.uk/scripts/latlong.html

ここに別の方法があります: http://escience.anu.edu.au/project/04S2/SE/3DVOT/3DVOT/pHatTrack_Application/Source_code/pHatTrack/Converter.java

于 2009-07-10T16:28:57.103 に答える
2

SQL Server 2000 版SQL Server 郵便番号緯度経度近接距離検索はこちら

于 2009-07-10T16:32:14.493 に答える
2

これにより、C#でそれが行われます。

名前空間内にこれらを置きます:

 public enum DistanceType { Miles, Kilometers };

public struct Position
{
    public double Latitude;
    public double Longitude;
}

class Haversine
{

    public double Distance(Position pos1, Position pos2, DistanceType type)
    {
        double preDlat = pos2.Latitude - pos1.Latitude;
        double preDlon = pos2.Longitude - pos1.Longitude;
        double R = (type == DistanceType.Miles) ? 3960 : 6371;
        double dLat = this.toRadian(preDlat);
        double dLon = this.toRadian(preDlon);
        double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
        Math.Cos(this.toRadian(pos1.Latitude)) * Math.Cos(this.toRadian(pos2.Latitude)) *
        Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
        double c = 2 * Math.Asin(Math.Min(1, Math.Sqrt(a)));
        double d = R * c;
        return d;
    }

    private double toRadian(double val)
    {
        return (Math.PI / 180) * val;
    }

次に、これらをメイン コードで使用します。

Position pos1 = new Position();
                    pos1.Latitude = Convert.ToDouble(hotelx.latitude);
                    pos1.Longitude = Convert.ToDouble(hotelx.longitude);
                    Position pos2 = new Position();
                    pos2.Latitude = Convert.ToDouble(lat);
                    pos2.Longitude = Convert.ToDouble(lng);
                    Haversine calc = new Haversine();

                    double result = calc.Distance(pos1, pos2, DistanceType.Miles);
于 2012-10-17T08:57:04.083 に答える
1

ここで他の人が提示したピタゴラスの定理はうまく機能しません。

最善の簡単な答えは、地球を球体として近似することです (実際には少し平らな球体ですが、これは非常に近い球体です)。たとえば、Haskell では、次のように使用できますが、数学はほとんど何にでも変換できます。

distRadians (lat1,lon1) (lat2,lon2) = 
    radius_of_earth * 
    acos (cos lat1 * cos lon1 * cos lat2 * cos lon2 + 
          cos lat1 * sin lon1 * cos lat2 * sin lon2 + 
          sin lat1 * sin lat2) where
    radius_of_earth = 6378 -- kilometers


distDegrees a b = distRadians (coord2rad a) (coord2rad b) where
    deg2rad d = d * pi / 180
    coord2rad (lat,lon) = (deg2rad lat, deg2rad lon)

distRadians角度をラジアンで指定する必要があります。

distDegrees緯度と経度を度単位で取得できるヘルパー関数です。

この式の導出に関する詳細については、この一連の投稿を参照してください。

地球が楕円体であると仮定して追加の精度が本当に必要な場合は、次の FAQ を参照してください: http://www.movable-type.co.uk/scripts/gis-faq-5.1.html

于 2009-07-10T16:48:23.977 に答える
0

球上の 2 点間の大円経路の長さを探しています。Google で「Great Circle Path」または「Great Circle Distance」を検索してみてください。

于 2009-07-10T16:38:02.780 に答える
0

申し訳ありませんが、あなたがどこの国にいるのかもわかりません。Easting と Northings (英国、Ordance Survey システム) または Lat/Long またはその他のシステムについて話しているのでしょうか? Easting と Northing について話している場合は、
sqr((x1-x2)^2 + (y1-y2)^2)
を使用できます。気づきません。郡内の地点間の距離を測るために職場で使用しています。
使用するグリッド参照の長さに注意してください。8 桁の参照でメートル単位の距離が得られると思います。他の誰も答えてくれなければ、来週職場で明確な答えを得ることができるでしょう。

于 2009-07-10T16:40:59.450 に答える
-1

ピタゴラスの定理?

于 2009-07-10T16:26:37.547 に答える