私は、OpenStreetMap(OSM)XMLファイルを解析し、階層的な方法で町や都市のデータベースを構築するスクリプトを作成したいと考えています。私はアメリカでこのように見えるかもしれません階層を持つように結果のデータセットをしたい:OSM XML惑星ファイルから階層都市/州/国データを抽出するにはどうすればよいですか?
USA -> California -> San Francisco County -> San Francisco
そしておそらく英国では、このように:
United Kingdom -> England -> Middlesex -> London -> Soho
出力が記述するJSONドキュメントになります上記の例のような構造を持つOSMファイル内のすべての都市の階層。
私はPythonと "imposm"パーサライブラリを使用していますが、問題なくファイルをロードして解析できます。私の問題は、OSMのデータがどのように構造化されているかを理解していないことです。OSMのデータ内のノード間の親子関係を知る方法はわかりません。たとえば、「ソーホー」のノードを見つけたら、「City of Westminster」、「Greater London」、「Middlesex」、「England」のノードに戻すにはどうすればいいですか?
私はいくつかのノードが、この情報の一部を与えるかもしれない「is_in」タグを持っていることを知っているが、
- A)これは矛盾していると
- B)が、自由形式のテキストであると思われますOSMノードへのリンクではありません(つまり、is_in: "City of Westminster"は私にWestminsterノードへのリンクを与えません)。
これらのノードを階層的にリンクする方法についてご意見がありましたらお知らせください。
ご回答ありがとうございます。それは有用な情報であり、私は必要なデータを得るためにOSMデータの構造に十分頼ることができないようです。私はgeonames.orgのような場所から自分のデータを得る方が良いと思う。 – luke
彼は興味のあるポイントを囲んでいる境界を持つすべてのノードを検索できませんか?例えばもしあなたが通りを持っていれば、通りの緯度と経度の位置を囲んでいるので、都市、州、地区、国などのノードを見つける必要がありますか? – Tom