2017-08-19 21 views
0

デスクトップにOpenStreetMapファイルをダウンロードしました。私はOSMファイルをjupyterノートブックで使用しました。PythonのOSMファイルからデータを抽出して可視化する方法

マイコード:

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 ... 

私は上のすべてのtagsすなわち <'node', 'id', 'name', ...>との内容を見てみたいと思います。

elemタグを使ってみましたが、何も印刷しません。

誰が誰がノードのようなタグの内容を取得するには、把握するために私を助けることができる、方法など

答えて

2

あなたはPyOsmium(高速かつ柔軟なC++ライブラリを.osmファイルからすべてのデータを抽出することができますOpenStreetMapのデータを操作するため)、その後、Pandasとそれを扱う:

コード:

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

出力:

enter image description here

関連する問題