iOS 開発者ガイド for SDK

カスタム位置情報拡張 2.

Custom Location Extension 2 ( CLE2 )を使用すると、カスタム地理空間情報をモバイルアプリケーションに簡単に配布できます。 CLE2 を使用すると、空間コンテンツをローカルデータベースにプログラム的に挿入し、データ共有のためにサーバーにアップロードできます。 オンラインまたはオフラインでの検索も実行できます。 これらの機能 により、 SDK for iOS が軽量空間ストレージソリューションに効果的に変換され、最適化されたアルゴリズムを使用して地理空間情報の挿入およびクエリを実行できます。

この機能をサポートするクラスは 、 [NMA Custom Location Extension 2] グループにあります。 CLE2 NMACLE2GeometryPointでは、位置およびジオメトリのリクエストに特定のインタフェースを使用する代わりに、すべてのユースケースを 1 つの柔軟なアプローチで統合します。返される値には、常にジオメトリタイプのいずれか ( など ) が含まれ、任意の情報を表す 0 ~ N のユーザー定義属性のセットが含まれます。 これらの属性には暗黙的な構造はありません。 これらの属性は、キーおよび属性値のマップとして使用できます。

これらの CLE2 機能の使用例を次に示します。

  • 半径 2 km 以内のすべてのユーザーのカスタム POI を表示します。
  • 多角形で定義されたエリアを使用して、ドイツ国内のすべての顧客オフィスをオンラインまたはオフラインで検索し、オフィスの受付電話番号、従業員数、およびその他の詳細情報を表示します。
  • オフライン モードで図形をリアルタイムで編集し、その図形に対するクエリを実行して、その図形が他の既存の固定図形やその他の基本的な仮想的なフェンスソリューションと交差する場合に通知を受け取ります。 たとえば、「 Moving プラットフォーム」の場合があります。たとえば、位置が GPS の動きを基準にしている船のドックの近くにある船などです。
  • 都市施設や屋外バスケットボールコートなど、 HERE Map Data の一部として公式には利用できない施設を共有できます。
  • 任意のデータに関連付けられている GPS データを保持します。たとえば、オフライン モードの実行中であっても、高速のハイキングトレイルなどです。
  • 特定のルートに近い特定のタイプのオブジェクトを検索します。

レイヤーとフィルタリング

すべてのデータがレイヤーの形式で整理されます。 情報をアップロード、保存、または検索する場合、レイヤー名の文字列が指定され、関連する情報をより適切にフィルタリングするために使用できます。

形状属性をチェックすることで、さらにフィルタリングできます。 これらの属性は、などのジオメトリにリンクされたユーザー定義のフィールド NMACLE2GeometryPointで、テキストフィールドまたは数値フィールドにすることができます。

注 : CLE2 の検索は、アプリ資格情報によってレイヤーごとに制限されます。 カスタム位置情報レイヤーのアクセス制限を管理するには、カスタム位置情報管理者に連絡してください。 お持ちでない場合は、サービスサポート連絡 して詳細を確認してください

データの挿入とアップロード

To upload CLE2 data, use the web interface or REST APIs. Refer to the following User Guide for more details: https://here-tech.skawa.fun/documentation.

SDK for iOS を使用して、ローカルおよびサーバーにデータを挿入することもできます。 HERE SDK を使用すると、ローカルでオフラインで保存している場合でも、場所を参照するデータを簡単に生成できます。また、接続が確立されたときに、その情報を順次他のデバイスに共有できます。

空間検索を実行しています

検索を実行するには、次のように検索タイプのいずれかを選択します。 すべてのリクエストに共通の入力パラメータは、検索されたレイヤー名です。

表 1. クラスを検索します
検索タイプ 説明 クラス名
近接性 指定した半径内にある形状を中心から取得します。 NMACLE2ProximityRequest
Corridor 一連の座標で指定されたルートに沿って形状を取得します。 NMACLE2CorridorRequest
Bounding Box 指定した長方形の地理的領域内のジオメトリを取得します。 NMACLE2BoundingBoxRequest
quadkey 指定した quadkey 内にあるジオメトリを取得します。 NMACLE2QuadkeyRequest
属性 指定したクエリーと一致するすべてのジオメトリを取得します。 このタイプの検索はオンラインでのみ利用できます。 NMACLE2AttributeRequest

