.
近年, オープンストリートマップ(OpenStreetMap: OSM)プロジェクトが人気を集めています. 多くの国では, 自由に利用できる地図データが無いからです. OSMプロジェクトの目的は, GPSデータ, 航空写真, そして編集者自身が持つ知識を利用して, 自由に編集可能な世界地図を作成することです. これをサポートするために, QGISではOSMデータと連携するプラグインを提供しています.
QGISのコアプラグインであるOSMプラグインは, OSMデータを扱うための基本機能を提供します. 具体的には, データの読み込み, インポート, 保存, ダウンロード, 編集, OSMサーバへのアップロードです. 実装においては, 既存のOSMエディタを参考にしました. 既存OSMエディタの機能を取り入れることで, 最も良い結果がもたらされると考えました.
次のセクションは, OSMプロジェクトの理念に関する概要紹介です.
いくつかの段落は, OpenStreetMapのWEBサイト http://www.openstreetmap.org からコピーしたものです.
オープンストリートマップは, 自由に編集可能な世界地図を作るプロジェクトです. 地図は, ポータブルGPSデバイス, 航空写真などの著作権フリーのソース, もしくは単純に編集者自身の地域に関する知識から作成されます. このプロジェクトがスタートしたのは, 一般的な地図のほとんどが利用にあたって法的もしくは技術的な制約があり, 創造的利用, 生産的利用や予想外の利用が制限されているためです. OSMの描画イメージとベクタデータセットはいずれも, Creative Commons Attribution ShareAlike 2.0 ライセンスのもとダウンロードできます.
Figure OpenStreetMap 1:
オープンストリートマップは, Wikipediaのようなサイトに触発されました. 地図の表示 (図_OpenStreetMap_1 参照) では「編集」タブが特徴的で, リビジョンの履歴が全て保持されています. 登録ユーザはGPSトラックログをアップロードでき, 編集ツールを使ってベクタデータの編集を行うことができます.
OSMデータの大本は, APIによってサーバに保存できるオブジェクトクラスです. サポートされるデータは, ノード, ウェイ, リレーション の3種類です.
ノード(node) は, 緯度/経度の座標です. 他の地物をつくるためのブロックであったり, 地物そのもの (Points Of Interest: POI) であったりします. タグは必要に応じて付けられます.
ウェイ(way) は, 2個以上のノードの組合わせで, 道路をはじめとした線形の地物を表現します. 同じノードを複数のウェイに用いることができます.
リレーション(relation) は, ロールと結びついたゼロまたはそれ以上のプリミティブのグループです. オブジェクト間の関係を定義する場合に指定します. 抽象オブジェクトを作る場合もあります.
一般的な地図にあるさまざまな地物(POI, 道路, 鉄道, バス停など) は, これらのプリミティブによって定義されます. 地図の地物はOSMコミュニティの中では周知のもので, キーと値を利用したタグとして保存されます. OSMは通常, XML形式で配布されます. XML ペイロードはOSMサーバーとの通信にも利用されています.
このセクションの最初のパートでは, OSMプリミティブがQGISのベクタレイヤでどのように表示されるかを説明します. 上記のように, OSMデータはノード, ウェイ, リレーションで構成されています. QGISでは, ポイントレイヤ, ラインレイヤ, ポリゴンレイヤの3種類の異なるレイヤタイプで表示されます. これらのレイヤはどれも必要ですし, さらに別のレイヤが加わることもありません.
ポイント(Point)レイヤ は, 単独のノードタイプの地物を表示します. ウェイに属していないノードはすべてポイントレイヤに属することになります.
ライン(Line)レイヤ は, 閉じていないウェイタイプのOSM地物を表示します. 閉じていないとは, ウェイの始点と終点が異なるノードであるということです.
ポリゴン(Polygon)レイヤ は, ラインレイヤに含まれないすべてのウェイを表示します.
上記の3つに加え、オープンストリートマップはもう1つのプリミティブを持っています。これをリレーションと呼びます。リレーションを示すためのベクタレイヤーは意図的には用意されていません。リレーションは任意の数のデータ・プリミティブを接続するために定義されます。ポイント、ライン、ポリゴンが地図上で特定された後、プラグインは、すべてのリレーションのリストを表示します。
これは、OSMのデータと標準的なQGISの編集ツールとの関係をデザインすることを試みていました。どのような地物タイプであるかにかかわらず、これらのツールは一度に1つのベクタレイヤーを編集します。これは、OSMデータがプラグインを通してQGISにロードされる場合、(理論的には)個別にこれらのツールを使って、ポイントレイヤー、ラインレイヤー、ポリゴンレイヤーを編集できることを意味します。
ラインレイヤーは、ウェイトノードという異なる2つのタイプのOSMフィーチャで構成されています。OSMフォーマットでは、ウェイはノードで構成されます。もしあなたがラインの形状を変えるためにラインレイヤーの編集を開始するなら、あなたのアクションはOSMのウェイだけでなく、その一部であるOSMのノードだけにも影響します。
QGIS標準の編集ツールは、OSMのプロバイダー、およびどのラインがどのように変更されたかを見分けることはできません。これは、どのラインが新しいジオメトリかということを見分けるだけで、OSMデータベースに対する変更を正しく伝えるには十分ではありません。ラインレイヤーはラインメンバーの識別子を知りません。同様の問題は、あなたがポリゴンレイヤーを編集しようとする際にも発生します。
この理由として、OSMプラグインはOSMデータを編集するための、それ自身のツールが必要です。それを使用すると、OSMレイヤは正しく変更されます。編集ツールのプラグインは、ポイント、ライン、ポリゴン、そしてリレーションの作図や削除、移動をするためのツールで構成されます。
ノート
OSMプラグインと標準の編集ツールをリンクするには、QGISコアコードの変更が必要であろう。
OpenStreetMapプラグインはQGIS内部のコアプラグインです。 load_core_plugin のセクションで記載されている通り、その ‘OpenStreetMap’ プラグインは 、プラグインマネージャで選択出来ます。
OSMプラグインを初めて開始する際(そしてデータが初めてロードされたあと)、 figure_OpenStreetMap_2 に示す通り、新しいドックウィンドウとともにいくつかのOSMプラグインアイコンがQGISツールバーメニューに表示されます。
Figure OpenStreetMap 2:
OSMフィーチャーウィジェットはOSMの地物を識別するのに役立ちます。誰によっていつ地物が変更されたかの情報だけでなく、フィーチャータイプや識別子の基礎情報を表示します。OSMフィーチャーウィジェットは、すべての編集ツールを(それの上の部分で)用意されています。これらのツールの詳細については、以下のセクションで見つけることができます。ウィジェットは最初は無効になっています。OSMデータのロードに成功した後、ウィジェットは有効になります。
このUndo/Redoウィジェットは編集行為を元に戻す処理と繰り返す処理を行うために使われます。これは典型的なUndoとRedoのボタンのみで構成されているのではなく、行った編集処理の簡潔な説明もリスト表示します。OSM Undo/Redo ウィジェットは初期設定では非表示ですが、OSMフィーチャーウィジェットボタンを使うことで表示できます。
OSMプラグインの開始後にされるべき最初のアクションとしては、OSMファイルからデータを開くことです。OSMデータはShapeファイルとしてインポートされるか、OpenStreetMapサーバーから直接ダウンロードします。ここでは、前者の方法に焦点を当てます。
ファイルからデータをロードするには ファイルからOSMをロード アイコンを使用します。そのようなボタンがない場合、QGISの設定でOpenStreetMapツールバーが無効にされているのかもしれません。それを再度有効にするには 設定 ‣ ツールバー ‣ OpenStreetMap を実行します。
Figure OpenStreetMap 3:
その要素の目的について説明します。
OpenStreetMap file to load: をクリックし、ロードしたい file:.osm ファイルを選択します。
Add columns for tags: このオプションはOSMとQGISデータの接続を決定します。OSMデータの書く要素はいくつかのタグ(キーと値の組み合わせ)を持っていて、地物の属性を定義しています。QGISベクターレイヤーの各地物もまた、その属性(キーと値)を持っています。このオプションで、QGISの地物の詳細情報をいつ表示し、OSMオブジェクトのどの属性を表示するかを定義することができます。
Replace current data: このオプションのチェックは、新しいデータと、ユーザが作業した現状のデータを置き換えるかを意味します。現状データのレイヤーは削除され、新しいデータがロードされます。最初にOSMデータをロードする際は置き換え対象がないため、このオプションはアクティブではありません。
カスタムレンダラを使用: このオプションはマップをどのくらい詳細にするかを決定するのに使用されます。OSMスタイルのマップ表示には3つあります。すべてのディティールを表示して何かを編集するためにOSMデータを低レベルで表示する場合は、’Small scale’ を使用します。’Medium scale’ または ‘Large scale’ を使用しません。QGIS 2.2 は動的にレンダラースタイルを変更することをサポートしていません。
データを読み込むには [OK] をクリックします。初めてOSMファイルがロードされる場合は、プラグインは初めてデータベースを解析するに違いありません。これには数秒か数分かかると思いますが、それはロードするデータ量に依ります。
OSMデータをロードした後、適切なツールを使ってマップの地物を特定することができます。OSMフィーチャーウィジェットの左上にある Identify feature ボタンを使用します。このツールを使うと、すべてのマップオブジェクトを簡単に調べることができます。マウスカーソルをオブジェクト上に配置すると、OSMフィーチャーウィジェットで直接、そのオブジェクトすべての情報を表示できます。マップ上には動的なラバーバンドが表示されるため、ユーザは、どの地物が現在識別されているかを決定することができます。
ウィジェットの Properties タブでは、地物のタグすべてが含まれています。 Relation タブでは特定の地物を接続するリレーションのリストが表示されます。
そのプロパティとリレーションを読み込むためにしばらくの間機能を停止するには、同時にマウスカーソルを移動して、地物上で左クリックします。特定プロセスは、次に左クリックするまでの間停止します。
左クリックが行われた時、その地点に複数のちぶつがある場合がある。これは特に、交差点をクリックした 場合やマップを十分にズームしないで行った場合に起こる。この状況では1つの地物のみが識別される(ラバーバンドが付けられる)。しかし、プラグインはそれらすべてを記憶している。その後(一時停止モード)は、右クリックで、識別された地物を循環閲覧できる。
このコンテキスト内の ‘Basic data’ はリレーションのないOSMの地物を意味します-ノードとウェイです。リレーションの編集操作について調べたい場合は、このセクションをスキップして次に進んでください。
基礎データの編集はOSMプラグインの重要な部分です。プロパティや、いかなる基礎の地物の位置や形状を変更することができます。地物の削除または追加ができます。ノードとウェイに対するすべての変更内容は、Undo/Redoによって記憶され、すべての変更はOpenStreetMapサーバにすぐにアップロードされます。
OSM地物のプロパティ/タグの変更はテーブルの地物タグで直接行うことができます。基本的な地物のタグテーブルはOSMフィーチャーウィジェットで見つけることができます。最初に地物を特定することを忘れないでください。
Figure OpenStreetMap 4:
タグ値を変更したい場合は、該当するカラム’値’の行をダブルクリックするか、新しい値を選択します。タグを削除したい場合は、該当する行をクリックし、テーブル下の 選択したタグを削除 ボタンを使用します。
新しいタグを追加するには、 ‘<next tag value>’ と書かれたテーブルの最終行にキーと値をタイプします。存在しているタグのペアのキーを編集できないことに注意してください。便利なことに、すべての既存のタグキーと典型的な値のコンボボックスがあります。
ポイントを作図するには、OSMフィーチャーウィジェット上にある 点の作成 ボタンを使用します。いくつかのポイントを作図するには、そのボタンをクリックし、マップ上のクリックを開始します。いくつかの地図の地物にマウスカーソルを配置すると、その地物が直ちにマーク/識別されます。ラインまたはポリゴンがマークされ地図上をクリックすると、そのラインまたはポリゴンに、それらの新規メンバーとして、直接的に新しいポイントが作成されます。このような場合、OSMプラグインは、次のメッセージを表示します:
Figure OpenStreetMap 5:
ラインまたはポリゴンをヒットするためにユーザーを助ける仕組みはスナップと呼ばれ、デフォルトで有効となってます。ラインの非常に近く(ただしライン上ではない)に点を作成したい場合は、最初に Ctrl キーを押すことでスナップを無効にしなければいけません。
ラインを作図するには、OSMフィーチャーウィジェットの 線の作成 ボタンを使用します。ラインを作成するためそのボタンをクリックし、マップ上の左クリックを開始します。それぞれの左クリックは新しいラインの頂点として記憶されています。初めて右クリックするとラインの作図が終了します。新しいラインは直ちにマップ上に表示されます。
ノート
メンバーより少ないラインは作成できません。そのような操作をした場合、無視されます。
スナップは地図上のすべての頂点-ポイントベクターレイヤ由来のポイントとすべてのラインおよびポリゴンのメンバーに対して実行されます。スナップは、 Ctrl キーを押すことで無効にすることができます。
ポリゴンを作成するには 、OSMフィーチャーウィジェット上の Create polygon ボタンを使用します。ポリゴンを作成するためにこのボタンをクリックし、マップ上で左クリックを開始します。それぞれの左クリックが、新しいポリゴンのメンバーとなる頂点として記憶されます。初めて右クリックするとポリゴンの作図が終了します。新しいポリゴンは直ちにマップ上に表示されます。3つ未満のメンバーで構成されたポリゴンを作成することはできません。そのような場合、操作が無視されます。スナップはマップ上の頂点すべて-点(ポイントベクターレイヤ由来)やすべてのラインおよびラインのメンバーに対して行われます。スナップは Ctrl キーを押すことで無効にできます。
もし(種類に関係なく)地物を異動したい場合は、OSM地物ウィジェットメニューの Move feature ボタンを使用してください。それからマップ(あなたがそれを繰り返し行うとき、地物が動的に特定される)を表示することができ、移動したい地物をクリックすることができます。適切な地物が特定されるまで、右クリックを繰り返してください。選択が完了しカーソルを移動すると、何を移動するかを変更することはできません。移動を確認するには、マウスの左ボタンをクリックしてください。移動をキャンセルするには、別のマウスボタンをクリックします。
別の地物に接続している地物を移動する場合、これらの接続が損傷することはありません。他の地物は、移動した地物の新しい位置に適応するのみです。
スナップはこの操作においてもサポートされています。これは以下を意味します。
単体のポイント(ライン/ポリゴンの一部でないもの)を移動する場合、マップのセグメントと頂点すべてに対するスナップが行われる。
ライン/ポリゴンのメンバーであるポイントを移動する場合、ポイントの親の頂点は除くすべてのマップセグメントと頂点に対してスナップが行われる。
ライン/ポリゴンを移動する場合、すべてのマップの頂点に対してスナップが行われます。OSMプラグインは、移動したライン/ポリゴンの持つカーソルに近接した3つの頂点に対してのみスナップを試みる点にご注意ください。そうでないと動作が非常に遅くなります。操作中に Ctrl キーを押すことでスナップを無効にすることができます。
地物を削除したい場合は、まずそれを特定する必要があります。特定した地物を削除するには OSM地物ウィジェットの この地物の削除 ボタンを使用します。ライン/ポリゴンを削除すると、それ自身のメンバーであって、他のライン/ポリゴンに属していないポイントもすべて削除されます。
ライン/ポリゴンのメンバーであるポイントを削除すると、ポイントが削除され、親であるライン/ポリゴンの形状は変更されます。新しい親の形状は、古いものよりも頂点が少なくなっています。
もし親地物が3つの頂点を持つポリゴンであれば、その新しい形状は、2つの頂点しか持ちません。2つの頂点しか持たないポリゴンは存在し得ないため前述のとおり、その地物タイプは自動的にラインに変更されます。
もし親地物が2つの頂点を持つラインであれば、新しい形状は1つの頂点しか持ちません。1つのみの頂点で構成されたラインは存在し得ないため、地物タイプが自動的にポイントに変更されます。
OSMリレーションが存在するおかげで、グループにOSMの地物を結合し、それらに共通のプロパティを付与することができます。そのような方法で、地域の境界(ウェイやポイントのグループとして)、バスルート等など、私たちは任意のマップオブジェクトをモデル化することができます。リレーションの各メンバーはそれ特有のロールを持ちます。我々のプラグインでは、OSMリレーションに取ってかなり良いサポートがあります。それらをどのように分析し、作成し、更新または削除するか見てみましょう。
もしリレーションの属性を参照したいなら、メンバーの1つを特定しましょう。それから、OSM地物ウィジェットの リレーション タブを表示します。 タブの上部で、特定された地物を含むすべてのリレーションがリスト表示されます。分析したい1つを選択すると、その情報が下に表示されます。1つ目のテーブルは’リレーションタグ’と呼ばれ、選択したリレーションの属性を見つけることができます。1つのメンバーをクリックすると、プラグインは、地図上にラバーバンドを作成します。
リレーションの作成方法は2つあります:
どちらの場合も、ダイアログが表示されます。第二のケースでは、現在特定された地物が自動的に最初のリレーションメンバーと見なされ、ダイアログでは少々事前入力がなされます。リレーションを作成する際、そのタイプを選択してください。定義済のリレーションの種類または独自のタイプを記載することができます。それからリレーションタグを埋めたりメンバーを選択します。
すでにリレーションのタイプを選択した場合は、 タグの作成 ボタンを使用してください。それにより、リレーションのタイプにとって典型的なタグを生成できます。それから、キーに値を入力することが期待されます。リレーションメンバーの選択はメンバー識別子やタイプ、ロールを書くことか、 地図上でメンバーの選択 ツールを使用してマップ場をクリックすることにより可能です。
タイプ、タグ、メンバーを選択したら、ダイアログの内容を確定できるようになります。その場合、プラグインは新しいリレーションを作成します。
OpenStreetMapサーバからデータをダウンロードするには OSMデータをダウンロード ボタンをクリックします。そのようなボタンがない場合、QGISの設定でOpenStreetMapツールバーが無効にされているのかもしれません。それを再度有効にするには 設定 ‣ ツールバー ‣ OpenStreetMap を実行します。ボタンをクリックしたあとダイアログが表示され、次の機能が提供されます:
Figure OpenStreetMap 6:
範囲: 緯度と経度度の間隔からデータをダウンロードする領域を指定します。OpenStreetMapのサーバー上でダウンロード可能なデータ量の制限があるため、間隔を広げすぎてはいけません。領域の仕様におけるより詳細な情報は、右側の ヘルプ ボタンをクリックした後に表示されます。
ダウンロード先:ここでは、データが格納されるファイルのパスを記述することが期待されています。あなたのディスクの構造を思い出せない場合は、パニックにならないでください。参照ボタン があなたを助けるでしょう。
ダウンロード後に自動的にデータを開く: ダウンロードプロセス後にデータのロード処理を行うかどうかを決定します。データをロードしたくない場合は、 Load OSM from file ボタンを使用して、後からロードします。
カレントデータの置き換え: このオプションは ダウンロード後自動的にデータを開く にチェックが入っている場合のみ有効です。 このオプションにチェックを入れるとダウンロードデータが、現在作業しているデータと置き換えられます。現在のデータのレイヤは削除され、新しいものがロードされます。QGISを起動して初めてOSMデータをダウンロードする場合、置き換え対象がないため、このオプションは非アクティブです。
カスタムレンダラを使用: このオプションはマップをどのくらい詳細にするかを決定するのに使用されます。OSMスタイルのマップ表示には3つあります。すべてのディティールを表示して何かを編集するためにOSMデータを低レベルで表示する場合は、’Small scale’ を使用します。’Medium scale’ または ‘Large scale’ を使用しません。QGIS 2.2 は動的にレンダラースタイルを変更することをサポートしていません。
ダウンロード処理を開始するには [Download] ボタンをクリックします。
プログレスダイアログが、すでにダウンロードされたデータがどれくらいあるかを継続的に知らせます。ダウンロードプロセス中にエラーが発生した場合、ダイアログが原因を知らせます。アクションが正常に終了すると、プログレスダイアログとダウンロードダイアログの両方が閉じられます。
アップロードが常に現在のOSMデータ上で行われることに注意してください。 OSMアップロードダイアログを開く前に、あなたが本当にOSMデータと正しいアクティブレイヤを持っていることを確認してください。
現在のデータをOSMサーバーにアップロードするには OSMデータをアップロード アイコンを使用します。そのようなボタンがない場合、QGISの設定でOpenStreetMapツールバーが無効にされているのかもしれません。それを再度有効にするには 設定 ‣ ツールバー ‣ OpenStreetMap を実行します。 [アップロード] ボタンをクリックしたあと新しいダイアログが表示されます。
Figure OpenStreetMap 7:
正しいデータをアップロードする場合は、ダイアログの上部でチェックすることができます。現在のデータベースの短い名前があります。テーブルでは、どのくらいの変更がアップロードされるかの情報を見つけます。統計情報は、各地物の種類ごとに個別に表示されます。
変更へのコメント ボックスではあなたのアップロード操作について簡潔な情報を書くことができます。 あなたが行ったデータの変更が何かを簡潔に書くか、ボックスを空にしましょう。サーバがあなたを認証するため’OSM アカウント’配列を埋めます。 http://www.openstreetmap.org でアカウントを作成するちょうどいい機会です。最終的に [アップロード] を使用してアップロード操作を開始します。
現在の地図データをXMLファイルとして保存するには OSMデータを保存 アイコンを使用します。そのようなボタンがない場合、QGISの設定でOpenStreetMapツールバーが無効にされているのかもしれません。それを再度有効にするには 設定 ‣ ツールバー ‣ OpenStreetMap を実行します。ボタンをクリックしたあと新しいダイアログが表示されます。
Figure OpenStreetMap 8:
XMLファイルとファイル自体に保存したい地物を選択します。 [OK] ボタンを使用して操作を開始します。そのプロセスで、カレントのマップ領域で表現されたOSMデータをXMLファイルとして作成します。出力ファイルのOSMバージョンは0.6です。OSMデータの要素(<node>, <way>, <relation>)は、その変更セットとuidの情報を含みません。この情報はまだ必須のものではなく、OSM XMLバージョン0.6のDTDを参照してください。出力ファイルではOSMの要素が順序付けされていません。
現在の範囲外のデータも保存されていることに注意してください。それらのほんの一部が現在の範囲に表示されている場合でも、それら全体のポリゴンや線が出力ファイルに保存されます。保存されたライン/ポリゴンとそのメンバーであるノードすべても同様に保存されます。
OSMでないベクタレイヤからOSMデータにインポートする場合、次の説明に従ってください。レイヤの中の現在のOSMデータのひとつを選択し、 レイヤからデータをインポート ボタンを押します。そのようなボタンがない場合、QGISの設定でOpenStreetMapツールバーが無効にされているのかもしれません。それを再度有効にするには 設定 ‣ ツールバー ‣ OpenStreetMap を実行します。
そのボタンをクリック後に、以下のメッセージが表示されるでしょう:
Figure OpenStreetMap 9:
この場合ベクタレイヤが読み込まれていません。インポートはすでに読み込まれているレイヤから行われるので、インポートしたいデータからベクタレイヤを読み込んでください。レイヤを開いた後であれば、インポートが正常に行われます(現在のOSMレイヤを再度選択しておくことを忘れないようにしてください):
Figure OpenStreetMap 10:
OSMデータのインポート処理を開始するにはサブミットダイアログを使用します。あなたが何かをインポートしたいかわからない場合、それを拒否します。