カスタム位置情報拡張 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 データをアップロードするには、 Web インターフェイスまたは REST API を使用します。 詳細については、 次のユーザー ガイドを参照してください。 https://developer.here.com/documentation
SDK for iOS を使用して、ローカルおよびサーバーにデータを挿入することもできます。 HERE SDK を使用すると、ローカルでオフラインで保存している場合でも、場所を参照するデータを簡単に生成できます。また、接続が確立されたときに、その情報を順次他のデバイスに共有できます。
空間検索を実行しています
検索を実行するには、次のように検索タイプのいずれかを選択します。 すべてのリクエストに共通の入力パラメータは、検索されたレイヤー名です。
検索タイプ | 説明 | クラス名 |
---|---|---|
近接性 | 指定した半径内にある形状を中心から取得します。 | NMACLE2ProximityRequest |
Corridor | 一連の座標で指定されたルートに沿って形状を取得します。 | NMACLE2CorridorRequest |
Bounding Box | 指定した長方形の地理的領域内のジオメトリを取得します。 | NMACLE2BoundingBoxRequest |
quadkey | 指定した quadkey 内にあるジオメトリを取得します。 | NMACLE2QuadkeyRequest |
属性 | 指定したクエリーと一致するすべてのジオメトリを取得します。 このタイプの検索はオンラインでのみ利用できます。 | NMACLE2AttributeRequest |
各検索リクエストタイプでは、次に示すような共通のプロパティがサポートされています。
プロパティ | 説明 | 値の例 |
---|---|---|
geometryType | 結果に指定する形状タイプを指定します(オンラインのみ)。以下の「検索結果について」の詳細を参照してください。 |
|
cachingEnabled | デフォルトは False です。 有効にすると、このようなオンライン検索リクエストから受信したジオメトリがローカルに保存されます。 | |
query | 現在オンラインリクエストでのみ使用できます。このプロパティを使用すると、ユーザーのジオメトリ属性にクエリフィルターを指定して、フィルターを通過したジオメトリのみが返されるようにできます。 使用できる文字列は、単純な等価演算子および比較演算子を持つ自由形式のテキストです。 |
検索リクエストオブジェクトを作成し、必要に応じて設定したら startWithListener:
startWithBlock:
、そのオブジェクトまたはメソッドを呼び出します。 検索の結果が、指定されたブロックまたはリスナーに配信されます。 CLE2Result
を呼び出し getGeometries()
て、検索条件に一致するジオメトリをオブジェクトから取得できます。 この形状結果のリストには、次のタイプのオブジェクトが含まれている可能性があります。
クラス | ジオメトリの説明 | メインプロパティ |
---|---|---|
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 個以上の内側の穴のポリゴンを加えたもので定義されます。 このため、クラス NMACLE2GeometryPolygon
に NMAGeoPolygon
はおよびセカンダリ NMAGeoPolygon
アレイが含まれています。
ローカルおよび完全な検索結果について
CLE2 は、ユーザーがアップロードしたデータの処理中に、ジオメトリを内部固定グリッドで分割するルックアップインデックスを作成します。 ジオメトリが複数のグリッドタイルにまたがる場合、検索インデックスには、アップロードされたジオメトリのより小さなスライスが含まれている可能性があります。 この動作により、最初に送信された形状の関連する部分のみを返すことができ、応答サイズと処理時間を削減できるため、検索のパフォーマンスが向上し、戻り値が最適化されます。
検索を実行する前に、検索領域の周囲のタイル内にあるジオメトリの一部のみに関心があるか(つまり、タイル状の「ローカル」ジオメトリ)、または元々アップロードされたとおりにすべてのジオメトリを受け取るかを指定できます。

次の 3 つのオプションを使用して、すべての結果を要求するか、ローカルの結果を要求するかを定義できます。 次のオプションは、すべての検索タイプで使用できます。
NMACLE2GeometryType | 意味 |
---|---|
NMACLE2GeometryFull | 結果には、アップロードされた元の形状が含まれます。 これがデフォルトです。 |
NMACLE2GeometryLocal | 結果には、到達可能なタイルの検索領域内にある処理済みの形状が含まれています。 |
NMACLE2GeometryNone | 形状はまったく返されません。指定した検索に一致する形状のプロパティまたは属性のみが返されます。 |
次 setGeometryType:
の方法を使用して、形状タイプを設定できます。
NMACLE2ProximityRequest *proximityRequest =
[[NMACLE2ProximityRequest alloc] initWithLayer:searchLayer center:coordinates radius:radius];
[proximityRequest setGeometryType:NMACLE2GeometryFull];
プロキシミティ検索要求の例
カスタムの位置情報検索を実行するに NMACLE2ProximityRequest
initWithLayer:center:radius
initWithLayers: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
オブジェクトには NSArray
NMACLE2Geometry
、検出されたすべてのオブジェクトを含むが含まれています。 異なるオブジェクトを返すことができるため、返されたジオメトリを使用する前に、型をテストすることをお勧めします。 たとえば、リクエスト完了ブロック内で次の操作を実行できます。
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);
}
}
検索さ NMACLE2GeometryMultiPoint
NSArray
NSDictionary
れた各プロパティには、座標と柔軟なユーザー定義フィールドを持つ属性の 2 つの重要なプロパティが含まれています。