各検索リクエストタイプでは、次に示すような共通のプロパティがサポートされています。

表 2. 一般的なリクエストの引数
プロパティ 説明 値の例
geometryType 結果に指定する形状タイプを指定します(オンラインのみ)。以下の「検索結果について」の詳細を参照してください。
  • NMACLE2GeometryFull
  • NMACLE2GeometryLocal
  • NMACLE2GeometryNone
cachingEnabled デフォルトは False です。 有効にすると、このようなオンライン検索リクエストから受信したジオメトリがローカルに保存されます。  
query 現在オンラインリクエストでのみ使用できます。このプロパティを使用すると、ユーザーのジオメトリ属性にクエリフィルターを指定して、フィルターを通過したジオメトリのみが返されるようにできます。 使用できる文字列は、単純な等価演算子および比較演算子を持つ自由形式のテキストです。  

検索リクエストオブジェクトを作成し、必要に応じて設定したら startWithListener:startWithBlock: 、そのオブジェクトまたはメソッドを呼び出します。 検索の結果が、指定されたブロックまたはリスナーに配信されます。 CLE2Result を呼び出し getGeometries()て、検索条件に一致するジオメトリをオブジェクトから取得できます。 この形状結果のリストには、次のタイプのオブジェクトが含まれている可能性があります。

表 3. ジオメトリの戻り値のタイプ
クラス ジオメトリの説明 メインプロパティ
NMACLE2Geometry 他のすべてのジオメトリのベースクラスは、ユーザー定義の属性を含む値を返します。 NSDictionary<NSString *, NSString *> *attributes
NMACLE2GeometryPoint 座標内の点を表します。 Point WKT の A に関連します。 NMAGeoCoordinates *coordinates
NMACLE2GeometryMultiPoint 複数のポイントを座標配列として表します。 MultiPoint WKT の A に関連します。 NSArray<NMAGeoCoordinates *> *coordinatesArray
NMACLE2GeometryPolyline ポリラインをとして表し NMAGeoPolylineます。 WKT LineString オブジェクトに関連付けられます。 NMAGeoPolyline *geoPolyline
NMACLE2GeometryMultiPolyline 複数の折れ線をの配列として表し NMAGeoPolylineます。 WKT MultiLineString オブジェクトに関連付けられます。 NSArray<NMAGeoPolyline *> *multiPolylineArray
NMACLE2GeometryPolygon NMAGeoPolygon 外側のリングにが、 NMAGeoPolygon 内側の穴にがある多角形を表します。 このジオメトリのすべてのリングを含む WKT ポリゴンオブジェクトに関連付けられます。 NMAGeoPolygon *outerRing, NSArray<NMAGeoPolygon *> *innerRings
NMACLE2GeometryMultiPolygon 複数のポリゴンをの配列として表し NMACLE2GeometryPolygonます。 MultiPolygon WKT のオブジェクトに関連付けられます。 NSArray<NMACLE2GeometryPolygon *> *multiPolygonArray

OpenGIS ( 地理情報の実装標準 ) および WKT 表現形式では、ポリゴンの概念は、 1 つの外側のリングポリゴンに 0 個以上の内側の穴のポリゴンを加えたもので定義されます。 このため、クラス NMACLE2GeometryPolygonNMAGeoPolygon はおよびセカンダリ NMAGeoPolygon アレイが含まれています。

プロキシミティ検索要求の例

カスタムの位置情報検索を実行するに NMACLE2ProximityRequestinitWithLayer:center:radiusinitWithLayers:center:radius は、またはのメソッドを使用してを作成する必要があります。

近接検索では NMAGeoCoordinates 、特定の場所の指定した半径内にあるカスタムジオメトリのリストが返されます。 たとえば、次のコードは、フランクフルト中央駅から半径 8 km 以内に存在する、前述の Stores レイヤー内のすべての場所を検索する方法を示しています。


