JA:インポート/ソフトウェア

From OpenStreetMap Wiki
Jump to navigation Jump to search

ソースデータの形式に応じて、OSM形式への変換のための何らかのソフトウェアが必要となります。

手順

以下はインポート手順の一例です。実際のインポートが同じ手順で行われるとは限りません。

  1. ソースデータを確認し、ソースデータ内で使用されている属性(attributes)から OSM 用のタグへのマッピングを決める。
  2. ソースデータから単一または複数の OSM XML ファイルへの変換用に、新たにソフトウェアを書くか、または既存のソフトウェアを修正する。node、way 及び relation の ID には一意の負数を用いる。
  3. OSM XML ファイルを JOSM にロードし、データをチェックする。正しいデータが得られるまで、ステップ1~3を繰り返す。
  4. JOSM または bulk uploader を使用して、データをアップロードする。


負数の ID

OSM データベースにある全てのオブジェクトには一意の ID が割り当てられています。ID は、オブジェクトが生成される際、OSM データベースによって与えられます。オブジェクトの ID は、例えば、way とそこに含まれる node を関連付けるために使用されます。

アップロード用の OSM XML ファイルを作成する際は、通常の ID をオブジェクトに割り当てることができません。通常の ID を割り当てる権限があなたにはなく、中央サーバーもインポート予定のオブジェクトに関して何も知らないからです。とはいえ、オブジェクトには何らかの ID を割り当てなければなりません。そうしなければ、node や way 及び relation の間に適切な関係を設定することができないからです。

この問題を解決するため、負数の ID を使用するという方法が一般的には用いられています。アップロード時には、オブジェクトが一つずつデータベース上に生成されていきます。このときにデータベースから適切な ID が割り当てられ、以後は、あなたが割り当てた負数の ID の代わりに正規の ID を用いることができます。

この方法は、例えば JOSM で用いられています。

データのインポート

まとまったデータを一括して OSM に追加する方法は幾つかあり、それぞれに長所と短所がありますが、極めて重要なことが一つあります ― 本番用のAPIを使ってテストしてはいけません。独自の手順/手法/スクリプトのテストに利用できる openstreetmap の開発用サーバー(development instances)がありますので、そちらを利用してください。

一括インポートを行う様々な方法を以下に挙げます。

JOSM を使う

JOSM は一括インポートの手段の中で、最も古く一般的なものの一つです。まずは適切なプログラムを使ってインポート・データを JOSM ファイル形式に変換します。そして JOSM にファイルをロードした後、アップロード・ボタンを押します。

この方法はまずまず信頼性が高く、これによってアップロード前のデータを見たり操作したりできます。短所はJOSM にデータをロードしなければならないために、数メガバイトに達するようなデータを扱うには実用的でないということです。また大量のデータをアップロードする際に、数千個のオブジェクトを処理してスタックしてしまうという報告もあり、大規模なアップロードには向いていないかもしれません。

なお、JOSM は対話式プログラムなので、サーバー上で実行することはできません。

直接 API を操作する

この方法はどちらかというと一般的ではありませんが、Almien coastlines がこれを採用しています。シェイプファイルのレコードが次々と処理され、直ちにオブジェクトが生成されます。この方式の主なデメリットは、アップロードまたは生成されたデータからレコードが作られることなくオンザフライで処理が行われるため、処理を中断した場合にどこまで進捗したのか通常は把握できないということです。実際の差分データもオンザフライで生成されるので曖昧になってしまいます。

一般に、この方法は推奨されません。

Osmosis を使う

Osmosis は OSM データの一般的な操作を行うプログラムです。特徴的なのは「差分ファイル(change file)」 をデータベースに適用する機能を持っていることです。このプログラムは osmChange ファイル形式に対応しています。

ただし、差分ファイルは API にではなくデータベースに直接適用することしかできず、今のところオブジェクト作成用のプレースホルダー(負数ID)やデータベース・オブジェクトの参照制約といった機能が欠けています。しかしながら、変更されるオブジェクトの ID が既に判っていて、かつローカルのデータベースに適用する場合には最強のツールとなります。

これらのツールは多数の長期動作が確認されています。 (訳者注:誤訳かもしれません。― 原文:These tools show a lot of long-term promise.)

(FIXME: Explain why this is a promising way to way to do large uploads, seeing as it cannot do uploads at all. この方法が大規模アップロードに適している理由を説明してください。現状では全くアップロードできないように読めてしまいます。)

bulk_upload.pl を使う

Perl スクリプトの bulk_upload.plANDTIGER のインポート、及び幾つかの coastline のアップロードに使用されました。基本的にこのスクリプトは changefile を受け取り、OSM データベースに適用するという方式を採用しています。bulk_upload.pl は現在の API に対応していません(差分データを生成するように誰かが書き換えない限り)。

bulk_upload.py を使う

bulk_upload.py は bulk_upload.pl の置き換えを意図して書かれたスクリプトであり、API v0.6 をサポートします(bulk_upload.pl は非対応)。bulk_upload.pl と同様に処理の進捗を賢く記録します。また、差分データを分割するので一回のアップロードのサイズは小さくなります。ただし、osmChange 形式をサポートしていないようなので、編集に用いることはできません。

upload.py を使う

upload.py は OpenStreetMap に差分データをアップロードするためのもう一つの python スクリプトであり、API v0.6 に対応しています。このツールの特徴はネットワーク・エラーやその他の問題が発生した場合の高い復旧能力にあり、これによって、バックアップなどの手段を講じなくてもインポートの失敗から原状に回復させることができます。

OSM サーバー・ネットワーク内において

時々、非常に小さいレイテンシと高い帯域幅をもって、巨大なデータソース(TIGER のように)を OSM のメインサーバーにアップロードするクライアントがあります。

(FIXME: Are there any such clients actually available? Or is this just a pipedream? Perhaps one could use the dev server?)

関連情報