ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
MapKitとMapKit JSの新機能
MapKitとMapKit JSを使用すると、フル機能のAppleマップをAppやWebサイトで利用することができます。このセッションでは、ベースマップ表示の詳細な制御、きめ細かい検索機能、地点および住所情報の検索結果のフィルタリング、カスタムオーバーレイおよび注釈の標準データフォーマットの統合といった最新機能について説明します。
リソース
- Apple Developer: MapKit JS
- Displaying Indoor Maps with MapKit JS
- MapKit
- Maps Web Snapshots
- Optimizing Map Views with Filtering and Camera Constraints
- プレゼンテーションスライド(PDF)
関連ビデオ
WWDC19
-
ダウンロード
(音楽)
(拍手) こんにちは お集まり頂きありがとうございます MapKitチームのアレキサンダーです
Apple Mapsは世界を旅する大勢の人を 毎日 助けています 大勢のデベロッパがMapKitを使い アプリケーションと連携し すばらしい位置情報サービスを ユーザに提供しています 昨年 MapKit JSを公開し ウェブサイトでも利用可能になりました
月曜日の基調講演で iOS 13のマップの新機能が 披露されました マップの今後が楽しみです その中でも今年は特に MapKitとMapKit JS内に 皆様が待ち望んでいた 新機能の構築に奮闘しました ようやくそれを皆様にお伝えでき とてもうれしいです その前に少しだけ 新しいベースマップについてお話します
私たちはマップを まったくのゼロから再構築しました 特注の車や飛行機で網羅した道は 640万キロメートル以上におよびます
非常に詳細なマップで 新しいフィーチャもあります 例えば 野球場 競技用トラック 歩道 プールなどです
さらに公園 緑道 ビーチや地方の 情報量と正確さが大幅に向上しています 道路 建物 都市公園など 他にもたくさんあります
住所の詳細も格段に改善され より正確な検索と道案内が可能です 最大の利点は MapKitとMapKit JSを通じ これらが自動で利用可能になることです
新しいマップは2019年末に 全米で利用可能になり 翌年には利用国を追加します ダークモードでもお使い頂けます iOS tvOS macOS
ウェブサイト
今回は 仮のWWDCコンパニオンAppを使い 実証しながらお話しします サンプルコードとして利用可能です
どんなアプリケーションか 簡単にお見せします 会議参加者の皆様に役立つ 主要な機能が3つあります
1つ目は宿泊施設の検索機能です 会議の期間中に提携している宿泊施設を このアプリケーションで探せます マップに注釈が たくさん追加されています
2つ目は会議のあとに寄れる レストランやバーを検索できる機能です 他の参加者と会議後に集まれます 検索フィールドに入力します すると関連する レストランやバーの検索結果が 注釈としてマップに表示されます
最後の機能はイベント検索です
公式のBash前に開催される イベントを表示したマップです イベント開催場所に絞って 表示する機能です 食事 ドリンク ステージを表す 注釈とオーバーレイが表示されます
それでは残りの時間で MapKitとMapKit JSの新機能を 詳しく見ていきます 本日の話題は豊富です スナップショットの 新フィルタリングAPIと カメラコントロールです まずはスナップショットです スナップショットはマップの静止画像で MapKitのMKMapSnapshotterは よくご存じかと思います アプリケーション内で使いますが ユーザインタラクションは不要で 連絡先 メッセージ カレンダーと同じです
しかしMKMapSnapshotterは MapKitの一部なので ネイティブAppでしか作れません しかし今週 新サービスを公開し 別の環境でもスナップショットが 作成可能になりました それをMaps Web Snapshotsと呼びます サービス取得に必要なのはURLだけです URLのパラメータが 画像の特性を決定します 例えば中心座標や大きさなどです ダークモードで同じマップを 使いたければ カラースキームパラメータを 追加できます
全スナップショットURLに シグネチャが必要です Apple Developer Programから MapKit JS APIキーを取得できます
MapKit JSベータ版の一部として 1日2万5000回のリクエストが可能です 十分ニーズにお応えできると思います
URLを使い どこにでもマップ画像が表示できます Eメール URLプレビュー ウェブページなど
スナップショットURL生成用に ツールを開発しました そのツールや MapKit JSベータ版の詳細は デベロッパページにあります
Maps Web Snapshotsの次は
ダークモードのマップについて お話します 昨年macOSで公開した ダークモードのマップは 今年 iOS tvOS ウェブサイトに拡大します
では利用に何が必要でしょうか
MKMapViewはビュー階層に適用した traitCollection内のUIスタイルに 自動適応します つまりビューが暗ければ マップビューは自動適応します
過去にtvOSでMapKitの 使用経験があればご存じでしょうが 古いマップは自動で 改良版に入れ替わります
マップ内で ユーザインタラクションが不要な場合 MKMapSnapshotterが適切なツールです しかしアプリケーション内の ビュー階層を認知できません
MKMapSnapshotterで重要なのは ビュー階層のUIスタイルと スナップショットを合致させることです MKMapSnapshotter.Optionsを使います 例を見てみましょう
まずMKMapSnapshotter.Optionsを 作成します スナップショットのエリアを設定し 同様にサイズも設定します
ビュー同様 スナップショットの外観設定には traitCollectionの UIスタイルを使います 表示させたい場所が決まっているなら ターゲットビューのtraitCollectionを 取得するのが簡単です これにより スナップショットは ビュー階層のUIスタイルと合致します iOSのユーザはいつでもダークモードに 切り替え可能なので traitCollectionの変更を 監視して下さい いつ切り替えても スナップショットを再生成できます
場合によっては 他のデバイスと共有していて ターゲットビューが ないこともあり得ます その場合 適切なUIスタイルで UITraitCollectionを作成できます
オプションを設定して MKMapSnapshotterに渡すだけで スナップショットを作成してくれます
ダークモードのマップ使用は 非常に簡単です
次はMapKitとMapKit JS内の 新しいAPIについてです マップビューに表示する POIアイコンを管理できます
マップを見てみると 道路 建物 公園 水場以外にも 小さなアイコンがあります レストラン 博物館 駐車場などです ユーザが自分の見ているエリアを 知るのに重要な情報です
しかし例えば ホテルやホステルを 宣伝したいとします 注釈として表示したい 独自のデータをお持ちでしょう 既存のアイコンを 見せたくない場合もあります 追加する情報と重複してるものや 自分のサービスに関係ない 企業名などです
これまではPOIアイコンを すべて消すしか方法がなく ユーザは貴重なコンテキストを 逃していました カテゴリに基づきPOIアイコンを フィルタリングしたいです
そのため今回 MapKitとMapKit JSは カテゴリリストを用意しました (拍手) すべてを網羅していないので 不足があれば 明日ラボに来るか フィードバックを下さい ユースケースを知ることが重要です
カテゴリを使い pointOfInterestFilterを作成し その際にどのカテゴリを 含めるか除くかを設定できます 例を見てみましょう
デフォルトでは フィルタを適用しないので 全POIアイコンが表示されます ホテルやホステルなどを 表示させたくない場合 ホテルのカテゴリで 除外フィルタを作成します ホテルは非表示になり 他のコンテキストは残ります
関連するカテゴリが分かっていれば それらのカテゴリで 包含フィルタも作れます 例えばこのフィルタは 裁判所や美容院と理髪店を 除外します レストランとナイトライフ 駐車場とカフェだけを表示します
全POIアイコンを非表示にするには 全除外フィルタを使います
今秋にはMapKit JSでも サポートされます 動作もほぼ同じです pointOfInterestFilterを MapKitオブジェクトに追加し POIカテゴリリストを使って フィルタを作成します フィルタ作成後 pointOfInterestFilterに適用します
マップビューはMapKitとMapKit JSの 最も優れた機能です もう1つの要は検索と オートコンプリートへのサポートです 次にお話しするのは フィルタリングを使った検索と オートコンプリートの改善方法です
コンパニオンAppは MapKitの検索とオートコンプリートを 使用しています 文字を打つと MKLocalSearchCompleterから 候補を受け取ります 検索結果は MKLocalSearchを使い取得します 候補をもう一度見てみましょう ユーザはバーやレストランを 検索すると予測しており 中学校はあまり関連性がありません
マップビューで使った pointOfInterestFilterが 検索とオートコンプリートにも使えます
検索用にフィルタを作成し MKLocalSearchCompleterに適用します そしてMKLocalSearch.Requestに 適用すると より関連性のある結果に絞られます
リストにまだ住所が残っています これは明らかにPOIと異なるからで 大抵がランドマークや企業です リストをより向上させるため 検索結果や候補を POIだけに絞りたいです
これまではfilterTypeプロパティを 使ったフィルタリングだけを サポートしていました
しかし ロケーション値は 住所とPOIの両方を含み ここでは役に立ちません そこでResultTypeと呼ぶ 新オプションを2つ紹介しました 検索とオートコンプリート両方で 必要な結果のタイプを設定できます
MKLocalSearchCompleterに 設定できるのは 住所 POI クエリの組み合わせです
MKLocalSearch.Requestは 住所とPOIから選べます
これで簡単にcompleterと リクエストの設定を POIだけに絞れます
MKLocalSearchから返される結果は MKMapItemの配列です MapItemは位置座標や 住所などの役立つ情報を多く含み 場所の名前 電話番号 URLまで 分かります
結果のタイプを推測しやすいように POIカテゴリという プロパティを追加しました 例えばABCと検索してみます そうすると AI's Beet CanteenとABC Brewingが 出てきたとします これらのPOIカテゴリを調べると レストランと醸造所だと分かります
醸造所のカテゴリで 包含フィルタを適用すると AI's Beet Canteenは出てきません しかしABC Brewingが レストランも経営しており レストランのカテゴリで 包含フィルタを適用したとします すると検索結果に出てきます ABC BrewingのPOIカテゴリを見ると 主要なカテゴリである醸造所のままです
同様のフィルタリングが MapKit JSにも今秋サポートされます pointOfInterestFilterを 直接検索オブジェクトに適用します 結果を絞るため 新しいプロパティの includeAddresses includePointOfInterest includeQueriesを使います
それでは同僚のナリーニに交代し 新しいAPIを使い検索結果を 向上させる方法をお見せします (拍手) ありがとう MapKit Frameworkチームのナリーニです すでにお見せした WWDCコンパニオンAppは 機能を一部実装したバージョンも ありますが不完全です ご覧ください サンノゼ周辺で会議終わりに 寄れる店を探ります ここに設けられた検索バーは MKLocalSearchCompleterと MKLocalSearchを使います iOS9.3から搭載された機能です 何か検索してみます
文字を打つと検索候補が出てきます 会議参加者にとって 興味のない結果もあります 検索を実行します
前にもありましたが 関係のない結果が返ってきました pointOfInterestFilterと ResultTypeを使い改善します
オートコンプリートと検索を 設定するView Controllerです pointOfInterestFilterを宣言し
オートコンプリートと検索の 両方に使います 興味のあるカテゴリは ナイトライフとレストランです searchCompleterに pointOfInterestFilterを適用します
住所結果は必要ありません ResultTypeをPOIに限定します
変更はオートコンプリートに影響します 同じフィルタを検索に適用します
検索すると Local Searchリクエストが作成されます 検索リクエストに pointOfInterestFilterを適用し
ResultTypeをPOIに制限します
これでオートコンプリートと検索の 両方に適用されました 実行してみます
先程と同じ文字列で検索してみます
ご覧のとおり 関連のある結果だけが得られました
検索すると関連のある結果が 注釈として表示されます pointOfInterestFilterと ResultTypeを使い 検索とオートコンプリートが 改善しました アレキサンダーに交代します (拍手) 以上が 無関係な結果を取り除くための 5行のコードでした オートコンプリートをお使いなら 新しいAPIをぜひお試し下さい
検索とオートコンプリートについては 以上です
次にオーバーレイの 改善についてお話しします オーバーレイはマップに独自の コンテンツを重ねるために使われ 線や多角形のような 幾何学的形状をしています
イベントビューでこれらの 改善を見てみます
イベントマップをマップビューに レンダリングしたいです
飲食場所やステージを表すため オーバーレイを使います 今回はすべて長方形ですが MKPolygonで形成できます 今回は時間がないので すべて同じスタイルにします オーバーレイはそれぞれに レンダーするオブジェクトが デリゲートメソッドに必要です 同一のオーバーレイを大量に追加すると 同一構成のオブジェクトを 大量に作成することになります これは無駄です
7つのオーバーレイでは 大した影響はないでしょう しかしより多くのオーバーレイを 追加する場合 パフォーマンスに影響が出ます
この対処策として新しく導入したのが MKMultiPolygonと MKMultiPolylineです ポリゴンとポリラインの分類に使えます
オーバーレイを追加するたびに レンダーするオブジェクトが必要です そこで新しく公開したのが MKMultiPolygonRendererと MKMultiPolylineRendererです
アプリケーション内で作成する オブジェクトが激減し 動作も改善されます 例を見てみます
ステージ用のポリゴンを作成します すべてのポリゴンを そのままマップビューに追加すると デリゲートメソッドはレンダー対象を 7つ要求します 代わりにポリゴンをすべて MKMultiPolygonにグループ化し MultiPolygonを マップビューに追加します
MultiPolygon追加用に コードを更新したら デリゲートメソッドの更新も必要です そこでMKMultiPolygonRendererを 作成します 古いMKPolygonRendererと まったく同じ方法です
レンダーするオブジェクトを 減らすとメモリを節約でき パフォーマンスが向上します MapKitがポリゴンの レンダリングを一括処理できるからです
さらにMapKitは オーバーレイの自動レンダリングを 可能にします オブジェクトをビットマップではなく ベクターとして扱います これによりオーバーレイの外観が 大幅に改善され マップを拡大縮小しても きれいに表示されます
複雑なオーバーレイを追加するなどして 正しく表示されない場合 shouldRasterizeプロパティを使えば ベクター化を無効にできます
以上がオーバーレイの利用方法です (拍手) 次はGeoJSONについて 話したいと思います GeoJSONは広く使われている フォーマットで 点や線や多角的な形状を 記述することができます 多くのベンダーが GeoJSONで公開しています なのでマップビューに追加するために すでにコードを 書いている人もいるでしょう この新しいAPIで GeoJSONはより簡単になります 長いコードを消すことができます (拍手) まだ親しみのない人のために 位置を示す 簡単な一例を紹介しましょう 一番上にはtypeのメンバーがあり これがフィーチャだと示しています
ここに識別子を付けることで 他の物体と 区別することができます
その結果 1つの地点として定義されます 複数の地点を示すこともできます ジオメトリの次は プロパティを加えます 今回の場合は stageという名前を追加しました
これをMapKitで表現するための MKGeoJSONFeatureという クラスを紹介します これは識別子と デコードされたジオメトリと プロパティを保持する データコンテナです
そして GeoJSONのデータを MapKitに送るのが MKGeoJSONDecoderという クラスです SwiftのJSONDecoderを 使ったことがある人は MKGeoJSONDecoderも 親しみやすいでしょう 単にデコーダを作成し データを渡せば MKGeoJSONFeatureの 配列を返してくれます
もしくはMKPolygonや MKPolylineといった MapKitのジオメトリを返します それはGeoJSONの構造によります トップレベルにフィーチャがあるか ジオメトリがあるかで変わります
例を見てみましょう デコードされる前のGeoJSONです これは1つの地点を表しているので 返される配列も1つです しかしデコーダもジオメトリを MapKitに送ります なので この地点の情報は― MKPointAnnotationとして デコードされます 他はMKPointAnnotationを 参照して MKGeoJSONFeatureに デコードされます
MKMultiPolygonと MultiPolylineによって MapKitは 完全な地図作成を実現しました GeoJSONをデコードするだけで マップの注釈に情報を 追加することができます
例を見てみましょう
まずデコーダを作成します 次にデータを渡します GeoJSONの構造によりますが トップレベルにフィーチャがあるか あるいはジオメトリがあるか
もしフィーチャをパースしているなら ジオメトリのプロパティも使います ポリゴンやポリラインに アクセスするためです この例で言うと― フィーチャもジオメトリも1つです コードは仮定で設定しています 多くの場合 コードのこの部分に― MKPolygonや MultiPolylineを入れます
GeoJSONの仕様では プロパティは有効なJSONにも nullにも なり得ます なのでデータ解析において 仮定を設定できません そのためデータタイプとして プロパティを網羅します もしプロパティの構造を知るなら JSONDecoderを使います データを適切なモデルクラスに 落とし込みます このケースではプロパティは 文字列を含みます なので単純に辞書にマッピングします これにより 名前の値を読み取れます
しかしGeoJSONを 管理していない場合 プロパティの構造が分かりません その場合はJSON Serializationを使います そのタイプに応じて プロパティを探索できます
次はMapKit JSです MapKit JSでも GeoJSONが使えるので 既存のMapKit JSにマッピングできます 注釈やオーバーレイなどです 例を見てみましょう URLか有効なGeoJSONオブジェクトを 単にimportGeoJSONに渡すだけです
この機能は1つか複数のアイテムを 返してくれます これにより簡単に 地図上にオブジェクトを追加できます
もう一度 ナリーニに登場してもらって 地図上にレンダリングする方法を 見せてもらいます (拍手)
コンパニオンAppの構築を続けます ここは会場となる公園です その中のコンサートエリアです コンサートには飲食が不可欠です そのためのテントが必要ですね オーバーレイと注釈を レンダリングします GeoJSONフォーマットを使います データを見てみましょう
2つのフィーチャがあります トップレベルで グループ化されています 1つ目のフィーチャはテントです 多くの飲食物を出すには 多くのテントが必要です テントを示すのは MultiPolygonです これらはテントの異なる座標です これを使って オーバーレイをレンダリングし 地図上にテントを表示させます
次のフィーチャは地点です これでテントの名前を表します このデータを使って 注釈をレンダリングします これでテントに名前が付きます 2つのフィーチャをパースする コードがこれです
ここがデータソースです JSONをロードしてパースします ロードしてみましょう
JSONが読み込まれたら MKGeoJSONDecoderを使います デコードしてMKGeoJSONの 配列に入れます その配列をパースします パース関数を実装しましょう
GeoJSONオブジェクトの数だけ ループします トップレベルにフィーチャがあるので MKGeoJSONFeatureとして 扱います 他のオブジェクトも同様に処理します フィーチャとジオメトリをループし MKMultiPolygonで フィルタリングします これをオーバーレイの配列に追加します これは地図にオーバーレイを 追加するための配列です ではView Controllerで オーバーレイを追加しましょう
追加するオーバーレイごとに デリゲートメソッドに レンダラーを供給します デリゲートメソッドを設定しましょう
MKOverlayを渡して MKOverlayRendererをもらいます レンダラーを設定しましょう
テントのジオメトリは MultiPolygonなので オーバーレイを MKMultiPolygonとします ここで画面の表示方法を指定し テントのレンダリング方法を決めます これでオーバーレイが追加され 画面の表示方法も設定できました アプリケーションを実行しましょう
コンサートエリアを見てみます レンダリングされたので テントのアウトラインが見えます これにテントの名前が表示されれば 飲食できる場所が分かります 注釈としてマップに表示させます データソースに戻りましょう
注釈の追加は オーバーレイと異なります なのでオーバーレイと分離します
注釈名はfeature.propertiesから パースします これが注釈に使用するデータです それでは関数を実装します
地点のプロパティは 文字列の辞書を示しています SwiftのJSONDecoderを使って 文字列の辞書にデコードします 作られたデータを 注釈の配列に追加します 地図上に注釈を 追加するための配列です View Controllerから 地図に注釈を追加しましょう
注釈の表示を設定します
MKMapViewDefaultAnnotation ViewReuseIdentifierを使って 設定した注釈を登録します これで表示が完成したので アプリケーションに戻ります
レンダリングされたことで テントの名前が表示されました GeoJSONから注釈と オーバーレイを生成しました しかし 地図上に 表示されている情報には 不必要なものもあります pointOfInterestFilterを使って 削除しましょう
これで適用されたので 実行してみましょう
ご覧のとおり簡単に変更が可能です これで必要な情報だけに集中できます それではアレキサンダーに返します (拍手) デモで示したように 新しいデコーダはGeoJSONを より使いやすくしています
これで地図を 簡単にレンダリングできました
しかし屋内のデータが 必要な時もあります その場合 より複雑になります
その複雑な作業を 簡略化してくれるのが IMDFというフォーマットです IMDFは先ほどのGeoJSONを ベースに作られています IMDFは屋内の包括的な モデルを提供し JSON準拠なものなら何でも取り扱えます 屋内データについてさらに知りたい人は このセッションがお勧めです “Adding Indoor Maps to your App and Website” 明日の午後2時からです IMDFの仕様を詳細に紹介しています
これで新しいGeoJSONの 紹介は終わりです
最後に紹介するのは MapKitとMapKit JSの新APIです マップビューのカメラを コントロールできます もう一度コンパニオンAppを 見てみましょう
このビューは イベントマップを表示しています ここでサンフランシスコに 移動させる必要はありません
今注目したいエリアに集中するために ユーザが移動できる範囲を 限定させることができます
そこで紹介するのが cameraBoundaryクラスです 地図の中心地を指定することで 領域を定義してくれます
その境界を作る方法は2つあります 座標を示すかmapRectを使うかです 境界を作成したら cameraBoundaryプロパティを 適用します
しかし その前に マップビューの中心点が 境界内にあることを確認します ご存知だと思いますが もしマップビューが 境界の外にあった場合 その位置は境界の中に修正されます 恐らくユーザが 期待する場所ではありません
一度cameraBoundaryが適用されると マップビューは固定されます 例えばsetRegionを 呼び出すとします
その際に もし境界の外で マップビューを設定したら できるだけ近くには移動します しかし境界は守ります
もちろんsetRegionに限りません 中心点を変更する どのAPIでも同じです
MapKit JSにも類似機能を加えました しかし少し違います 使うのはCoordinateRegionか MapRectのどちらかです なので どちらかを当てはめて cameraBoundaryプロパティを 適用します
これで見たいエリアを 維持する機能が加わりました しかしユーザは まだズームアウトできます この機能はカメラの境界を 領域の中心地に固定するだけです なので会場の中心にはいますが ズームアウトしているだけです なのでズームを制限する必要があります
ズーム機能はカメラで制御されています MKMapCameraを すでに使っていれば 高度を取得するAPIが使えます しかしピッチカメラの場合 より直感的に― 地図の中心地から カメラまでの距離が分かります これでマップビューの ズームを制御します
そこで紹介する新しいプロパティが centerCoordinateDistanceです
これで皆さんは高度について 考えなくても大丈夫です 代わりに中心座標から カメラまでの距離を考えてください コードを書き換える際に 注意してほしいことがあります
これまでの高度を基準にしたカメラでは カメラのピッチを変更すると 高度を維持したまま 中心座標から離れていきました
しかし距離を基準とすれば ピッチを変更しても カメラと中心座標は離れていきません 結果的には高度が変わっていきます
MKMapCameraは更新されたので 動作も変わります これが新しいプロパティの役割です
新プロパティが 高度を制御できるものと分かりました しかし どう制限するのか? cameraZoomRangeという クラスを使います このクラスが定義するのは centerCoordinateDistanceの 最大値と最小値です cameraZoomRangeを適用すると カメラは指定範囲にとどまります
なので距離基準で 最小値と最大値のクラスを作成し マップビューの 新しいプロパティに適用します 最小値と最大値のどちらかだけを 適用することも可能です
先ほど述べたように cameraZoomRangeなしでも ズーム機能には制限があります この制限は見ている地域や マップによっても変わるでしょう 技術的な制限がある場合もありますし 法的な理由もあり得ます
もしcameraZoomRangeを適用して デフォルトより 短い距離を設定したとします ユーザはデフォルト値以上は 近づけません 同じようにズームアウトできる 最大値にも限界があります
カメラが適用範囲外にある場合は マップビューは カメラとの距離を修正します cameraBoudaryと同じで cameraZoomRangeを 越えることはできません
またズーム範囲のサポートも 追加しました 新しいオブジェクトを MapKitに追加して 同じように最小値と最大値を 設定します どちらかでも大丈夫です それで新しいプロパティが 適用されます
それでは再度 ナリーニに実演してもらいます 今回はズーム範囲の使い方と その境界線について 実際に見てもらいます (拍手) これは注釈とオーバーレイを 付けたマップです
コンサートエリアから離れます カリフォルニア全域まで 縮小も可能です そこでズーム範囲を制限します cameraZoomRangeを 活用しましょう
値はメートルで指定します cameraZoomRangeを 適用することで ズーム範囲を制限することができます ではアプリケーションを実行しましょう
縮小してみても これ以上できません 拡大も試してみます
拡大しています
ステージが見えますね 各テントも識別できます ズーム範囲は完璧です
しかし他の地域に 移動できてしまいます コンサートエリアに集中したいので 次はcameraBoundaryを使います
中心を指定して MKCoordinateRegionを設定します 範囲は緯度を20メートル 経度を10メートルにします coodinateRegionを使って マップビューに cameraBoundaryを適用します すると中心地が 領域内にあると確認できます ではアプリケーションを実行しましょう
移動を試みますが ご覧のとおりできません 拡大してみましょう
ステージに近づきたいですね レディー・ガガがいるらしいです しかし到達できません 数値を変えてみましょう 緯度を100メートル 経度を80メートルにします これでアプリケーションを 実行してみましょう
もう一度 拡大してみます
ご覧のとおり近づけました トイレも見つけられます これがcameraBoundaryと cameraZoomRangeの使い方です これによりユーザは 必要な情報だけに集中できます アレキサンダーに返します (拍手) コードを少し書き換えるだけで 新しいマップビューが体験できます ぜひ使ってみてください
マップビューにおける カメラAPIについては以上です
今日は多くのことを伝えました なので 最後に― 今日の要点をまとめます 皆さんの復習になれば幸いです
まずは新しいスナップショット
スナップショットを作成し ウェブ上で使えます ユーザインタラクションが 不要な場合は ロード時のリソース浪費を避けられます
アプリケーションによって データやコンテキストが異なります ニーズに合わせ マップビューを変えるには pointOfInterestFilterを 使います
カギは検索とオートコンプリートです それらの関連性を高めるために pointOfInterestFilterと ResultTypeを使います
多くのポリゴンやポリラインを 追加するなら MultiPolygonsとMultiPolylinesで グループ化します
もしGeoJSONを使っていれば MapKitとMapKit JSの 新サポートを活用してください 必要なコードが少なくて済みます
そして あなたのマップビューに 境界線を作りたい場合です cameraBoundaryと cameraZoomRangeを使えば 必要なエリアに集中できます
サンプルコードなど さらに情報が欲しい方は ウェブページをご覧ください 質問があれば明日の午後3時に ラボまで来てください 今日はありがとうございました それでは いい夜を 最終日も楽しんでください (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。