ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
AppとWebサイトにインドアマップを追加する
インドアマッププログラムにより、大規模な公共スペースまたはプライベートスペースを持つ組織は、ユーザーが建物内部で正確な位置情報を得られるようにすることができるため、驚くようなインドアマップを提供することができます。このセッションでは、インドアマップを有効にするワークフローの全体的なプロセスを説明し、MapKitとMapKit JSで強力なAPIとジオメトリ標準を使用してインドアマップをすばやくAppやWebサイトに統合するための技術的な詳細情報を紹介します。
リソース
- Apple Developer: MapKit JS
- Displaying an Indoor Map
- Displaying Indoor Maps with MapKit JS
- MapKit
- プレゼンテーションスライド(PDF)
関連ビデオ
WWDC19
-
ダウンロード
(音楽)
(拍手) エンジニアのステファンです マップの開発をしています アプリケーションと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などです ご質問がありましたら ラボまでお越しください 本日はありがとうございました 参考になれば幸いです (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。