首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MS Geography会抱怨这个多边形?

为什么MS Geography会抱怨这个多边形?
EN

Stack Overflow用户
提问于 2016-07-28 08:53:37
回答 1查看 167关注 0票数 0

我正在尝试将一些坐标转换为地理对象。下面是一个简单的测试工具,复制了这个问题。

由于MS Geography需要逆时针方向的坐标,而我又不知道我所在的地理区域是什么,所以我得到了坐标,然后准备了第二个按降序排序的集合。这不是lat/long to long/lat,只是1,2,3,4,5到5,4,3,2,1:

代码语言:javascript
复制
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

我收到以下错误

代码语言:javascript
复制
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)

多边形是一个正方形。最后一个坐标与第一个坐标匹配。看一下余弦,它们都是lat/lng,所有lats =-33,在-90到90的范围内

据我所知,我对无效的经度或经度没有问题。为什么MS Geography认为我会这样做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-28 13:16:08

您已经切换了纬度和经度值。你怎么能证明这一点呢?

代码语言:javascript
复制
DECLARE @g GEOGRAPHY = geography::STPointFromText('POINT(10 20)', 4326)

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

因此,WKT表示将是(经度,纬度)对。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38625455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档