24 votos

¿Cómo convertir el .shp en .csv incluyendo atributos Y geometría?

Tengo un archivo .shp con 60k+ entradas, todas ellas polígonos con sus correspondientes atributos (totales de superficie, nombres de propietarios, números de identificación fiscal, etc.). Lo que necesito en última instancia es un archivo .csv con todos estos atributos y su correspondiente geometría (en el formato .kml compatible con xyz, es decir, NO el formato WKT).

Sé que puedo abrir el archivo .dbf en Excel y obtener los atributos. También sé que puedo abrir el archivo de formas en QGIS y copiar los datos en Excel, lo que me da atributos y geometría WKT. ¿Hay alguna forma sencilla de convertir el .shp en .csv (que se puede abrir en Excel) con atributos y geometría compatible con Google Earth?

¡Gracias!

0 votos

Para cumplir con sus especificaciones, habría que construir una aplicación o un script. No creo que sea difícil, pero tampoco creo que no sea trivial. Si me tocara hacerlo, probablemente estimaría 1 semana a tiempo completo para tal trabajo.

3 votos

Gracias, esto es útil. Sin embargo, esto es una locura. Si el tamaño de mi archivo no fuera tan grande podría hacerlo automáticamente a través de Google. Como suelo hacerlo es importando un .shp en Google Earth y guardándolo como .kml. Luego subo el .kml a Google Fusion Tables (para tu información, Google Fusion Tables tiene un límite de carga de 100 mb) y lo exporto a .csv. Entonces puedo jugar con el .csv como quiera - cambiar los atributos, añadir nuevos polígonos para los que tengo las coordenadas, etc., etc. - Y luego vuelvo a cargar el .csv recién guardado en Google Fusion Tables, lo exporto a .kml y lo abro en Google Earth.

0 votos

Así que supongo que la pregunta es... ¿cómo puedo dividir un archivo .shp en dos partes? Esto me permitiría obtener los archivos .kml individuales por debajo del límite de 100 mb y puedo utilizar el método mencionado anteriormente para la conversión.

28voto

Lucas Puntos 128

Aquí hay un simple script que utiliza el OGR python fijaciones:

import ogr,csv,sys

shpfile=r'C:\Temp\test.shp' #sys.argv[1]
csvfile=r'C:\Temp\test.csv' #sys.argv[2]

#Open files
csvfile=open(csvfile,'wb')
ds=ogr.Open(shpfile)
lyr=ds.GetLayer()

#Get field names
dfn=lyr.GetLayerDefn()
nfields=dfn.GetFieldCount()
fields=[]
for i in range(nfields):
    fields.append(dfn.GetFieldDefn(i).GetName())
fields.append('kmlgeometry')
csvwriter = csv.DictWriter(csvfile, fields)
try:csvwriter.writeheader() #python 2.7+
except:csvfile.write(','.join(fields)+'\n')

# Write attributes and kml out to csv
for feat in lyr:
    attributes=feat.items()
    geom=feat.GetGeometryRef()
    attributes['kmlgeometry']=geom.ExportToKML()
    csvwriter.writerow(attributes)

#clean up
del csvwriter,lyr,ds
csvfile.close()

EDIT: y otro script para convertir de su CSV a KML

import ogr,csv,sys,os
ogr.UseExceptions()

csvfile=r'C:\temp\test.csv' #sys.argv[1]
kmlfile=r'C:\temp\test.kml' #sys.argv[2]

csvreader=csv.reader(open(csvfile,'rb'))
headers=csvreader.next()

ds = ogr.GetDriverByName('KML').CreateDataSource(kmlfile)
lyr = ds.CreateLayer(os.path.splitext(os.path.basename(kmlfile))[0])

for field in headers[:-1]: #skip kmlgeometry
    field_def = ogr.FieldDefn(field)
    print lyr.CreateField(field_def)

for rec in csvreader:
    feat = ogr.Feature(lyr.GetLayerDefn())
    for i,field in enumerate(headers[:-1]): #skip kmlgeometry
        feat.SetField(field, rec[i])
    feat.SetGeometry(ogr.CreateGeometryFromGML(rec[-1]))
    lyr.CreateFeature(feat)

del lyr,ds

0 votos

¿Puedes describir más sobre cómo usar esas fijaciones, ya que eso glosa información importante que tus lectores necesitarían saber?

9voto

Chris Upchurch Puntos 10484

Si convierte su shapefile a spatialite, debería poder hacer lo siguiente:

1) Experimentar con SQL para probar la salida:

ex.

SELECT col1, col2, col3, AsKml(geometry_column) FROM ficha

2) Una vez que esté satisfecho con el resultado, puede exportarlo a formato CSV:

https://stackoverflow.com/questions/5776660/export-from-sqlite-to-csv-using-shell-script

Para más información sobre Spatialite:

https://www.gaia-gis.it/fossil/libspatialite/index

Funciones SQL de Spatialite:

http://www.gaia-gis.it/gaia-sins/spatialite-sql-3.0.0.html

4voto

Si está trabajando en QGIS, puede generar instantáneamente un documento CSV haciendo clic con el botón derecho en la capa -> Guardar como -> CSV.

Si está trabajando con ArcMap, puede exportar el KML utilizando la herramienta Capa a KML (Ir a la opción de búsqueda en el programa). Por algunas razones genera un KMZ en lugar de un KML (al menos eso es lo que ocurrió en mi caso).

Para convertir un KMZ en KML:

  • Importa tu archivo KMZ a Google Earth y haz clic con el botón derecho del ratón en tu capa y guárdala como KML
  • Abra QGIS y arrastre y suelte el archivo KML - cargará automáticamente la capa (>QGIS 2.10 PISA)
  • Haga clic con el botón derecho en el archivo y guárdelo como CSV

Este procedimiento es más largo si se trabaja con ArcGIS pero en QGIS se puede hacer en poco tiempo. En cualquier caso, tendrá que instalar QGIS.

0 votos

He probado tu solución para QGIS y no funciona. Guardar como csv no conserva el componente espacial.

0 votos

QGIS le ofrece una opción para seleccionar WKT durante la exportación - esto exporta la geometría (componente espacial) en formato WKT junto con el resto de las características en el archivo shape.

0 votos

Desde QGIS 3.0 buscará la lista desplegable "geometría" en "Opciones de capa" en el diálogo de exportación, y seleccionará AS_XY , AS_XYZ o AS_WKT

2voto

AndrewJesaitis Puntos 6

En la línea de comandos puede utilizar ogr2ogr así:

ogr2ogr -f CSV output.csv input.shp -lco GEOMETRY=AS_XYZ

lco es para "opciones de creación de capas", creo. Otras opciones disponibles están documentadas aquí: http://www.gdal.org/drv_csv.html

0 votos

Leo, obtengo "Error 1 could'nt fetch requested layer 'GEOMETRY=AS_XYZ'. Puedo abrir el archivo en QGIS y ver claramente un vector que contiene los contornos de los países.

-1voto

Michael Gorsuch Puntos 1760

hay una herramienta en la 'Galería de herramientas de geoprocesamiento de modelos y script' que hace lo que buscas. puede exportar a excel o csv.

http://resources.arcgis.com/gallery/file/geoprocessing/details?entryID=95009B25-1422-2418-7FB5-B8638ECB2FA9

1 votos

He echado un vistazo, no exporta la geometría en ningún formato, y menos en KML.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X