データ

OpenStreetMapとMTSを使用してスキー場マップを作成する

見出し

これはレイアウト確認用のダミーテキストです。

今年は今のところ雪の多い冬で、StravaOpenSkiMapTraveler Todayのようなツールを使って、アウトドア愛好家が旅行の計画やナビゲーションを行っています。これらのツールの多くは、Mapbox Streetsのベースマップ他の何百もの地図の一部である、無料でコミュニティによって構築されたオープンソースの世界地図であるOpenStreetMap(OSM)のトレイルデータを使用しています。 

Traveler Todayによるスキーコースと3D地形

OpenStreetMapデータのカスタム抽出により、Mapbox Streetsに含まれていないOpenStreetMapのデータレイヤーやメタデータを追加できます。抽出は、特定のデータが表示されるズームレベルの変更など、拡張されたスタイリングやデータ準備オプションが必要な場合にも役立ちます。

この記事では、OpenStreetMapのデータ抽出とMapboxを組み合わせてスキーコースアプリを作成しているビルダーの例を紹介します。Overpass TurboとMapbox Tiling Service(MTS)を使用して、同様のことを行うための注意点を提供します。

オープンデータスキーマップ

開発者のRussell Porter氏は、世界中のスキー場、コース、リフトを視覚化するためにOpenSkiMap.orgを構築しました。OpenSkiMapは、アウトドア愛好家が次の週末の冒険を計画するのに役立つだけでなく、開発者が独自のOpenStreetMap抽出パイプラインを採用してカスタムインタラクティブマップを作成するためのテンプレートコードも提供します。

OpenSkiMap

別のプロジェクトであるSnow Socialは、OpenSkiMapデータ上に構築されたiOSアプリで、スキーヤーがさまざまなリゾートで友人の位置をリアルタイムで確認し、統計を比較することができます。

Snow Social

OpenStreetMapデータをエクスポート

OpenStreetMapのデータは、ノード、ウェイ、およびリレーションで構成されています。フィーチャはタグでラベル付けされており、特定の種類のフィーチャをクエリするために使用します。OpenStreetMapデータモデルの詳細はこちら

Overpass Turboは、OpenStreetMapからデータをクエリおよびエクスポートするためのツールです。独自のクエリを作成する方法については、Overpass Wizardをこのチュートリアルで使用するか、以下のクエリ例を使用してください。クエリの仕組みを詳しく理解するには、Overpass Query Languageのドキュメントをお読みください。 

  1. Overpass Turboを開き、クエリを実行する領域に地図をパンします。
  2. 以下のクエリを入力して、地図のバウンディングボックス内のすべてのスキートレイル(またはスキー用語で「ピスト」)を返します。
  3. 「実行」をクリックして、結果を表示します。
  4. 「エクスポート」をクリックして、結果をGeoJSONとして保存します。
[out:json][timeout:25];

// gather results
(
    // query part for: “piste:type”
    way["piste:type"]({{bbox}});
    relation["piste:type"]({{bbox}});
);

// print results
out body;
>;
out skel qt;
Overpass Turboクエリの結果

MTSでデータをタイル化 

OpenStreetMapデータをGeoJSONとしてダウンロードしたら、MTSを使用してタイルセットに変換します。データをタイル化すると、データセットが大きくても、マップのシームレスなズームと高速な読み込みに役立ちます。MTSは、他のタイル化パイプラインと比較して、タイルセットの作成に必要なデータの前処理量を大幅に削減できます。MTSは、を介してフィーチャおよびタイルレベルでデータを操作するために、「レシピ」と呼ばれるカスタム構成ファイルを使用します。式には、フィルタリング、ランキング、ユニオン、データ型の変換、大規模なデータ最適化のためのプロパティの削除などの操作が含まれます。MTSを使用すると、タイルセットを生成し、データを1つのステップで変換できます。

以下は、OpenStreetMapのスキーコース抽出を変換およびタイル化するために使用するレシピです。