NMACLE2ProximityRequest * proximityRequest;
proximityRequest= [[NMACLE2ProximityRequest alloc] initWithLayer:@"HERE_SITES"
       center:[NMAGeoCoordinates geoCoordinatesWithLatitude:49.196261
          longitude:-123.004773]
       radius:8000]; // 8km

// Perform the request
[proximityRequest startWithBlock:^(NMACLE2Request *request, NMACLE2Result * result, NSError *error) {
    if(!error) {
      // use result.geometriesArray to retrieve list of found NMACLE2Geometry results
    }
  }];

Layer ID パラメータは、カスタムアップロードされたジオメトリのセットを表します。 たとえば 、"HERE_SITES"レイヤー ID は 、ドイツの HERE オフィスの場所を含むサンプルレイヤーを表します。 オフィスは単純な点で表されるため、返される形状のタイプはです NMACLE2GeometryPoint

また、異なるレイヤーで近接検索を同時に実行することもできます。


NSArray *layers = @[@"LAYER_1", @"LAYER_2"];
NMACLE2ProximityRequest * proximityRequest;
proximityRequest= [[NMACLE2ProximityRequest alloc] initWithLayers:layers
       center:[NMAGeoCoordinates geoCoordinatesWithLatitude:50.113905
              longitude:8.677608]
       radius:500]; // 500 meters

// Perform the request
[proximityRequest startWithBlock:^(NMACLE2Request *request, NMACLE2Result * result, NSError *error) {
    if(!error) {
      // use result.geometriesArray to retrieve list of found NMACLE2Geometry results
    }
  }];

リクエストオブジェクトを作成した後 startWithBlock: 、メソッドを呼び出して検索リクエストを起動し、検索結果をリッスンできます。

リクエストにフィルタを追加することもできます。 フィルターは、位置一致の検索クエリごとに評価される、 JavaScript に似た式です。 指定すると、属性が一致する場合など、式が true と評価されるジオメトリのみが返されます。 たとえば、のカスタム位置パラメーターが rating より大きい 3 で、属性が「NAME」 AS のジオメトリを検索する場合 "MyPlace23"は、次の手順を実行します。


NMACLE2ProximityRequest * proximityRequest;
proximityRequest= [[NMACLE2ProximityRequest alloc] initWithLayer:@"HERE_SITES"
       center:[NMAGeoCoordinates geoCoordinatesWithLatitude:49.196261
              longitude:-123.004773]
       radius:8000]; // 8 km

[proximityRequest setQuery:@"CITY == 'Burnaby' && NAME1 != 'MyPlace'"];

// Perform the request
[proximityRequest startWithBlock:^(NMACLE2Request *request, NMACLE2Result * result, NSError *error) {
    if(!error) {
      // use result.geometriesArray to retrieve list of found NMACLE2Geometry results
    }
  }];

結果を反復処理しています

NMACLE2Result オブジェクトには NSArrayNMACLE2Geometry 、検出されたすべてのオブジェクトを含むが含まれています。 異なるオブジェクトを返すことができるため、返されたジオメトリを使用する前に、型をテストすることをお勧めします。 たとえば、リクエスト完了ブロック内で次の操作を実行できます。


for (NMACLE2Geometry *currentLocation in result.geometries) {
  if([currentLocation isKindOfClass:[NMACLE2GeometryMultiPoint class])
  {
    NMACLE2GeometryMultiPoint *multiPoint = (NMACLE2GeometryMultiPoint *)currentLocation;
    // multiPoint.coordinatesArray is an NSArray containing the found NMAGeoCoordinates
    NSLog(@"Found %lu coordinates", (unsigned long)[multiPoint.coordinatesArray count]);
    NSLog(@"Geometry attributes: %@", multiPoint.attributes);
  }
}

検索さ NMACLE2GeometryMultiPointNSArrayNSDictionary れた各プロパティには、座標と柔軟なユーザー定義フィールドを持つ属性の 2 つの重要なプロパティが含まれています。