У меня есть несколько сотен фигур ( polygon
с и multipolygon
я) каждый из которых состоит из десятков тысяч точек , которые я пытаюсь войти в SQL 2008.
К сожалению, фигуры, которые я попытался импортировать, являются «правосторонними» (периметр каждой из них нарисован по часовой стрелке вокруг точек, которые она содержит). SQL-сервер принимает «левосторонние» формы (против часовой стрелки внутри), по крайней мере, для geography
типов. Это означает, что SQL предполагает, что я пытаюсь выбрать всю землю, кроме моей формы. Некоторые люди описывают это как "наизнанку" формы.
Из MSDN , который, к сожалению, не говорит, какую ориентацию кольца следует использовать:
Если мы используем
geography
тип данных для хранения пространственного экземпляра, мы должны указать ориентацию кольца и точно описать местоположение экземпляра.
Если вы используете неправильную ориентацию кольца в SQL 2008, он вылетает со следующей ошибкой (выделено мной):
Ошибка .NET Framework произошла во время выполнения пользовательской подпрограммы или совокупной «географии»: Microsoft.SqlServer.Types.GLArgumentException: 24205: указанный ввод не представляет допустимый экземпляр географии, поскольку он превышает одно полушарие. Каждый экземпляр географии должен помещаться в одном полушарии. Распространенной причиной этой ошибки является неправильная ориентация кольца.
Импортирование фигур geometry
вместо geography
работы нормально, но я бы хотел использовать, geography
если смогу.
В SQL 2012 исправить эту проблему довольно просто , но я привязан к 2008 году.
Как мне преобразовать фигуры?
источник
Ответы:
В блоге Spatial Ed было краткое решение. Вот некоторый SQL, демонстрирующий преобразование:
И выдержка из поста Эда:
источник
В> = SQL Server 2012 метод ReorientObject () должен выполнить это. Для <SQL Server 2012 ниже приведен альтернативный метод.
Для существующей географии SQL @g, приведенный ниже код извлечет точки и заново создаст многоугольник с точками (вершинами) в обратном порядке:
(ПРИМЕЧАНИЕ 1: работает для простых многоугольников, а не для многоугольников или многоугольников с кольцами / центроидами)
(ПРИМЕЧАНИЕ 2: использование системы координат SRID 4326 (WGS 84))
источник
Похоже, я могу использовать какой-то нечестивый гибрид SQL и C # из SQL Server Spatial Tools , как предложено в Переполнении стека .
Примечание: на момент публикации этого ответа не было много информации. Пожалуйста, не пытайтесь использовать этот метод, если вам уже не нужны пространственные инструменты SQL Server для чего-то другого. Вместо этого попробуйте один из других ответов здесь или в Переполнение стека .
источник