このレシピは、次の3つのことを行います。 

  1. タイルセットのズーム範囲を設定します。 
  2. 不要なフィーチャプロパティを削除します。 
  3. すべてのフィーチャにデフォルトの説明プロパティを設定します。
{
  "version": 1,
  "layers": {
    "ski_trails": {
      "source": "mapbox://tileset-source/username/osm_trails",
      "minzoom": 0,
      "maxzoom": 11,
      "features": {
        "attributes": {
          "allowed_output": [
            "name",
            "piste:difficulty",
            "piste:name",
            "trail_visibility",
            "piste:grooming",
            "piste:type",
            "piste:status"
          ],
          "set": {
            "description": [
              "coalesce",
              ["get", "description"],
              "ski trail"
            ]
          }
        }
      }
    }
  }
}

レシピのオプション

良いレシピは、ある程度のカスタマイズを可能にします。スキーコースのレシピに使用されている設定を見て、どのように、そしてなぜ調整したいのかを説明しましょう。

Maxzoom 

`minzoom``maxzoom`は、タイルの「ズーム範囲」を表します。オーバズームのおかげで、タイルセットのmaxzoomは、マップの最高のズームと一致する必要はありません。ただし、タイルセットを`maxzoom`を超えて表示すると、オーバズームに依存すると精度が低下する可能性があります。以下の例では、タイルセットで発生する精度の低下を確認できます。左側のズーム5はギザギザで簡略化されていますが、ズーム11には、スキーコースの輪郭を反映した滑らかな高解像度の線が含まれています。

ズーム5(左)とズーム11(右)

属性の削減

OpenStreetMapからダウンロードしたサンプル地域のスキーコースに関連付けられているフィーチャー属性は77以上ありますが、トレイルマップに必要なメタデータがすべてではありません。レシピオプション`allowed_output`を使用すると、出力タイルセットに保持するフィーチャープロパティを選択できます。 

以下の属性を選択しました。 

  • 「piste:difficulty」- 滑走の難易度 
  • 「piste:name」- トレイルの名前 
  • 「trail_visibility」- トレイルの可視性 
  • 「piste:grooming」- 整地状況 
  • 「piste:type」- スキー場の種類(ノルディック、ダウンヒルなど)
  • 「piste:status」- ゲレンデのステータス(オープン、クローズなど)

デフォルトのフィーチャープロパティの設定 

OpenStreetMapのタグは、必ずしも一貫性があるとは限りません。データはユーザーが生成するため、リゾートごと、トレイルごとにギャップがある場合があります。一部のフィーチャには`description`タグが付いている場合がありますが、そうでないものもあります。このレシピでは、データに存在しない場合、`description`プロパティのデフォルト値を「スキートレイル」に設定します。レシピオプション`set`は、フィーチャに新しい属性を設定し、Mapboxの式であるcoalesceは、フィーチャの説明が存在する場合はそれを取得し、プロパティが存在しない場合は、デフォルト値「スキートレイル」でプロパティを設定します。 

データをタイルセットとして公開します。 

公開すると、MTSはレシピの指示を適用して、データをタイルセットに変換し、Mapboxアカウントでホストします。そこで、サイズとプロパティの詳細を表示したり、データをプレビューしたりできます。 

MTSでタイルセットを公開するために利用できるさまざまなツールがあります。 

  • 構成を生成するためのクイックインターフェイスが必要な場合は、MTS Data Sync。 
  • 多用途なエンドポイントごとのアプローチが必要な場合は、Tilesets-cli。 
  • MTSを独自のスクリプトまたはパイプラインに統合するための言語に依存しない形式が必要な場合は、MTS APIエンドポイント。 

tilesets-cliを使用して、3つの短いコマンドでこのタイルセットを生成しました。 

  1. ソースデータをアップロードします。 

tilesets upload-source username osm_trails

  1. タイルセットを作成します。 

tilesets create username.osm_trails --recipe ~/dev/mts-blog-post/recipe.json --name "osm trail data" 

  1. タイルセットを公開します。

tilesets publish username.osm_trails

タイルセットが作成されると、それを使用してStudioのマップスタイルにレイヤーを追加したり、アプリケーションでベクタータイルのソースとして直接使用したりできます。 

以下は、スキーコースタイルセットが新しいレイヤーとして追加されたStudioスタイルエディターです。

OpenStreetMapデータレイヤーを使用して、スキーコースなどの独自の地図を作成し、#builtwithmapbox!を使用してTwitterで作成したものを共有しましょう。

これはレイアウト確認用のダミーテキストです。

これはレイアウト確認用のダミーテキストです。

関連記事