屋内地図コンポーネントを使用する
HERE Indoor Mapでは、地図に民間施設を読み込み、表示して操作する機能を提供しています。HERE Indoor Map の詳細については、「HERE Indoor Map ガイド」を参照してください。
注施設の所有者で、HERE SDK で HERE Indoor Map を活用することに興味がある場合は、
現在、HERE SDK では民間施設のみをサポートしているため、施設データはアプリにのみ表示されます。デフォルトでは、地図に施設は表示されません。各施設には、HERE SDK 資格情報に関連付けられた一意の施設 ID が割り当てられます。
VenueEngine を初期化する
HERE Indoor Map API の使用を開始する前に、VenueEngine インスタンスを作成して起動する必要があります。これは地図の初期化後に実行できますが、VenueEngine を作成する最適なタイミングは地図にシーンが読み込まれた後です。
private void loadMapScene() {
// Completion handler when loading a map scene.
private func onLoadScene(mapError: MapError?) {
guard mapError == nil else {
print("Error: Map scene not loaded, \(String(describing: mapError))")
return
}
// Hide extruded buildings layer, so it will not overlaps with venues.
mapView.mapScene.disableFeatures([MapFeatures.extrudedBuildings])
// Create a venue engine object. Once the initialization is done, a completion handler
// will be called.
do {
try venueEngine = VenueEngine { [weak self] in self?.onVenueEngineInit() }
} catch {
print("SDK Engine not instantiated: \(error)")
}
}
}
VenueEngine が初期化されると、完了ハンドラーが呼び出されます。この時点から、VenueService と VenueMap の両方にアクセスできるようになります。VenueService は施設の読み込みに使用され、VenueMap は地図上の施設を制御します。完了ハンドラー内で必要なデリゲートをすべて追加してから、VenueEngine を起動する必要があります。HRN プラットフォーム マップ カタログは VenueEngine を起動してから設定する必要があります。
注HRN の設定は必須ではありません。ユーザーが HRN を設定しない場合、デフォルトのコレクション HRN が自動的に選択されます。ユーザーが他のコレクションを使用したい場合は、それぞれの HRN を設定できます。HRN値が欠落しているか無効であることを示すエラーログが生成されます。プロジェクトの有効なHRN文字列を受け取る方法の詳細については、「HERE Indoor Mapガイド」を参照してください。
private func onVenueEngineInit() {
// Get VenueService and VenueMap objects.
let venueMap = venueEngine.venueMap
let venueService = venueEngine.venueService
// Add needed delegates.
venueService.addServiceDelegate(self)
venueService.addVenueDelegate(self)
venueMap.addVenueSelectionDelegate(self)
//Lets user download topologies for current session.
venueService.loadTopologies()
// Start VenueEngine. Once authentication is done, the authentication completion handler
// will be triggered. Afterwards VenueEngine will start VenueService. Once VenueService
// is initialized, VenueServiceListener.onInitializationCompleted method will be called.
venueEngine.start(callback: {
error, data in if let error = error {
print("Failed to authenticate, reason: " + error.localizedDescription)
}
})
if (hrn != "") {
// Set platform catalog HRN
venueService.setHrn(hrn: hrn)
}
}
VenueEngineが起動されると、現在の資格情報を使用して認証が行われ、次にVenueServiceが起動されます。VenueService が初期化されると、VenueServiceDelegate.onInitializationCompleted() メソッドが呼び出されます。
// Delegate for the VenueService event.
extension ViewController: VenueServiceDelegate {
func onInitializationCompleted(result: VenueServiceInitStatus) {
if (result == .onlineSuccess) {
print("Venue Service initialize successfully.")
} else {
print("Venue Service failed to initialize!")
}
}
func onVenueServiceStopped() {
print("Venue Service has stopped.")
}
}
トークンを使用して VenueEngine を起動する
有効な HERE Indoor Platform プロジェクト トークンを使用して VenueEngine を起動できます。HERE プラットフォームのプロジェクト管理とプロジェクト ワークフローの詳細については、HERE プラットフォームのプロジェクト管理に関するページを参照してください。
private func onVenueEngineInit() {
// Get VenueService and VenueMap objects.
let venueMap = venueEngine.venueMap
let venueService = venueEngine.venueService
// Add needed delegates.
venueService.addServiceDelegate(self)
venueService.addVenueDelegate(self)
venueMap.addVenueSelectionDelegate(self)
// Start VenueEngine by replacing TOKEN_GOES_HERE with token you have in String data type.
// Afterwards VenueEngine will start VenueService. Once VenueService
// is initialized, VenueServiceListener.onInitializationCompleted method will be called.
venueEngine.start(token:"TOKEN_GOES_HERE")
}
Indoor Mapサンプルアプリを試す
施設でのマップタップイベントの使用法を示す完全な例は、GitHubにある「IndoorMap」サンプルアプリで入手できます。
26 日前の更新