Tengo un archivo de datos CSV de un tercero que es una tabla de SQL Server exportada. Simplemente hicieron select * from foo
y enviaron el resultado a un archivo de texto y lo enviaron.
En su tabla hay una columna de tipo Geometry, así que en mi texto sin formato tengo algo como "0xE610000010C47 ...", etc. En este momento lo he cargado en una tabla en SQL Server como un nvarchar.
Anticipé que podría volver a un campo de Geometría en mi extremo, pero eso no parece ser tan fácil. STGeomFromWKB
no funciona porque en realidad no es un WKB. No puedo convertir la cadena como Geometría porque se queja de que no es un WKT.
Entonces, ¿hay alguna forma de obtener este valor en SQL Server como si fuera un BLOB de Geometría normal? ¿Puedo decirle a SQL Server que lo trate como tal?
Encontré este enlace que al menos me ayudó a responder mi pregunta sobre lo que hay en SQL Server, pero no me llegó hasta allí: ¿cuál es el formato del tipo de datos Geometry de SQLServer 2008?
Respuestas:
Cuando importe los datos a SQL Server, colóquelos en una columna VARBINARIA (MAX). A continuación, debe poder CASTAR esto como Geometría o Geografía según sea necesario. Deberá tener cuidado de que la cadena 0xE6 ... no se cambie durante la importación.
Otra opción es hacer una consulta dinámica para obtener la selección. Pongo un par de ejemplos de conversión a continuación.
fuente
Basándose en la respuesta de @ MickyT, dado que va a tener una tabla con sus valores ya en WKB (o como sea que la llamemos), querrá escribir sql que convierta todos los registros a geometría, en lugar de tener que declarar una variable, etc. etc.
Entonces, si comienza con una tabla temporal simple que replicaría el WKB en un registro, se vería así:
Ahora, si trata eso como una tabla temporal y ajusta un poco de SQL a su alrededor, tiene una columna con el WKB allí y puede convertirlo a varbinary como se sugirió anteriormente:
donde temp.wkb puede ser la columna en su tabla más grande que contiene los valores WKB del CSV
Finalmente, use el método descrito por MickyT y convierta el varbinary a geometry:
Que devuelve geometría y un resultado espacial:
EDITAR ¿ dónde se declara el SRID? Como respondió MickyT, está en el binario, y puede ajustar 1 consulta sql más por allí para probar:
que produce, y es correcto en mi ejemplo, 2877 (plano del estado de Colorado):
fuente
El póster original aquí, cuando intenté finalizar el registro, no vinculaba el inicio de sesión para la publicación original. De todas formas....
¡Gracias por toda la ayuda! Votaré cada respuesta una vez que pueda y tal vez si puedo descubrir cómo vincular esta cuenta y la original, puedo marcar una respuesta. Además, después de sus punteros, no puedo creer que me perdí el uso en
CONVERT
lugar deCAST
. Lo hace mucho más fácil.Creo que mi principal problema era conseguir que la "cadena" binaria en bruto se convirtiera en algo que pudiera usar. Aquí hay una muestra de cómo lo resolví:
fuente