Uber や Easy Taxi のようなスタイルのネイティブアプリケーションを作成できるように、
[ Control Type ] プロパティが Maps の Grid コントロールに一連のプロパティが関連付けられています。
これらのプロパティに設定する値はレイヤーとして表示され、地図の動作を変更するために使用します。
次のレイヤーがあります:
- 選択レイヤー: ナビゲーションモードを位置選択用に変更できます。
- 方向レイヤー: 地図情報をポイント間の経路として表示できます。
- アニメーションレイヤー: 地図上のポイント間にアニメーションを描画できます。
次に、各レイヤーとその使用シナリオ、各レイヤーがもたらす可能性、およびこれらの目的を達成するためのプロパティについて詳しく説明します。
1. 選択レイヤー (位置選択用のナビゲーション)
地図 (
[ Control Type ] プロパティが Maps に設定されたグリッド) で位置 (
GeoPoint) の選択を可能にするナビゲーションモードを有効にできます。このナビゲーションでは、中央に固定されたアイコンがあり、地図を移動して位置を選択できます (その座標を取得できます)。これを制御するには、
[ Selection Layer ] プロパティを使用します。
[ Selection Layer ] プロパティを True に設定すると、実行時に地図を移動できるようになります。地図を移動すると、中央に固定されたアイコンにより位置が取得され、イベントがトリガーされます。
このナビゲーションは、
PickLocation メソッドを使用したときに得られる結果に似ています。
アイコンは、
[ Location Selection Target Image ] プロパティを使用して設定できます。
また、
[ Selection Layer ] プロパティを True に設定すると、
[ Selection Target Image Class ] プロパティが有効になり、クラスを当該画像に関連付けることができます (既定では、SDMapPinImage という名前の下にクラスが作成されます)。
さらに、
[ Selection Layer ] プロパティを True に設定すると、ControlValueChanging と ControlValueChanged の 2 つのイベントが使用可能になります。
ControlValueChanging(GeoPoint) イベント
このイベントは、地図の移動中にトリガーされます。次に例を示します。
Event Grid1.ControlValueChanging(&geoPoint)
composite
msg(&geoPoint.Tostring())
endcomposite
Endevent
ControlValueChanged(GeoPoint) イベント
このイベントは、地図の移動を停止したときにトリガーされます。次に例を示します。
Event Grid1.ControlValueChanged(&geoPoint)
composite
msg(&geoPoint.Tostring())
endcomposite
Endevent
地図の移動先の位置は、GeoPoint タイプのパラメーターで取得します。
この例のコードは、地図の移動先の位置に対応する文字列を示しています (つまり、POINT(Long Lat))。
ControlValueChanged イベントは複数の値でオーバーロードされるため、パラメーターは (GeoPoint タイプではなく) Character タイプになることがあります。
2. 方向レイヤー (位置間の方向)
地図 (
[ Control Type ] プロパティが Maps に設定されたグリッド) で 1 つ以上の位置 (GeoPoint) 間の最善の経路を表示できます。この目的のために、
[ Directions Layer ] プロパティが用意されています。
[ Directions Layer ] プロパティを True に設定すると、グリッドのポイント間の経路を描画できます。グリッド内の各ポイントまたは位置は、
[ Location Attribute ] プロパティで設定した項目属性または変数によって指定されます。
また、
[ Directions Layer ] プロパティを True に設定すると、さらに 2 つのプロパティ (
[ Transport Type ] プロパティと
[ Default Route Class ] プロパティ) を設定できるようになります。
位置間の経路を表示するもう 1 つの方法 ( [ Direction Layer ] プロパティを使用しない)
位置があらかじめ決まっていないために、事前に経路を描画するのではなく、現場で位置を決める必要がある場合があります。これに対応するために、
Maps 外部オブジェクトには、Geolocation 外部オブジェクトを進化させる形で地理機能が用意されています。
Maps 外部オブジェクトで、次のメソッドを使用して位置間の経路を表示します:
このメソッドを使用すると、2 つの GeoPoint 間の方向を計算できます。
構文: Maps.CalculateDirections(&InitialGeoPoint,&FinalGeoPoint)
メソッドを呼び出すと、SDT で DirectionsCalculated イベントから非同期に経路が提供されます。
- DirectionsCalculated イベント
CalculateDirections メソッドを呼び出した後、2 つの GeoPoint 間の方向を返します。
構文: DirectionsCalculated(SDT Collection Route, Genexus.Common.Messages)
Event Maps.DirectionsCalculated(&routes, &messages)
composite
if &messages.Count = 0
&i = 1
do While &routes.Count >= &i
&geoline = &Routes.Item(&i).geoline
Grid1.DrawGeoLine(&geoline,"8")
&i+=1
enddo
endif
endcomposite
endevent
&routes is a collection variable of the Route Structure Data Type.
Maps 外部オブジェクトにより取得された 2 つ以上の位置間の方向を地図上に描画できるように、 [ Control Type ] が Maps に設定された Grid コントロールには、一連のメソッドが用意されています。
このメソッドを使用すると、 [ Control Type ] プロパティが Maps に設定された Grid コントロールに
GeoLine を描画できます。
構文: DrawGeoLine(Geoline, Theme Class Name)
テーマクラス名は、Character データタイプに基づいています。
このメソッドを使用すると、 [ Control Type ] プロパティが Maps に設定された Grid コントロールでズームレベルを指定できます。
構文: SetZoomLevel(Numeric)
Numeric は 1 ~ 23 の値です。
このメソッドを使用すると、 [ Control Type ] プロパティが Maps に設定された Grid コントロールで地図の中心を指定できます。
構文: SetMapCenter(GeolPoint, Numeric)
GeoPoint は地図の中心となる座標を示します。
Numeric はズームレベルを示します (オプション)。
例:
composite
&geoPoint.FromString("POINT( -56.1701774597168 -34.91676309400329)")
Grid1.SetMapCenter(&geoPoint,8)
endcomposite
地図 (
[ Control Type ] プロパティが Maps に設定されたグリッド) で 1 つ以上の位置 (GeoPoint) のアニメーションを表示できます。これにより、たとえば、Uber や Cabify などの一般的なモビリティアプリケーションですべての車両を表示できます。
このようなことに対応するには、
[ Animations Layer ] プロパティを True に設定する必要があります。これにより、グリッド内の場所 (GeoPoint または Geolocation ドメイン) を示す項目属性または変数によって指定したレコードについて、実行時にアニメーションを表示できるようになります。
詳細情報:
[ Animations Layer ] プロパティ
適用範囲
オブジェクト: Panel
ジェネレーター:
Android、
Apple、
Angular