iOS 開発者ガイド for SDK

地図のカスタマイズ

ユーザーにとって重要 な特定の表示サイズ、ユースケース、ブランディング、またはハイライトオブジェクトに合わせてマップを最適化する場合でも、 HERE SDK マップのカスタマイズ機能を使用すると、マップ ビューのレンダリング特性を詳細に制御できます。

このセクションでは、独自のマップの外観を作成するために必要なコンポーネントと概念について説明します。

地図のスキーム

マップをカスタマイズするに NMACustomizableScheme は、まずマップ ビューからオブジェクトを取得します。 このオブジェクトを使用すると、マップを変更するためのプロパティを取得および設定できます。 建物、ランドフィーチャ、道路などのマップオブジェクトの色、幅、長さ、およびその他のプロパティを変更できます。 カスタマイズしているスキームが現在影響を受けるズーム レベルにあり、アクティブである場合、プロパティへの変更が表示されます。

作成したカスタムスキームは永続的には保存されませんが、マップ ビューオブジェクトがメモリ内にある限り有効になります。

クラス階層は次のとおりです。
  1. NMAMapView
  2. NMACustomizableScheme
  3. NMACustomizableVariable

まず、マップ ビューからカスタムスキームを作成または取得してから、それぞれのプロパティを取得 NMACustomizableVariableし、最後にアクセサメソッドを使用してプロパティを変更します。

GitHub でのマップのカスタマイズ例

この機能を示す例について は、 https://github.com/heremaps/ (Obj-C) および https://github.com/heremaps/ (Swift) を参照してください。

スキームのカスタマイズ

マップのカスタマイズは、 NMANormalDaySchemeNMANormalNightScheme出発点として使用する定義済みのスキームのいずれか ( およびなど ) を選択することによって開始されます。 これらの定義済みのスキームは、自身ではカスタマイズできませんが、カスタムスキームの派生元となる初期値を提供します。 この基本スキームへのアクセス権およびカスタマイズ権限を持っている必要があります。

すでに把握している事前定義済みのスキームの例は、次のとおりです ( それぞれ、通常日、通常夜間 ) 。

図 1. 通常の日のスキーム
図 2. 通常の夜間スキーム

最初のマップ スキームカスタマイズを作成しています

この例では、 float プロパティを変更し CountryBoundary_Width て、次のレンダリング効果を発生させます。

図 3. 正常な国の境界
図 4. 国の境界を調整しました

この簡単な変更を実装する方法を学習しましょう。 まず、どのスキームをベースにするかを決定したら NMACustomizableScheme 、マップ ビューメソッドを使用してオブジェクトを作成します。

NMACustomizableScheme * customScheme;
customScheme = [self.mapView createCustomizableSchemeWithName:@"myCustomScheme" basedOnScheme: NMAMapSchemeNormalDay];

カスタマイズ可能なスキームを作成すると、マップ ビューオブジェクトが削除されない限り、次のコードを使用していつでも再度取得できます。 カスタムスキームは、取得元の特定のマップ ビューに対してのみ作成され、有効になります。

NMACustomizableScheme * customScheme = [self.mapView.getCustomizableSchemeWithName:@"myCustomScheme"];

属性を設定する前に、変更を有効にするズーム範囲を定義します。 この目的のために、ヘルパークラス NMAZoomRange には、最小および最大のズーム レベル値を使用することが提供されています。

NMAZoomRange * myZoomRange = [[NMAZoomRange alloc] initWithMinZoomLevel:0.0f and toZoomLevel:20.0f];

これで、値の読み取りと設定を行う準備ができました。 次の例で NMASchemeCountryBoundaryWidth は、プロパティを読み取り、変更します。

// to read a primitive (float) property value: provide the property name and the zoom level
float returnValue = [customScheme floatForProperty:NMASchemeCountryBoundaryWidth forZoomLevel: 10.0f];

// to set a float property: provide the property name, new value, and the previously created zoom range (NMAZoomRange)
[customScheme setFloatProperty NMASchemeCountryBoundaryWidth withValue:10.0f forZoomRange: myZoomRange];

上記のように、 Integer や Float などの単純なタイプの場合、オブジェクトを修正する必要はありません。 color などの型の場合、メソッドは操作しやすいようにオブジェクトを返します。

最後に、マップでカスタムスキームをアクティブ化できます。

[self.mapView setMapScheme:@"myCustomScheme"];
注 : カスタマイズを変更する前に、カスタムテーマを作成してアクティブ化することをお勧めします。 この方法では、変更が適用されると、プロパティがそれぞれの設定値で変更されたときに、ただちにマップ ビューでレンダリングおよび表示されます。

マップが次のように表示されます。

図 5. 国の境界を調整しました

使用可能なカスタマイズ可能なプロパティを一覧表示します

使用可能なすべてのプロパティは NMACustomizableVariable.h 、ヘッダーファイルにあります。 各プロパティタイプについて NS_ENUM 、が存在します。これは、プロパティの識別子として get メソッドおよび set メソッドに渡されます。 ヘッダーファイルを参照して、そのタイプを確認できます。

プロパティのタイプごとに、 integerForProperty:floatForProperty:、などのアクセサのセットを 1 つ使用 colorForProperty:できます。 setter メソッドについても同じことが言えます。

注 : このクラス NMACustomizableVariable には、 カスタマイズのために HERE SDK がサポート するすべてのプロパティ(キーとして名前を持つすべてのNMACustomizableVariableオブジェクトを含む)を含むNSDictionaryを返す静的メソッドallAvailablePropertiesもあります。 これは、すべてのプロパティをプログラムで反復処理する場合に特に便利です。 propertyTypeNMACustomizableVariable オブジェクトから読み取ることで、常にプロパティタイプを検索できます。
iOS SDK には、次のヘルパークラスがあります。
  • NMACustomizableVariable - 整数や float などのプリミティブ型に使用されるベースクラス
  • NMACustomizableColor - NMACustomizableVariable カラープロパティを処理するメソッドで拡張します

色のプロパティの変更

次の例で NMASchemeBuildingColor は、プロパティの変更方法を確認できます。

図 6. 通常の建物の色
図 7. 建物の色を調整しました

カラーマップの属性を変更するには、まずカスタムカラーオブジェクトを取得 NMACustomizableColorしてから変更します。


NMACustomizableColor *buildingColor = [customScheme colorForProperty:NMASchemeBuildingColor forZoomLevel:2.0f];
[buildingColor setRed:100.0f];
[buildingColor setGreen:100.0f];
[buildingColor setBlue:133.0f];

// now apply the changes using the previously created zoom range
[customScheme setColorProperty:buildingColor forZoomRange:myZoomRange];