Tengo un conjunto de funciones que estoy usando para leer los shapefiles y producir algunos geojson archivos para su análisis:
def read_shapefile(path, buffer = []):
# read the shapefile
reader = shapefile.Reader(path)
fields = reader.fields[1:]
field_names = [field[0] for field in fields]
#buffer = []
for sr in reader.shapeRecords():
for i in range(len(sr.record)):
if type(sr.record[i]) == bytes:
sr.record[i] = str(sr.record[i])
atr = dict(zip(field_names, sr.record))
geom = sr.shape.__geo_interface__
buffer.append(dict(type="Feature", \
geometry=geom, properties=atr))
return buffer
def write_geojson(buffer):
# write the GeoJSON file
#print(buffer)
print(type(buffer))
geojson = open("pyshp-demo.json", "w")
geojson.write(dumps({"type": "FeatureCollection",\
"features": buffer}, indent=2) + "\n")
geojson.close()
def read_shapes():
""" read all of the shapes in our shape directory and write them to geojson"""
files = get_file_list(SHAPE_DIRECTORY, [".shp"])
print(files)
buffer = []
for file in files:
buffer = read_shapefile(file, buffer)
write_geojson(buffer)
que funciona bien, pero a veces estoy recibiendo los archivos en X\Y en lugar de lat long. Veo Cómo convertir coordenadas proyectadas de lat/lon usando Python? cual es útil para la conversión de puntos pero ¿hay alguna manera dentro de read_shapefile fácilmente se podría aplicar la conversión a la totalidad de la geometría del objeto en vez de analizar a través de mi resultado final de la línea por línea?