View in English

  • メニューを開く メニューを閉じる
  • Apple Developer
検索
検索を終了
  • Apple Developer
  • ニュース
  • 見つける
  • デザイン
  • 開発
  • 配信
  • サポート
  • アカウント
次の内容に検索結果を絞り込む

クイックリンク

5 クイックリンク

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • トピック
  • すべてのビデオ
  • 利用方法

その他のビデオ

ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。

  • 概要
  • トランスクリプト
  • AppとWebサイトにインドアマップを追加する

    インドアマッププログラムにより、大規模な公共スペースまたはプライベートスペースを持つ組織は、ユーザーが建物内部で正確な位置情報を得られるようにすることができるため、驚くようなインドアマップを提供することができます。このセッションでは、インドアマップを有効にするワークフローの全体的なプロセスを説明し、MapKitとMapKit JSで強力なAPIとジオメトリ標準を使用してインドアマップをすばやくAppやWebサイトに統合するための技術的な詳細情報を紹介します。

    リソース

    • Apple Developer: MapKit JS
    • Displaying an Indoor Map
    • Displaying Indoor Maps with MapKit JS
    • MapKit
      • HDビデオ
      • SDビデオ
    • プレゼンテーションスライド(PDF)

    関連ビデオ

    WWDC19

    • インドアマッププログラムの紹介
    • MapKitとMapKit JSの新機能
  • このビデオを検索

    (音楽)

    (拍手) エンジニアのステファンです マップの開発をしています アプリケーションとWebサイトに インドアマップを追加する方法です

    iOS 11に インドアマップが導入されました 空港やモールなどの施設の 詳細なフロアマップです マップ上で屋内を閲覧し 経路を検索することもできます

    GPSと同様 またはそれ以上の性能で 施設内の各フロアの 位置情報を取得できます

    今から インドアポジショニングにより アプリケーションに インドアマップを表示します

    まずは Indoor Mapping Data Formatについて 次にインドアマッププログラムで 利用できるツールをご紹介します 最後にアプリケーションとWebでの 表示方法を説明します

    では 始めます IMDFつまり Indoor Mapping Data Formatは インドアスペースを モデリングする仕様書です 詳しく話す前に インドアマップとは 何か見ていきましょう

    インドアマップはいくつかの レイヤーで構成され 各レイヤーはフィーチャを含みます インドアマップを分解します

    基盤は建物のフットプリントです

    そして各フロアに

    部屋や通路などの設備があります

    出入り口があり

    モールで見かける売店もあります

    店舗にはその事業名が表示されており

    エレベーターやトイレなどを示す アイコンもあります

    更に複数の設備を囲む境界線も 設定されています

    これらがインドアマップを構成する レイヤーです しかし この説明だけでは不十分です 正確なマップを作成し表示するには コンテンツの正しい設定が必要です そこでIMDFが活躍します

    IMDFによりインドアスペースを モデリングできます GeoJSON形式の2Dフォーマットで 作成するだけでなく アプリケーションへの適用も簡単です

    IMDFアーカイブは JSONファイルです

    JSON形式のマニフェストファイルと GeoJSONファイルで構成され 各ファイルには IMDFのフィーチャが含まれます

    IMDFのフィーチャは GeoJSONのフィーチャです typeやgeometry propertiesなどがあります IMDFにはUUIDという 表示用のIDが必要です また 屋内のコンセプトを表現する― フィーチャタイプの フィールドも不可欠です

    では 主なフィーチャを説明します

    levelでは フロアの物理的な空間を設定します これには parking level 1やP1など 名前や建物の特徴などの 情報を表示できます ordinalでは建物の中での 階数を設定します

    1階のordinalは0となっています 地下の階数はマイナス値にし 上階には 当然プラス値を設定します

    levelにはunitを置きます unitには部屋 通路 階段やエレベーターを書きます

    openingは出入り口を示します ここではアクセシビリティや 入退室管理などの propertiesも定義できます

    kioskには インフォメーションや自動販売機など サービスや商品を 提供する設備を書きます

    occupantでは 事業の情報を追加できます 会社名 電話番号 そして営業時間などの情報です geometryはないですが 関連するanchorを介し 表示先や住所を取得できます

    anchorは 情報を表示する位置を設定します 住所も追加できます anchorはIMDFにおいて重要です occupantなどのフィーチャは anchorによって 表示位置にリンクされるのです

    次はamenityです ここでは固定された設備や 証明写真機やATMなどの サービスを設定します

    sectionでは モール内のフードコートなど その空間の特定のテーマを定義します 物理的な区切りが あるわけではありません

    buildingは建物の構造を定義しており 名前や住所の設定もできます geometryはありませんが 範囲の指定には footprintという フィーチャを用います

    footprintには3種類あります

    area footprintでは 2階以上の最大範囲を ground footprintでは 1階の最大範囲を示します subterranean footprintが示すのは 地下の最大範囲です

    これらがIMDFの主なフィーチャです IMDFのおかげで 正確かつ柔軟にインドアスペースの データを表示できます より詳しい説明については register.apple.comに アクセスください

    Appleは位置情報取得のため 多くのプロバイダと協働しています では 任意の施設に IMDFアーカイブを作成しましょう

    後半のデモで作成するアーカイブは 実際にお使いいただけます

    ではインドアポジショニングを どう行うか ここでインドアマッププログラムの 登場です

    このプログラムに参加すると データを可視化し検証するツールを 利用できます 屋内の位置情報を示す機能や 青いドットも追加できます マップに該当の施設を 表示させることもできます

    プログラムへの登録は register.Apple.com/indoorで行えます サインアップは簡単です 名前や住所など ご自身や所属機関の基本情報を 入力するだけで完了します

    Appleに承認されれば 地理空間情報のツールで IMDFアーカイブを作成できます

    作成したらIMDF Sandboxを使い 検証を行います

    IMDFデータを可視化し 検証できるツールです 問題の多くは簡単に報告できます 修復が困難な場合は Mapmakerに戻し 修正してください

    エラーがないと確認できたら 更に精密な検証テストを行います 問題なければ次のステップです 調査アプリケーションを使い インドアポジショニングを有効化します

    このアプリケーションはiOSにおいて ポジショニングを行います RFのフィンガープリントの収集により 位置を確定します 固定のWi-Fiアクセスポイントから 発生するRFパターンは 自分がいる位置によって変わるため 測位が可能なのです

    測位が終わると データはServerにアップされ 処理されます 問題なければ 施設内での検索が可能になります 調査アプリケーションで 位置情報の正確性も検証できます 測位を行うのはとても簡単です ガイドラインに従えば 正しい結果が得られます

    ここまでIMDFアーカイブを作り それを検証し インドアポジショニングを 有効化しました 次は それをアプリケーションや Webで表示します まずアプリケーションでの表示方法を ミセレッシュが説明します (拍手) どうも

    マップチームのエンジニアの ミセレッシュです では IMDFデータを使って アプリケーションに 表示する方法を説明します

    Dinoseumという恐竜博物館のビジター用 アプリケーションを開発しましょう そこには展示物やショップの地図が 表示されます タップで詳細が表示される ラベルやアイコンが さまざまなエリアにあります

    右上には階数を切り替える バーがあります

    また インドアポジショニングによって ユーザの現在地が表示されます では 実際に作成します インドアマップは 3つの手順で表示できます

    まずプロジェクトに IMDFファイルを追加し 各フィーチャの モデルクラスを作成します

    次にIMDFファイルをデコードし モデルクラスの インスタンスを生成します これらを関連付けるグラフを作ります この施設は建物です 建物には フットプリントと階層があり 各階に設備や 出入り口があるといった具合です

    最後にデコードしたオブジェクトから geometryをリトリーブし レンダリングすれば完成です

    では入力するコードの説明です まずfeatureという 抽象クラスを作成します

    各featureには 固有のidentifierが必要です

    また propertiesも必須です

    MKShapeオブジェクトの配列として geometryも設定可能です

    これを基底とし フィーチャクラスの 具体的な実装を書いていきます

    IMDFファイルのデコードについては 新しいMK GeoJSON Decoderを 使って行います 詳細は あとで説明します

    次はMapKitフレームワークの addOverlayとaddAnnotation APIを使い ポリゴン 線 そして点のgeometryを書きます

    マップに追加する各オーバーレイには MKMapViewDelegateメソッドや MapView rendererForOverlayを適用 各アノテーションには MapViewと viewFor annotationを適用します このメソッドでインドアマップの外観を カスタマイズできます

    では博物館のマップを作りましょう

    まずは 基本的なマップから これはMKMapView上の Single View Applicationです

    最初にプロジェクトに IMDFファイルを追加します

    アプリケーション内で処理するか Serverからダウンロードするか 選ぶことができます

    ファイルを開きます これはunitのファイルです 中身をデコードして レンダリングしましょう

    まずはfeatureという 抽象クラスを書きます

    これにはidentifierとproperties そしてgeometryが含まれます

    イニシャライザがないので追加します

    初期化はproperties以外は簡単です MK GeoJSONのフィーチャでは プロパティは不透明データ型となり 使用前にデコードする必要があります

    JSONデコーダークラスを使い 隣接したオブジェクトに変換します

    ここでunitに 詳細な実装を書いていきます

    基底クラスにfeatureを設定しましょう

    unitフィーチャタイプを説明するため propertiesを定義します

    これは各設備や各レベルIDを 区別するものです

    ちなみにレベルIDとは 階数のことではありません

    unitには occupantとamenityを追加します

    これでunitフィーチャタイプの 作業は完了です unitと同じくデコードするため venueやlevelなど 他のフィーチャの モデルクラスも作成します これらはすでに プロジェクトに追加済みです サンプルコードを ダウンロードしてご確認ください

    次の手順は IMDFデータのデコードです

    これをIMDFデコーダーという クラスで行います

    MK GeoJSON Decoderの プロパティタイプを追加 これはGeoJSONデータを デコードするための MapKitフレームワークの 新しいクラスです

    デコードにはdecodeFeaturesという メソッドを使います

    まずディスクからIMDFファイルの コンテンツを読み込みます 次にMK GeoJSON Decoderの インスタンスを使い データにデコードします

    モデルクラスを初期化する MK GeoJSONの フィーチャオブジェクトに関しては あとで説明します

    次はIMDFアーカイブや IMDFコレクションをデコードする decodeというメソッドです

    デコードしたいオブジェクトの インスタンスを作成しましょう 先ほどのdecodeFeaturesを使い デコードしたい フィーチャタイプに渡します

    一連のフィーチャを 正しく簡単にレンダリングするため 各フィーチャを 関連付ける必要があります 例えばvenueにはlevelがあるので ひも付けましょう

    先にordinalで levelをグループ化します

    levelにはunitやopeningがあるので これも関連付けます

    unitとopeningの場合は レベルIDによって

    グループ化を行います すべてのlevelで これを繰り返し unitを見つけてはlevelと関連付けます

    openingも同様です

    unitにはamenityと occupantがあるので 関連付けていきます

    amenityにも同様の工程を繰り返し unitとひも付けします 同様に occupantも関連付けます

    ただoccupantには例外が1つあります occupantは事業名を示しますが 固有のジオメトリはありません 代わりにanchorやオブジェクトを使い 表示点を取得します

    これでIMDFアーカイブをデコードする メソッドが書けました レンダリングしたい すべてのフィーチャタイプとひも付けし デコードし構成された オブジェクトが完成しました 3つ目の手順は IMDFデータのレンダリングです

    これは Indoor Map View Controllerで行います

    先ほどのdecodeメソッドを使いましょう

    そしてvenueに戻り オーバーレイとアノテーションに フィーチャを追加します まずshowFeaturesForOrdinalという メソッドを適用します

    ordinalとは建物の全フロアにおける 階数を示すものです

    このメソッドでは 前の階に属するオーバーレイと アノテーションをすべて削除します

    そして現在の階に表示する フィーチャのサブセットを集約し

    そこからジオメトリをリトリーブ オーバーレイとアノテーションとして マップに加えます

    このメソッドを viewDidLoadからコールします

    1階となる初めの階は 1として設定します

    MKMapViewDelegateメソッドの MapViewとrendererForOverlayでは MKOverlayRendererの インスタンスを生成できます 各タイプのGeoJSONジオメトリは 新しいMKMultiPolygonRendererと MKMultiPolylineRendererを含みます そうしてポリゴンと線を 効果的にレンダリングできます

    アプリケーションを実行して マップを確認しましょう

    博物館の基本的なマップが出ました

    拡大しましょう

    このマップでは 設備が ポリゴンで表示されていますね

    トイレなどのアメニティーは アノテーションで表示され

    レストランなどのテナントも アノテーションです

    博物館は複数階あるので 階数表示バーを

    追加します

    UIを重ねたビューを用いたバーを Storyboardに作成済みなので 表示させます

    階数表示バーの 更新メッセージ受信のため LevelPickerDelegateを実装 このselectedLevelDidChange メソッドは ユーザが階数をタップする度に コールされます

    次は階数変更のイベントです

    階数を切り替える際 選択した階のフィーチャで マップを更新するための showFeaturesForOrdinalを使います

    階数表示は機能するでしょうか

    階数表示バーの項目をタップすると 博物館の各階のマップが見られます

    (拍手) 少し中断し おさらいをしましょう

    まず IMDFフィーチャタイプに モデルクラスを作成 次にMK GeoJSON Decoderで IMDFデータをデコードし 各フィーチャタイプと関連付けました

    最後にMapView上でaddOverlayと addAnnotation APIを使って レンダリングしました このマップは スタイリングが抜けていて アノテーションが単純すぎます

    しかし2つの手順で より使いやすく改善できます

    まずエレメントに スタイルを適用します スタイリングは 見かけや使用感の向上には必須です チームや会社のブランドに合う カラーを使いましょう

    最後にユーザの現在地を 表示させれば より使いやすくなります

    iOSでインドアマップを 活用するのに必要なのは インドアマッププログラムへの参加と インドア調査アプリケーションです 恐竜博物館の調査は完了したので マップに現在地や 青いドットを追加します

    スタイリングに必要な コードを説明します

    StylableFeatureというプロトコルには

    プロパティと2つのメソッドがあります それらすべてに ジオメトリが必須です

    configure overayRendererメソッドで スタイルをオーバーレイに適用します

    アノテーションへの適用には configure annotationViewメソッドを 用います

    Xcodeに切り替えて実行します

    スタイルを適用するには このように― インドアマップ用に色を追加した Asset Catalogを活用します

    色を付けるため styles.swiftというファイルを開きます StylableFeatureプロトコルは 定義済みです

    では アメニティーに スタイリングを適用していきます まずStylableFeatureを適用する アメニティークラスの 拡張が必要です

    アメニティーには 点のジオメトリがあるので configure annotationViewメソッドを 実施します annotationViewの背景色は Asset Catalogの既定色です アノテーションにおける既定色の 表示優先度を下げてみます

    同様にunitクラスを拡張し 設備にスタイリングを適用します ここでは各設備の種類ごとに 違う色を付けていきます まず列挙型の StylableCategoryを定義します

    ここに列挙した値は スタイルしたいカテゴリ名です

    設備はポリゴン・ジオメトリなので configure overayRendererメソッドを 実装します

    このメソッドでは unitのカテゴリごとに 塗りつぶしの色を適用します

    ではメインのView Controllerクラスに 切り替え MapViewの rendererForOverlayを指定します 各ポリゴンに対し 同じ線や色は使いません configure overayRendererをコールして フィーチャに特化した スタイリングを行います

    アノテーションについても同様です configure annotationViewメソッドを コールし

    フィーチャ専用の スタイリングを適応します

    occupantには シンプルな点やラベルを amenityには灰色の点を設定します それにはまず custom annotation viewを実装し プロジェクトに追加します ここでconfigure annotationViewを コールし フィーチャ専用のスタイルを設定します

    では マップが変わったか確認します

    前のマップより 格段によくなっています 設備ごとに色分けされていますし アメニティーも灰色の点で 表示されています

    レストランなどのテナントは ドットやラベルで示されています

    ただ 違和感もあります

    マップ上のこのエリアには 通路がありますが 通路と周囲の設備の色が同じです 修正できるでしょうか

    修正するには style.swiftにアクセスし 通路カテゴリを追加します

    そしてconfigure overayRenderer メソッドで設定を行います

    まずは色の設定です WalkwayFillという色を 通路に設定しています これはAsset Catalogにあります 見てみましょう 通路用に白があります

    では 確認しましょう

    更によくなりましたね 通路に違う色を適用するだけで マップがぐっと見やすくなりました

    もう少し改善しましょう アメニティーには 灰色の点より アイコンの方がよさそうです

    今回は恐竜のアイコンを 使ってみましょう

    作成済みのアイコンがあるので マップに追加します

    styles.swiftファイルに戻り ドットが設定されている アメニティーの箇所を修正します

    分かりやすいように アメニティーのカテゴリと同じ名前を アイコンにも付けます この特定の名前に応じた Asset Catalogを探します アイコンがあれば annotation viewの 画像プロパティに設定し なければ このまま灰色の点で表示します

    実際に見てみましょう

    マップに見やすいアイコンが 表示されました トイレ エスカレーターや エレベーターなどの設備や 展示物の場所が 分かりやすく表示されています

    (拍手) 最後に この博物館では 屋内の位置情報が検索可能なので 利用しましょう

    ユーザの現在地を追加します まずMapViewにアクセスし ユーザの位置表示を有効化します

    View Controllerで

    CLlocationManagerという プロパティを追加します

    アプリケーションを開いている時に

    このプロパティを使い 位置情報サービスをリクエストします

    位置が更新されるとMKMapViewDelegate メソッドにコールバックされ MapViewがユーザの位置を更新します

    位置を更新してみましょう

    まずはユーザが 施設内にいるか確認します 屋内にいる場合 更新は不要です

    外にいる場合も更新は不要です ただ屋内の場合はMKUserLocationの CLLocationプロパティを使い ユーザに調整してもらいます

    CLLocationは ユーザの経度や緯度だけでなく フロア情報も提供します これは施設が検証済みで ユーザが屋内にいる場合に限ります

    ではCLLocationオブジェクトからの フロア情報を使いましょう showFeaturesForOrdinalで マップを更新し ユーザの位置を表示します もう一度 起動します

    許可をタップすると

    ユーザの現在地が表示されます (拍手) ユーザが別の階に移動すると マップも現在の階数に更新されます このデモは以上です 次はステファンが Webアプリケーションでの インドアマップの表示方法を説明します (拍手)

    MapKit JSを使えば Web上で同様の インドアマップを利用できます これからMapKit JSを使って マップをレンダリングし 主要なブラウザに同じマップを 実装する方法を説明します

    キーとなるメソッドはimportGeoJSONで 2つのパラメータがあります 1つは変換用のGeoJSONフィーチャ 2つ目は項目の作成方法を カスタマイズする― GeoJSON Delegateオブジェクトです 基本的には2つのdelegateがあります geoJSONDidErrorはエラーに対応し geoJSONDidCompleteは 作成した項目を表示します

    その後showItemsメソッドに 項目を追加し表示させます addItemsは使用しませんが これはマップの中央化を 行うものではありません

    オーバーレイをスタイルするには styleForOverlayを使います 新しいオーバーレイはパラメータとなり スタイルオブジェクトが リターンされます 新規でも作成できます スタイルプロパティを介して オーバーレイに関連する― 既定値を使った カスタマイズもできます

    itemForPointでも点のレンダリングを カスタマイズできます itemForPointはパラメータとして 点フィーチャを調整し 項目を返します ではマーカーアノテーションを返します タイトルや色などのオプションや―

    優先度も設定可能です アノテーションが多いと 縮小した際 重複します アノテーションのクラスタリングや 表示優先度には いろいろな対策があります MapView JSではdisplayPriorityを使い 非表示にする アノテーションを決めます

    importGeoJSONにより 博物館の マップに必要な物はそろいました

    シンプルなMapViewから始めます こちらはWebのアセットを提供し MapKit JS認証を生成する HTTP Serverです ブラウザでマップを書くには IMDFファイルをロードし 各フィーチャに MapViewの項目を作成します 先ほど説明した importGeoJSONメソッドのおかげで 簡単に作成することができます

    iOSのデモでは フィーチャのグラフを作成しました ここではお好みでフィーチャを フィルタする方法を試します フィーチャのロードや管理 フィルタに必要な― IMDFアーカイブという クラスを作成します

    static loadメソッドは 必要なファイルをロードし フィーチャを配列し コンストラクタに渡します featureByIdとfeaturesByTypeの 2つのオブジェクトを作成します

    このメソッドをコールし

    フィーチャをロード importGeoJSONで MapKitの項目を作成します

    それでは

    新しく作ったマップの項目で showItemsをコールします

    実行しましょう

    想定どおり たくさんのジオメトリがあります MapView JSですべてのフィーチャを レンダリングしたからです そこで必要なフィーチャのみ残し フロアごとに特徴付けます ordinalから特定のタイプの フィーチャのみを返す― IMDFアーカイブクラスで いくつかメソッドを試しましょう まずはlevelです

    正しいordinalのlevelのみ残します unitにも同じく設定します

    レベルIDも同様です そしてunit内のamenityや openingそしてanchorにも実装します

    少し中断します IMDFファイルは単純なので GeoJSONを使って簡単に作業できます 複雑なパーシングなどは不要で フィーチャに応じた propertiesの想定のみ必要です ではレンダリングロジックです

    既定のordinalに対し 項目を作成するCreateItemを使います

    ではフィーチャを取得します まずはlevelからです

    各levelに対してunitを取得

    次はamenityとopeningです

    現時点で必要なフィーチャは これで全部です

    ではこれらを表示していきます createItemsForOrdinalを使い ordinal 1を2階に設定し これをマップに適用します

    では 書いていきます

    2階の構造が 格段に見やすくなりましたね では階数表示を追加します HTML形式で階数表示バーを実装済みです この施設のフロア名で実装しました 詳細については あとで資料をご確認ください 階数表示バーは createItemsForOrdinal機能を使い 作成します

    インポート済みのスクリプトを インスタンス化します

    ordinal 1を選べば 2階が表示されます

    もう一度

    階数の切り替えができました

    次はスタイリングを追加します unitの見た目がどれも一緒で 出入り口も分かりません どの設備にも ドアがないかのような 印象を与えそうです GeoJSON Delegateオブジェクトでは styleForOverlayから ポリゴンや 線のスタイルをカスタマイズできます では出入り口を白で書いてみます

    openingのフィーチャを選択し strokeColorを白に設定するだけです

    アプリケーションの時と同様に カテゴリに応じて色を付けましょう まずunitStyleという オブジェクトを作成します

    このオブジェクトには 表示したい設備の 種類別の スタイルプロパティが含まれます カテゴリにスタイルがない場合は 既定値を使う必要があります

    では対象のunitカテゴリに スタイルを設定します

    その次は オブジェクトを使って unitのオーバーレイに スタイルを適用します

    ここまでcategoryやfillOpacity strokeColorに 適切なスタイルを設定してきました fillColorはスタイルがなければ 既定値を設定します

    このようにIMDFマップは レンダリングが容易です スタイリングにはフィーチャと カテゴリの組み合わせが重要です もちろん他のプロパティも使えます では確認しましょう

    よくなりましたね 通路も表示され 施設へのアクセスが見やすいです

    マップ上の赤いピンは一体何でしょうか これはアメニティーで 点のジオメトリがあります importGeoJSONは マーカーアノテーションで 点ジオメトリをレンダリングします

    アプリケーションの時と 同じアイコンを使って実装します まずMapView JS 画像アノテーションを 使います 先ほどと同様 itemForPointを実装し importGeoJSONの既定動作を 置き換えます やってみましょう

    propertiesから名前をインサートするか なければカテゴリに戻ります その名前をアノテーションの タイトルに使います

    アノテーションをクリックすると タイトルが表示されます 全アメニティーの優先度を 低く設定すると 展示物など重要な箇所に 高い優先度を付けられます

    最後に アイコンにURLがある場合 画像アノテーションを作成します ない場合は ドットアノテーションを作成します すでに作成したものを インポート済みなので 今回はそれを使います まず最初に カテゴリに応じて 正しいURLをアイコンに割り当てます iconURLというURLに対する オブジェクトを作りましょう

    かなり分かりやすいですね このオブジェクトを使い

    アイコンに対するURLを取得します

    見て分かるとおり これらのエントリーは とても具体的です これはアメニティーではなく ティラノサウルスや竜脚類など 展示エリアのアイコンです なのでこのアイコンは 別の扱いにします

    次に名前を付けます 決まったらアイコンを設定します フィーチャIDでもかまいません

    すべての展示物に対して 高い優先度を設定し ティラノサウルスは最優先にします

    最後に 展示物の名前に― マッチするような Unicode文字を追加します 恐竜やティラノサウルスには 実際に固有の文字を加えました それではリロードして レンダリングされているか 見てみましょう

    Dinoseumのマップらしくなりました (拍手) 見てください マップを縮小すると 表示されるアノテーションは 恐竜の展示物だけになりました

    それでは 次に ユーザがマップをどこまで 縮小できるか制限を決めます cameraZoomRangeという MapView JSの新規設定を使って

    制限を行います 確認しましょう

    制限できたでしょうか

    これ以上 縮小できません (拍手) 最後に説明するフィーチャタイプは occupantです occupantには表示点がないので 扱うのが少し難しいですが 表示点を持つ anchorとリンクしています なので関連付けたanchorを使い マップ上に MapKitアノテーションを表示できます

    特定のordinalで すべてのoccupantを集約できる― IMDFアーカイブクラスで メソッドを実装しましょう

    こうしてoccupantとanchorを含む 一連のオブジェクトを返します では これを使って

    occupantをレンダリングします

    見てのとおり アメニティーの場合と似ていますが 1つ例外があります インポートGeoJSONメソッドには ジオメトリを持つanchorを指定します アノテーションのタイトルには 事業名を使います

    また category-annotationを使い 特定のクラスを設定します これでoccupantのカテゴリに 特定のスタイルを付加できます CSSファイルに スタイルを保存済みです

    最後に もう一度リロードします

    これでレストランが 見えるようになりました (拍手) まとめに入ります

    まずロードしたGeoJSONファイルから フィーチャを抽出し タイプ別に体系化しました そして特定のフィーチャを取得する メソッドをいくつか実装

    次に表示する階数を選べる 階数表示バーを設定し unitやopeningには カスタムスタイルを加えました

    最後にamenityとoccupantに アイコンとカスタムアノテーションを 作成しました

    MapView JSを使い iOSと同様のマップを構築しました 恐竜博物館のWebに載せる マップができました 主要なブラウザでも 同様のエクスペリエンスが得られます それについては ミセレッシュがご説明します

    (拍手)

    どうも

    デモはいかがでしたか? 最後にインドアマップ作成の 一番のコツをお伝えします

    スタイリングの際は お使いのアプリケーションと 同じ使用感にすべきです チームや企業ブランドに合う 色やアイコンを使ってください 他のアプリケーションの 再現はやめましょう オーバレイやアイコンは ご自身のアプリケーションに合わせます

    他と差別化できるスタイルを 選択しましょう カテゴリごとに色を分けることで 一目でスポットが分かります

    分かりやすいアイコンにしましょう 見た目の主張だけでなく 目的に合う適切なものを 使ってください

    ズームの度合いによって 項目を調整します 項目が多いと マップが見づらいためです 空間や建物など大きな項目を表示し 拡大するにつれ 詳細な情報を徐々に追加しましょう

    周辺エリアの情報も付加します 周辺の情報があることで 自分の位置を特定しやすくなります

    最後は重要です 目的地に着いた時の エクスペリエンス強化のため 屋内の位置情報を 有効化してください

    詳細は 他のセッションをご覧ください What's New in MapKit and MapKit JSや Introducing the Apple Maps Programなどです ご質問がありましたら ラボまでお越しください 本日はありがとうございました 参考になれば幸いです (拍手)

Developer Footer

  • ビデオ
  • WWDC19
  • AppとWebサイトにインドアマップを追加する
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード(英語)
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    Apple Developerアプリを入手する
    Copyright © 2025 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン