2016-07-28 18 views
0

いくつかの座標を地理オブジェクトに変換しようとしています。以下は、問題を複製する簡単なテストハーネスです。MS地理学がこのポリゴンについて不平を言っているのはなぜですか?

反時計回りの座標が必要なMS地理のために、私が持っているジオゾーンが何であるか分かりません。座標を取得し、降順でソートされた2番目のセットを準備します。これはちょうど1,2,3,4,5 5,4,3,2,1に、長い/緯度に緯度/経度ではありません。

DECLARE @MyPolygon geography 
DECLARE @FwdCoords varchar(max) = 'POLYGON((-33.871090 150.823941, -33.878274 150.823941, -33.878274 150.831348, -33.871090 150.831348, -33.871090 150.823941))' 
DECLARE @RevCoords varchar(max) = 'POLYGON((-33.871090 150.823941, -33.871090 150.831348, -33.878274 150.831348, -33.878274 150.823941, -33.871090 150.823941))' 

BEGIN TRY 
    RAISERROR('Attempt to make polygon from forward string', 0, 1) 
    SET @MyPolygon = geography::STPolyFromText(@FwdCoords, 4326) 
    PRINT @MyPolygon.ToString() 
END TRY 
BEGIN CATCH 
    RAISERROR('Attempt failed. Try with reversed coordinates', 0, 1) 
    IF @@ERROR <> 0 
    BEGIN 
     PRINT 'Proc: ' + ERROR_PROCEDURE() 
     PRINT 'Line: ' + CONVERT(VARCHAR(10), ERROR_LINE()) 
     PRINT 'Number: ' + CONVERT(VARCHAR(10), ERROR_NUMBER()) 
     PRINT 'Message: ' + ERROR_MESSAGE() 
    END 
    BEGIN TRY 
     RAISERROR('Attempt to make polygon from reversed string', 0, 1) 
     SET @MyPolygon = geography::STPolyFromText(@RevCoords, 4326) 
     PRINT @MyPolygon.ToString() 
    END TRY 
    BEGIN CATCH 
     IF @@ERROR <> 0 
     BEGIN 
      PRINT 'Proc: ' + ERROR_PROCEDURE() 
      PRINT 'Line: ' + CONVERT(VARCHAR(10), ERROR_LINE()) 
      PRINT 'Number: ' + CONVERT(VARCHAR(10), ERROR_NUMBER()) 
      PRINT 'Message: ' + ERROR_MESSAGE() 
     END 
    END CATCH 
END CATCH 

私は次のエラー

Line: 22 
Number: 6522 
Message: A .NET Framework error occurred during execution of user-defined routine or aggregate "geography": 
System.FormatException: 24201: Latitude values must be between -90 and 90 degrees. 
System.FormatException: 
    at Microsoft.SqlServer.Types.GeographyValidator.ValidatePoint(Double x, Double y, Nullable`1 z, Nullable`1 m) 
    at Microsoft.SqlServer.Types.Validator.BeginFigure(Double x, Double y, Nullable`1 z, Nullable`1 m) 
    at Microsoft.SqlServer.Types.ForwardingGeoDataSink.BeginFigure(Double x, Double y, Nullable`1 z, Nullable`1 m) 
    at Microsoft.SqlServer.Types.CoordinateReversingGeoDataSink.BeginFigure(Double x, Double y, Nullable`1 z, Nullable`1 m) 
    at Microsoft.SqlServer.Types.OpenGisWktReader.ParseLineStringText() 
    at Microsoft.SqlServer.Types.OpenGisWktReader.ParsePolygonText() 
    at Microsoft.SqlServer.Types.OpenGisWktReader.ParseTaggedText(OpenGisType type) 
    at Microsoft.SqlServer.Types.OpenGisWktReader.Read(OpenGisType type, Int32 srid) 
    at Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType type, SqlChars taggedText, Int32 srid) 
を受け取ります

多角形は正方形です。最後の座標は最初の座標に一致します。コインを見ると、それらはすべて緯度/経度で表示され、すべてのラット= -33で、-90〜90の範囲内にあります。

無効なラットやロングには何の問題もありません。なぜMSジオグラフィーは私がそう信じているのですか?

答えて

2

あなたは緯度と経度の値を切り替えました。どのようにあなた自身にこれを証明することができますか?

DECLARE @g GEOGRAPHY = geography::STPointFromText('POINT(10 20)', 4326) 

SELECT @g.[Lat]; --returns 20 

したがって、WKT表現は(経度、緯度)のペアになります。

+0

> _ <私はとても愚かです – Hecatonchires

関連する問題