¿Convertir shapefile a CSV incluyendo atributos Y geometría?

19

Tengo un shapefile con 60k + entradas, todos los cuales son polígonos con los atributos correspondientes (totales de superficie, nombres de propietarios de tierras, número de identificación fiscal, etc.). Lo que en última instancia necesito es un archivo CSV con todos estos atributos y su geometría correspondiente (en el formato xyz compatible con KML, es decir, NO en el formato WKT).

Sé que puedo abrir el archivo .dbf en Excel y obtener los atributos. También sé que puedo abrir el shapefile en QGIS y copiar los datos en Excel, lo que me permite obtener los atributos y la geometría WKT.

¿Existe una forma sencilla de convertir el shapefile a CSV (que se pueda abrir en Excel) con atributo y geometría amigable con Google Earth?

    
pregunta Rikk 23.01.2012 - 20:53

6 respuestas

27

Aquí hay un script simple que utiliza los enlaces OGR python :

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
    
respondido por el Luke 24.01.2012 - 00:49
8

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

1) Experimente con SQL para probar la salida:

ej.

SELECCIONE col1, col2, col3, AsKml (geometry_column) Desde la pestaña

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

enlace

Para más información sobre Spatialite:

enlace

Funciones de Spatialite SQL:

enlace

    
respondido por el Brent Edwards 23.01.2012 - 22:02
3

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

Si está trabajando con ArcMap, puede exportar el KML usando la herramienta Layer to KML (Vaya a la opción Buscar en el programa). Por algunas razones, genera un KMZ en lugar de un KML (al menos eso es lo que sucedió en mi caso).

Para convertir un KMZ a KML:

  • Importe su archivo KMZ a Google Earth y haga clic derecho en su capa y guárdelo como KML
  • Abra QGIS y arrastre y suelte el archivo KML: cargará automáticamente la capa (> QGIS 2.10 PISA)
  • Haz clic derecho en el archivo y guárdalo como CSV

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

    
respondido por el Menelaos Kotsollaris 10.10.2015 - 22:45
1

En la línea de comandos puedes usar ogr2ogr , como esto:

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

lco es para "opciones de creación de capa", creo. Otras opciones disponibles se documentan aquí: enlace

    
respondido por el leo 01.07.2018 - 11:17
-1

hay una herramienta en el 'Modelo de geoprocesamiento y Galería de herramientas de script' que hace lo que estás buscando. Se puede exportar a Excel o CSV.

enlace

    
respondido por el gotchula 24.01.2012 - 17:59
-1

simplemente vaya a la herramienta de conversión en el mapa de arco. Luego ve a la mesa para sobresalir. se hará un archivo de excel. convertir ese documento de Excel a un archivo .csv

    
respondido por el ruqaia shabir 17.11.2017 - 05:48

Lea otras preguntas en las etiquetas