Conversione di oggetti GeoJSON in Python? [chiuso]


24

Nuovo sul sito, su geoJSON e su Python.

Il mio obiettivo è leggere in un file con dati geoJSON e usarlo per generare forme da utilizzare in un'applicazione che utilizza script Python. Python ha la capacità di leggerlo e di manipolarlo. Ho trovato alcuni esempi, ma non stanno attraversando correttamente la gerarchia di geoJSON.

Sto cercando una libreria o istruzioni su come estrarre i dati della geometria dal file di dati geoJSON. In altre parole, vorrei poter dire "ottieni l'elenco delle funzionalità ..." - quindi, per ciascuna delle funzionalità, vorrei ottenere la geometria, leggere il tipo e ottenere le coordinate per quel particolare elemento di geometria. Ripetere l'operazione per ciascuno degli elementi nell'elenco delle funzioni.

Eventuali suggerimenti?

Risposte:


37

Quando carichi un file GeoJSON usando la jsonlibreria, ottieni un file dictche contiene una voce features, che contiene l'elenco delle funzionalità. Ogni caratteristica a sua volta è costituita da un dict, che, tra le altre cose, contiene una voce geometry. La geometryè una dictcontenente le voci typee coordinates. Quindi puoi attraversare il tuo file GeoJSON in questo modo:

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']

Suggerimento eccellente. Questo è stato molto più facile di quello che stavo cercando di fare. Ho dovuto cambiare carico in carico e numpy non è una libreria nella mia attuale installazione di python. Grazie per la risposta rapida. Sarò in grado di andare avanti ora.
Mike Weber,

1
Numpy non è tecnicamente necessario. feature ['geometry'] ['coordinate'] (sopra) è solo un elenco Python.
sgillies,

@sgillies: buon punto, Sean. Ho rimosso l'uso di numpyper evitare confusione.
Jake,

7

La mia lib PyGeoj è specificamente intesa come lettore e scrittore di file geojson, con una semplice API che trasforma il contenuto del file in oggetti con attributi, quindi non devi occuparti direttamente dei dizionari. Ha anche alcuni metodi di praticità, come calcolare e aggiungere la bbox per l'intera raccolta di funzionalità o solo per ciascuna funzionalità.

Ad esempio, il seguente codice farebbe ciò che il poster ha richiesto:

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

La libreria può anche importare ed esportare oggetti da / verso altre librerie tramite il _geo_interface_protocollo, tra le altre cose come si vede nella documentazione sulla pagina Github del progetto.


la tua libreria è fantastica, ho appena iniziato a usarla oggi
ziggy,

se volessi iniziare a fare web mapping con python analizzando geojson, quale sarebbe il miglior software da usare?
ziggy,

1
Per l'app Web che funziona con GeoJson, utilizzare la libreria javascript di Leaflet. Ecco un buon esempio di discussione: gis.stackexchange.com/questions/68489/…
Per commento

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.