2017-08-19 1 views
0

Ich habe eine OpenStreetMap-Datei auf meinem Desktop heruntergeladen, und ich habe meine OSM-Datei im Jupyter-Notebook verwendet.So extrahieren und visualisieren Sie Daten aus der OSM-Datei in Python

Mein Code:

import xml.etree.cElementTree as ET 
osm_file = "ahmedabad_india.osm" 

for event, elem in ET.iterparse(osm_file, events=("start",)): 
    print(elem) 
    # prints the Element 'osm' at 0x03A7DC08> 
    #<Element 'bounds' at 0x03A7DDA0> 
    #<Element 'node' at 0x03A7DE90> 
    #<Element 'tag' at 0x03A7DF08> and so on ... 

Ich mag würde, den Inhalt aller tags heißt <'node', 'id', 'name', ...> und so weiter zu sehen.

Ich versuchte mit elem Tag, aber es druckt nichts.

Kann mir jemand helfen, herauszufinden, die den Inhalt von Tags wie Knoten zu erhalten, Wege usw.

Antwort

2

Sie können alle Daten extrahieren aus einer .osm Datei über PyOsmium (eine schnelle und flexible C++ Bibliothek für mit OpenStreetMap-Daten arbeiten) und dann mit Pandas Griff:

Code:

import osmium as osm 
import pandas as pd 

class OSMHandler(osm.SimpleHandler): 
    def __init__(self): 
     osm.SimpleHandler.__init__(self) 
     self.osm_data = [] 

    def tag_inventory(self, elem, elem_type): 
     for tag in elem.tags: 
      self.osm_data.append([elem_type, 
            elem.id, 
            elem.version, 
            elem.visible, 
            pd.Timestamp(elem.timestamp), 
            elem.uid, 
            elem.user, 
            elem.changeset, 
            len(elem.tags), 
            tag.k, 
            tag.v]) 

    def node(self, n): 
     self.tag_inventory(n, "node") 

    def way(self, w): 
     self.tag_inventory(w, "way") 

    def relation(self, r): 
     self.tag_inventory(r, "relation") 


osmhandler = OSMHandler() 
# scan the input file and fills the handler list accordingly 
osmhandler.apply_file("muenchen.osm") 

# transform the list into a pandas DataFrame 
data_colnames = ['type', 'id', 'version', 'visible', 'ts', 'uid', 
       'user', 'chgset', 'ntags', 'tagkey', 'tagvalue'] 
df_osm = pd.DataFrame(osmhandler.osm_data, columns=data_colnames) 
df_osm = tag_genome.sort_values(by=['type', 'id', 'ts']) 

Ausgang:

enter image description here

Verwandte Themen