Saltar al contenido

Generando GeoJSON con Python

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *