Ошибка географической широты SQL Server - PullRequest
0 голосов
/ 09 сентября 2018

Я использую тип данных geography для расчета кратчайшего расстояния.

CREATE TABLE Landmark (
    Id int,   
    Latitude FLOAT,
    Longitude FLOAT
)

INSERT Landmark VALUES
(1, 49.242458, -123.153465),
(2, 49.249381, -122.866683)

WITH GeographyLandmark AS
(
    SELECT Id, geography::STPointFromText('POINT(' + CAST(Latitude AS VARCHAR(20)) + ' ' + CAST(Longitude AS VARCHAR(20)) + ')', 4326) Location
    FROM Landmark
)

--this query calculates distance between point and localizations in meters
SELECT Id, geography::STPointFromText('POINT(' + CAST(49.2424566 AS VARCHAR(20)) + ' ' + CAST(-123.1534623 AS VARCHAR(20)) + ')', 4326).STDistance(Location) Distance
FROM GeographyLandmark

Но я получаю эту ошибку:

Произошла ошибка .NET Framework во время выполнения пользовательской подпрограммы или совокупной "географии": System.FormatException: 24201: значения широты должны быть от -90 до 90 градусов.System.FormatException: в Microsoft.SqlServer.Types.GeographyValidator.ValidatePoint (Double x, Double y, Nullable 1 z, Nullable 1 м) в Microsoft.SqlServer.Types.Validator.BeginFigure (Double x, Double y, Nullable 1 z, Nullable 1m) в Microsoft.SqlServer.Types.ForwardingGeoDataSink.BeginFigure (Double x, Double y, Nullable 1 z, Nullable 1 m) в Microsoft.SqlServer.Types.CoordinateReversingGeoDataSink.BeginFigure (Double x, Double y, Nullable * 1011)в Microsoft.SqlServer.Types.WellKnownTextReader.ParsePointText (Boolean parseParentheses) в Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText (тип OpenGisType.Types.SqlGeography.ParseText (тип OpenGisType, SqlChars taggedText, Int32 srid) в Microsoft.SqlServer.Types.SqlGeography.GeographyFromText (тип OpenGisType, SqlChars * * * 101 *

1012 * 1012), сетка Int32.проблема здесь?

1 Ответ

0 голосов
/ 10 сентября 2018

Похоже, вы переключили широту и долготу. Пара вещей:

  1. Простая проверка работоспособности заключается в использовании расширенных свойств Lat и / или Long. Вот документ для Long.

  2. Другим расширением, которое обеспечивает реализация Microsoft, является статический метод Point для создания точек. Таким образом, вместо того, чтобы создавать WKT для точки, чтобы перейти к STPointFromText, вы можете просто сделать geography::Point(Latitude, Longitude, SRID). Вот для этого документ .

...