4

空間データを使用して最初のプロジェクトを開始しています。VS 2012 と SQL 2012 を使用しています System.Data.Entity を参照しており、コードで DbGeography を使用できますが、ポイントを作成しようとすると上記のエラーが発生し、理由がわかりません

ここに私のコードがあります

var text = string.Format(CultureInfo.InvariantCulture.NumberFormat,
                "POINT({0} {1})", submitted.Long, submitted.Lat);
            // 4326 is most common coordinate system used by GPS/Maps
            try
            {
                var wkb = DbGeography.PointFromText(text, 4226);
            }
            catch (Exception exc)
            {
            }
4

2 に答える 2

2

OP が使用した構文は正しいです。このエラーの原因となった実際の問題は SRID でした。4226 は既知の SRID ではありませんが、これは既にご存知です。それはあなたのコメントにあるからです:)

シナリオでの正しい使用法の 1 行の例は次のようになります。

var wkb = DbGeography.PointFromText($"POINT({submitted.Long} {submitted.Lat})", 4326);

でもどこで間違えたの?あなたが得るたびに

System.Reflection.TargetInvocationException

のメッセージで

呼び出しのターゲットによって例外がスローされました

実際のエラーの詳細については、すぐに内部例外を確認する必要があります。この場合、概要が明確に示されています。

24204: 空間参照識別子 (SRID) が無効です。指定した SRID は、sys.spatial_reference_systems カタログ ビューに表示される、サポートされている SRID のいずれかと一致する必要があります。

これは古いスレッドであることは認識していますが、IMO これは、人々が SO に投稿し続ける 2 番目に一般的な .Net 開発者の問題の例です。髪を引っ張る前に、例外スタック全体を読んでください。

推測ですが、NullReferenceExceptionの問題が最も一般的だと思います:)

于 2016-08-19T00:10:00.543 に答える
-3
is wrong to order the lat and long

正しいのは次のとおりです。

DbGeography.PointFromText(POINT(lat long), 4226);

完全なクラス:

public static DbGeography CreatePoint(double latitude, double longetude, int srid = 4326)
    {
        var lon = longetude.ToString(CultureInfo.InvariantCulture);
        var lat = latitude.ToString(CultureInfo.InvariantCulture);

        var geo = $"POINT({lat} {lon})";

        return DbGeography.PointFromText(geo, srid);
    }

電話:

CreatePoint(-46.55377, 23.11817)
于 2016-08-11T16:01:35.383 に答える