¿Convertir GeoJSON a objetos Python? [cerrado]

24

Nuevo en el sitio, y en geoJSON, y en Python.

Mi objetivo es leer en un archivo con datos geoJSON, y usarlo para generar formas para usar en una aplicación que está usando secuencias de comandos de Python. Python tiene la capacidad de leerlo y manipularlo un poco. He encontrado algunos ejemplos, pero no están atravesando la jerarquía geoJSON correctamente.

Estoy buscando una biblioteca o instrucciones sobre cómo extraer los datos de geometría del archivo de datos geoJSON. En otras palabras, me gustaría poder decir "obtener la lista de características ..." - luego, para cada una de las características, me gustaría obtener la geometría, leer el tipo y obtener las coordenadas para ese elemento de geometría particular. Repita para cada uno de los elementos en la lista de características.

¿Alguna sugerencia?

Mike Weber
fuente

Respuestas:

37

Cuando carga un archivo GeoJSON usando la jsonbiblioteca, obtiene un archivo dictque contiene una entrada features, que contiene la lista de características. Cada característica a su vez consiste en una dict, que, entre otras cosas, contiene una entrada geometry. El geometryes un que dictcontiene las entradas typey coordinates. Para que pueda atravesar su archivo GeoJSON así:

import json

with open('test.json') as f:
    data = json.load(f)

for feature in data['features']:
    print feature['geometry']['type']
    print feature['geometry']['coordinates']
Jake
fuente
Excelente sugerencia Esto fue mucho más fácil de lo que estaba tratando de hacer. Necesitaba cambiar la carga a cargas, y numpy no es una biblioteca en mi instalación actual de python. Gracias por la rápida respuesta. Podré seguir adelante ahora.
Mike Weber
1
Numpy no es técnicamente necesario. La función ['geometría'] ['coordenadas'] (arriba) es solo una lista de Python.
sgillies
@sgillies: Buen punto, Sean. He eliminado el uso de numpypara evitar confusiones.
Jake
7

Mi lib PyGeoj se entiende específicamente como un lector y escritor de archivos geojson, con una API simple que convierte el contenido del archivo en objetos con atributos, por lo que no tiene que lidiar con los diccionarios directamente. También tiene algunos métodos convenientes, como calcular y agregar el bbox para toda la colección de características o solo para cada característica.

Entonces, por ejemplo, el siguiente código haría lo que el cartel pedía:

import pygeoj
testfile = pygeoj.load("test.geojson")
for feature in testfile:
    print feature.geometry.type
    print feature.geometry.coordinates

La biblioteca también puede importar y exportar objetos desde / hacia otras bibliotecas a través del _geo_interface_protocolo, entre otras cosas como se ve en la documentación en la página de Github del proyecto.

Karim Bahgat
fuente
tu biblioteca es genial, comencé a usarla hoy
ziggy
Si quisiera comenzar a hacer mapeo web con Python que analiza Geojson, ¿cuál sería el mejor software para usar?
ziggy
1
Para la aplicación web que trabaja con GeoJson, use la biblioteca de JavaScript Leaflet. Aquí hay un buen hilo de ejemplo: gis.stackexchange.com/questions/68489/…
Para comentarios