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
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.
1 votos
He respondido a la pregunta tal y como se hizo más abajo, pero acabo de ver tu comentario. ¿Por qué necesita csv en absoluto? ¿Por qué no hacer la edición de atributos, añadir nuevos polígonos, etc. en el SIG (usted dijo que tenía QGIS) y luego exportar que a su KML final?
0 votos
@Rikk - en respuesta a la pregunta en su comentario: Una forma sencilla de dividir un shapefile sería hacer una selección espacial en parte de tu shapefile y luego hacer clic con el botón derecho en tu capa y seleccionar "Exportar". A continuación, podría simplemente exportar las características seleccionadas a un nuevo shapefile más pequeño. Esto no es en absoluto científico, pero es sencillo. También puede seleccionar por algunos atributos si desea un enfoque más organizado.
0 votos
Por favor, no te olvides de "¿Qué debo hacer cuando alguien responde a mi pregunta?"