Создать многоугольник (прямоугольник) из минимальной и максимальной широт / длинных - PullRequest
3 голосов
/ 23 декабря 2011

Учитывая широту / долготу, представляющую точку на юго-западе, и широту / долготу, представляющую точку на северо-востоке. Когда я создаю многоугольник, он должен работать в SQL 2008 ...

Вот мой SQL:

   DECLARE @minX varchar(10) = N'49.871159'
    DECLARE @maxX varchar(10) = N'55.811741'
    DECLARE @minY varchar(10) = N'-6.379880'
    DECLARE @maxY varchar(10) = N'1.768960'

    DECLARE @boundingRect varchar(150)
    SET @boundingRect = 'POLYGON((' + @minX + ' '  + @minY + ', ' + @minX + ' ' + @maxY + ', ' + @maxX + ' ' + @maxY + ', ' + @maxX + ' ' + @minY + ', ' + @minX + ' ' + @minY + '))'
    SELECT GEOGRAPHY::Parse(@boundingRect)

Но он выдает мне следующую ошибку: «Указанный вход не представляет действительный экземпляр географии, поскольку он превышает одно полушарие».

Может кто-нибудь сказать мне, что я делаюнеправильно?Ограничительный прямоугольник в моем примере должен примерно охватывать Великобританию, и я предполагаю, что мне нужно указать 5 точек - внизу слева, вверху слева, вверху справа, внизу справа и снова внизу слева.

1 Ответ

5 голосов
/ 24 декабря 2011

Прежде всего, это не связано с тем, что вы пересекаете Главный Меридиан в своем прямоугольнике и находитесь в Восточном и Западном полушарии.Это просто совпадение.

В SQL Geography используется правило левой руки, так что когда наблюдатель идет по вашему кольцу в указанном порядке, внутренняя часть фигуры всегда находится слева от него.Для наружных колец это означает, что кольцо определено против часовой стрелки.По этому правилу вашим оригинальным прямоугольником является весь мир за пределами Великобритании, который, конечно, больше, чем полушарие.:)

Так что просто измените порядок ваших точек в выражении POLYGON (также я изменил ваши значения X и Y, это не влияет на достоверность утверждения, но заставляет карту выйтивыглядит как длинный / лат для Великобритании)

DECLARE @minY varchar(10) = N'49.871159'
DECLARE @maxY varchar(10) = N'55.811741'
DECLARE @minX varchar(10) = N'-6.379880'
DECLARE @maxX varchar(10) = N'1.768960'

DECLARE @boundingRect varchar(150)
SET @boundingRect = 'POLYGON((' + @minX + ' '  + @minY + ', ' + 
                                                   @maxX + ' ' + @minY + ', ' + 
                                                   @maxX + ' ' + @maxY + ', ' + 
                                                   @minX + ' ' + @maxY + ', ' + 
                                                   @minX + ' ' + @minY + '))'
...