Ich versuche, einige Koordinaten in ein Geografieobjekt zu konvertieren. Unten ist ein einfacher Testkabelbaum, der das Problem dupliziert.Warum beschwert sich MS Geography über dieses Polygon?
Da MS Geography die Koordinaten im Gegenuhrzeigersinn benötigt und ich keine Ahnung habe, welche Geozonen ich habe, erhalte ich die Koordinaten und bereite dann einen zweiten Satz in absteigender Reihenfolge vor. Dies ist nicht lat/long zu lang/lat, nur 1,2,3,4,5 zu 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
erhalte ich folgende Fehler
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)
Das Polygon ist ein Quadrat. Letzte Koordinate stimmt mit erster Koordinate überein. Mit Blick auf die Koordinaten sind sie alle in lat/lng, mit allen Lats = -33.etwas, gut innerhalb der -90 bis 90 Grenze
Von dem, was ich sehen kann, habe ich kein Problem mit ungültigen Lats oder Longs. Warum glaubt MS Geografie das?
> _
Hecatonchires