Tengo unos cientos de formas ( polygon
s y multipolygon
s), cada una de las cuales consta de decenas de miles de puntos que intento ingresar a SQL 2008.
Desafortunadamente, las formas que he tratado de importar son "diestras" (el perímetro de cada una se dibuja en el sentido de las agujas del reloj alrededor de los puntos que contiene). El servidor SQL asume formas "zurdas" (en sentido antihorario alrededor del interior), al menos para los geography
tipos. Esto significa que SQL asume que estoy tratando de seleccionar toda la tierra, excepto mi forma. Algunas personas describen esto como formas "de adentro hacia afuera".
De MSDN , que frustrantemente no dice qué orientación de anillo se debe usar:
Si usamos el
geography
tipo de datos para almacenar la instancia espacial, debemos especificar la orientación del anillo y describir con precisión la ubicación de la instancia.
Si usa la orientación de anillo incorrecta en SQL 2008, se bloquea con el siguiente error (el énfasis es mío):
Se produjo un error de .NET Framework durante la ejecución de la rutina o geografía agregada definida por el usuario: Microsoft.SqlServer.Types.GLArgumentException: 24205: La entrada especificada no representa una instancia de geografía válida porque excede un solo hemisferio. Cada instancia de geografía debe caber dentro de un solo hemisferio. Una razón común para este error es que un polígono tiene una orientación de anillo incorrecta.
Importar las formas como en geometry
lugar de geography
funciona bien, pero me gustaría usar geography
si puedo.
En SQL 2012, parece bastante trivial solucionar este problema, pero estoy vinculado a 2008.
¿Cómo debo convertir las formas?
fuente
Respuestas:
El blog de Spatial Ed tuvo una solución concisa. Aquí hay algunos SQL que demuestran la transformación:
Y un extracto de la publicación de Ed:
fuente
En> = SQL Server 2012, el método ReorientObject () debería lograr esto. Para <SQL Server 2012, a continuación hay un método alternativo.
Para una geografía SQL existente @g, el código siguiente extraerá los puntos y volverá a crear un polígono con puntos (vértices) en orden inverso:
(NOTA 1: funciona para polígonos simples, no para multipolígonos o polígonos con anillos / centroides)
(NOTA 2: utilizando el sistema de coordenadas SRID 4326 (WGS 84)
fuente
Parece que puedo usar algún híbrido impuro de SQL y C # de las herramientas espaciales de SQL Server , como se sugiere en Stack Overflow .
Nota: Cuando se publicó esta respuesta, no había mucha información disponible. No intente este método a menos que ya necesite herramientas espaciales de SQL Server para otra cosa. En su lugar, pruebe una de las otras respuestas aquí o en Stack Overflow .
fuente