Revisamos cada enunciado en nuestra página web con la meta de mostrarte siempre información más veraz y actualizada.
Solución:
Si tienes un GDAL/OGR entorno de desarrollo (encabezados, bibliotecas), podría simplificar radicalmente su código utilizando Fiona. Para leer características de un archivo de forma, agregue nuevas attributesy escríbalos como GeoJSON es solo un puñado de líneas:
import fiona
import json
features = []
crs = None
with fiona.collection("docs/data/test_uk.shp", "r") as source:
for feat in source:
feat['properties'].update(...) # with your attributes
features.append(feat)
crs = " ".join("+%s=%s" % (k,v) for k,v in source.crs.items())
my_layer =
"type": "FeatureCollection",
"features": features,
"crs":
"type": "link",
"properties": "href": "my_layer.crs", "type": "proj4"
with open("my_layer.json", "w") as f:
f.write(json.dumps(my_layer))
with open("my_layer.crs", "w") as f:
f.write(crs)
Felizmente, OGR puede hacer esto por usted, ya que ambos ogr.Feature
y ogr.Geometry
los objetos tienen ExportToJson()
métodos. En tu código;
fe.ExportToJson()
Y dado que los objetos de geojson FeatureCollection son simplemente diccionarios con un type
de FeatureCollection
y un features
objeto que contiene una lista de objetos Feature.
feature_collection = "type": "FeatureCollection",
"features": []
feature_collection["features"].append(fe.ExportToJson())
El objeto CRS en una colección de características puede ser de dos tipos:
- Un CRS con nombre (por ejemplo, un OGC URN o un código EPSG)
- Un objeto de enlace con un URI y un tipo como “proj4”
Dependiendo de su formato de datos, es bastante probable que el nombre sea difícil de obtener de OGR. En cambio, si escribimos la proyección en un archivo en el disco al que podemos hacer referencia con el URI. Podemos tomar la proyección del objeto de capa (que tiene varias funciones de exportación)
spatial_reference = dl.GetSpatialRef()
with open("data.crs", "wb") as f:
f.write(spatial_reference.ExportToProj4())
feature_collection["crs"] = "type": "link",
"properties":
"href": "data.crs",
"type": "proj4"
Este es el más simple y fácil en Fiona. puede configurar el SRS para la salida GeoJSON.
import fiona
from fiona.crs import from_epsg
source= fiona.open('shp/second_shp.shp', 'r', encoding = 'utf-8')
with fiona.open('tool_shp_geojson/geojson_fiona.json','w', driver ="GeoJSON", schema=source.schema, encoding = 'utf-8', crs=fiona.crs.from_epsg(4326)) as geojson:
geojson.write(feat)
Te invitamos a añadir valor a nuestro contenido tributando tu experiencia en las crónicas.