¿Cómo especificar campos para exportar desde QGIS?

9

Estoy usando QGIS 2.0.1 y estoy conectado a una base de datos espacialmente habilitada de MS SQL Server (no ESRI). Puedo conectarme a la capa y cargarla en mi TOC muy bien. He ocultado una serie de campos que no son importantes por razones de visibilidad.

Ahora quiero exportar esos datos a otro tipo de datos (usaremos shapefile para este ejemplo). Cuando hago clic derecho en la capa, elijo "Guardar como" y defino el archivo de salida, aparece el siguiente error:

La exportación al archivo vectorial falló. Error: tipo no admitido para el campo GlobalID

Nota 1 : si marco "Omitir creación de atributo" en el cuadro de diálogo, el archivo de forma se crea sin errores.

Nota 2 : ArcGIS no tiene este problema, solo convierte el campo GUID al tipo "TEXTO".

Mirando la tabla, uno de los campos que he ocultado es un GUID de tipo SQL < uniqueidentifier >, que probablemente sea el culpable. En un intento de resolver esto, hice el campo "oculto". Supuse que debido a que el campo estaba oculto, QGIS no intentaría exportar este campo, pero resultó que no era el caso.

¿Puede definir los campos que desea exportar desde QGIS?

¿Es posible que QGIS exporte solo los campos "Visibles"? ¿O hay otra forma alternativa de hacer esto desde QGIS (tal vez definir los campos a través de una consulta ogr2ogr)? Esto parece una deficiencia de QGIS si no puedo definir qué campos exportar.

ACTUALIZACIÓN: Hice una prueba con un archivo de forma de muestra para ver si podía limitar los campos de salida. La siguiente línea de comando ogr2ogr funcionó y eliminó todos los campos excepto "nombre":

ogr2ogr -f "ESRI Shapefile" test.shp city.shp -sql "select name from city"

pero usando QGIS y agregando:

-sql "select name from city"

a la sección "capa" del cuadro de diálogo "Guardar como" no resultó en un archivo de forma con solo un campo. Así que realmente no veo cómo puedo manipular la salida del archivo para mostrar solo unos pocos campos seleccionados. Cualquier ayuda es apreciada.

RyanKDalton
fuente
Si ogr2ogr puede hacerlo, QGIS puede, porque esa es exactamente la herramienta que se ejecuta en segundo plano. Desafortunadamente, no tengo ninguna base de datos de SQL Server para probar ...
underdark
Derecha. Así que traté de agregar -sql "select <fields> from <table>"(excluyendo el campo GlobalID de los <campos>) a la parte "Capa" del cuadro de diálogo "Guardar como", pero el mismo error aún apareció. ¿Utilicé mal este bloque de código o es un error?
RyanKDalton
esta respuesta sugiere -select en lugar de -sql gis.stackexchange.com/questions/30691/… ... Creo que va en la sección de fuente de datos, no en la capa.
oscuro
No tuve suerte con ninguna de sus sugerencias. También probé varias combinaciones de las opciones -select y -sql en los campos "Capa" y "Fuente de datos" de las "Opciones de creación de OGR" :( Seguramente, no puedo el primero con la necesidad de exportar un subconjunto de campos ...
RyanKDalton
Puede valer la pena consultar con los desarrolladores. Podría ser un error.
oscuro

Respuestas:

1

Si te funciona en la línea de comandos con ogr2ogr, creo que es la mejor solución para usar eso. Puede escribir un archivo bat simple para crear un archivo shape desde su base de datos MSSQL. Obviamente no puede editar los datos y guardarlos de nuevo en el servidor de esa manera.

QGIS tiene los cuadros de entrada Fuente de datos y Capa, pero estos son solo para los parámetros -dsco y -lco de ogr2ogr. El controlador de archivos de forma OGR no tiene dsco o lco útiles para sus necesidades:

http://www.gdal.org/ogr2ogr.html

http://www.gdal.org/ogr/drv_shapefile.html

Alternativamente, debería ser posible escribir un complemento de Python que solicite los datos del servidor con un comando SQL SELECT según sus necesidades. Esto incluso permitiría la edición de datos.

AndreJ
fuente
Hasta ahora, esta parece ser la idea más factible. ¿Hay alguna manera de llamar directamente a la línea de comandos ogr2ogr desde la interfaz de usuario de QGIS para obtener su propia sintaxis ogr2ogr?
RyanKDalton
No directamente. Pero puede secuestrar la terminal de gdalwarp para ingresar su comando ogr2ogr allí. Obtiene un error de que la capa no se creó, pero de todos modos está en el sistema de archivos. No estoy seguro de qué sucede si el archivo ya existe, por lo que es mejor agregar -overwrite también. Y mejor use nombres de ruta completos para los archivos.
AndreJ
Alternativamente, ¿alguna vez ha intentado usar un archivo virtual GDAL VRT como mediador entre MSSQL y QGIS?
AndreJ
No lo he hecho, pero ¿no es GDAL para trabajar con rásteres? Estoy trabajando con una capa de vector de puntos. Sin embargo, me gusta la idea de una "mesa virtual" como intermediario. ¿QGIS 2 no tiene una capa en memoria en la que podamos escribir?
RyanKDalton
1
También hay un controlador GDAL ogrvrt: gdal.org/ogr/drv_vrt.html . Pero creo que esto debería plantearse mejor en otra pregunta.
AndreJ
0

Le sugeriría que verifique la tabla de atributos para la capa en TOC y si existe el campo GlobalID. Cambie al modo de edición, elimine la columna que crea el problema durante la exportación y cierre la ventana. Luego guarde como shapefile o el formato de salida que desee. Espero que esto ayude.

Farhat Abbas
fuente
1
No estoy seguro de si eliminar el campo en la tabla de SQL Server es una buena opción. Es posible que el servidor aún lo necesite.
AndreJ
Creo que eliminar una columna de atributos de QGIS TOC Layer guarda la estructura actualizada en el búfer QGIS y le permite exportar el archivo en otro formato. una vez que finalice la exportación, no guarde los cambios en la capa (lo que ha eliminado)
Farhat Abbas