カメラを使用します
HERE SDK では、マップのビューを変更する方法がいくつか用意されています。 地図のスタイルを使用して地図の外観を変更できますが、カメラを使用してさまざまな視点から地図を表示できます。
たとえば、 HERE SDK では、ターゲットの位置の設定、カメラのチルト、ズームイン / ズームアウト、または方位角の設定を行うことができます。
注
一目で確認できます
MapCamera
マップ mapView.getCamera()
のビューを操作するには、によって返されたを使用します。 - を呼び出し
camera.lookAt(new GeoCoordinates(52.530932, 13.384915))
て、新しいターゲットの場所を設定します。 これにより、マップ ビューがただちに新しい場所に切り替わります。 - マップ ビュー の現在の中心位置を取得
mapView.getCamera().getState().targetCoordinates
するには、を呼び出します。 - 距離をメートル単位で設定して、地図をズームし
mapView.getCamera().lookAt(new GeoCoordinates(52.373556, 13.114358), orientation, new MapMeasure(MapMeasure.Kind.DISTANCE, distanceInMeters))
ます。 カメラ State
のプロパティから現在の距離を取得します。 GeoOrientationUpdate
を設定 して、カメラのチルト角度およびベアリング角度を指定します。 - を使用してトランスフォームの中心を設定
MapCamera.setPrincipalPoint(Point2D)
し、マップ ビューを中心とするデフォルトのピボットポイントを変更します。 - を呼び出し
camera.getBoundingBox()
て、現在表示されている領域の境界を取得します。 - を呼び出し
camera.lookAt(geoBox, new GeoOrientationUpdate(null, null))
て、表示する領域の境界を設定します。 null を設定すると、ベアリングおよびチルトの以前の値が保持されます。 - 地図を移動します。 を使用
MapCameraAnimationFactory
して、 A ~ B の基本的なアニメーションを実行します。 多重定義されたいずれかの方法を使用して、アニメーションをカスタマイズ flyTo()
します。たとえば、高度なアニメーションに使用します。
デフォルトでは、カメラは地図の中央に配置されます。 鳥の目から見てまっすぐ下を見ると、地図は 北を向いています。 これは、デバイスの上端が地図の北を指していることを意味します。
カメラの位置を変更します
アニメーションを使用してマップを新しい場所に移動する場合は、MapCameraAnimationFactory
の flyTo()
メソッドを使用します。 新しい地図の場所に瞬時に切り替えたい場合は、新しいターゲットを設定して切り替えます。
新しいカメラターゲットを設定することで、カメラの位置を変更し、マップ ビューの中央に表示される位置を効果的に変更できます。 lookAt()
このメソッドは、さまざまなオーバーロードで使用できます。 例をいくつか示します。
camera.lookAt(new GeoCoordinates(52.530932, 13.384915));
double distanceInMeters = 1000 * 2;
MapMeasure mapMeasureZoom = new MapMeasure(MapMeasure.Kind.DISTANCE, distanceInMeters);
camera.lookAt(new GeoCoordinates(52.530932, 13.384915), mapMeasureZoom);
GeoBox geoBox = new GeoBox(new GeoCoordinates(52.373556, 13.114358),
new GeoCoordinates(52.611022, 13.479493));
double bearingInDegress = 0;
double tiltInDegress = 45;
GeoOrientationUpdate orientation =
new GeoOrientationUpdate(bearingInDegress, tiltInDegress);
camera.lookAt(geoBox, orientation);
カメラの向き ( 方位、傾き ) を変更 しても 、地図の位置は変更されません。
注 : 重要です
HERE SDK で は、 [0,22] の範囲の専用のズームレベルもサポートされており、必要な詳細レベルをすばやく達成できます。 zoomTo()
カメラのメソッドを呼び出し State
てズーム レベルを設定し、カメラのプロパティから現在のズーム レベルにアクセスします。 重要 : ズーム レベルがDouble
として設定されています。タイプDouble
のdistanceInMeters
パラメーターと混合しないでください。
カメラを変更すると、マップ ビューの遠近法をプログラムで変更することのみが可能ですが、地図をズームしたり、回転したり、地図を傾けたりするためのジェスチャを実行する場合と同様に、マップ ビュー自体を直接制御することはできません。 地図を直接操作するために使用できるジェスチャの概要については、「ジェスチャ」セクションを参照してください。
注 : 情報
は MapCamera
常に定義済みです State
。 たとえば、は State
現在のターゲットの場所を提供しています。 このターゲット位置は、デフォルトの主な点が変更されていない限り、マップ ビューの現在の中心を示します ( 以下を参照 ) 。
または、凹形のリボンアニメーションが表示されている場所にフライします。
private void flyTo(GeoCoordinates geoCoordinates) {
GeoCoordinatesUpdate geoCoordinatesUpdate = new GeoCoordinatesUpdate(geoCoordinates);
double bowFactor = 1;
MapCameraAnimation animation =
MapCameraAnimationFactory.flyTo(geoCoordinatesUpdate, bowFactor, Duration.ofSeconds(3));
mapCamera.startAnimation(animation);
}
カメラを回転させます
カメラを使用 すると、地図を直接回転することはできませんが、代わりにカメラの向きを変更できます。 bearing
のパラメータを変更する GeoOrientationUpdate
と、マップを回転する場合と同じ効果が得られます。
地図の向きは通常、方位角で指定します。 「 Bearing 」は北から時計回りに度でカウントされるナビゲーション用語です。
図 : ベアリングの方向。 デフォルトでは、カメラのベアリング値は 0 ° です。 上の図に示すように方位角を 45 ° に設定すると、カメラが 反時計回りに回転すると地図が目に見え 、地図上で方位の方向が新しい上向きになり、デバイスの上端を指します。 これは、ハイキング中に特定の方向に紙の地図を保持して回転するのと似ています。 マップの上端が目的の方向を向いている場合は、自分自身の向きを変更する方が簡単です。 ただし、これが必ずしも真の北の方向であるとは限りません( bearing=0 ° )。
ベアリング軸は常に地面に垂直で、現在のカメラの向きに関係なくカメラを通過することに注意してください。
次のコードは、カメラを 90 ° 回転させます。
double bearingInDegress = 90;
double tiltInDegress = 0;
GeoOrientationUpdate orientation =
new GeoOrientationUpdate(bearingInDegress, tiltInDegress);
double distanceInMeters = 1000 * 7;
MapMeasure mapMeasureZoom = new MapMeasure(MapMeasure.Kind.DISTANCE, distanceInMeters);
mapView.getCamera().lookAt(
new GeoCoordinates(52.373556, 13.114358), orientation, mapMeasureZoom);
実際には、ビューアではマップを 90 ° 左に回転させて表示できます。
カメラを傾けます
このカメラを使用して、 2D 地図の平坦な表面を 3D の視点に変換し、たとえば、地平線に向かって見える可能性のある長距離道路を確認することもできます。 デフォルトでは、カメラは傾斜していません(チルト = 0 ° )。
カメラのチルト値に加えて、カメラのベアリング角度(上記を参照)を操作できます。 HERE 傾斜値を変更した場合の影響を示します。 以下の図を参照して、利用可能なカメラ軸を確認してください。
傾き値が 0 ° の場合、カメラの光学軸が地面に垂直になっています。 チルト角度は常にこの垂直軸から計算されます。 チルト角はカメラの光軸に関連しています。
図に示されているように、カメラを 45 ° 傾けると、カメラの鳥の視点が 3D の視点に変わります。 カメラのチルト値のみを変更するには、次のコードを使用します。
double bearingInDegress = 0;
double tiltInDegress = 45;
GeoOrientationUpdate orientation =
new GeoOrientationUpdate(bearingInDegress, tiltInDegress);
double distanceInMeters = 1000 * 7;
MapMeasure mapMeasureZoom = new MapMeasure(MapMeasure.Kind.DISTANCE, distanceInMeters);
mapView.getCamera().lookAt(
new GeoCoordinates(52.373556, 13.114358), orientation, mapMeasureZoom);
次の図に示すように、チルト角はターゲット位置の垂直軸から計算されます。 観測者の真下を直進する方向は 直下視と呼ばれています。 チルト値を設定すると、カメラが効果的に移動し、カメラのターゲットに焦点を当て続けます。
各チルト値は、デルタとしてではなく絶対値として適用されることに注意してください。つまり、後続のチルト値は常にカメラのデフォルトの位置から適用され、前の位置からは適用されません。 したがって、同じチルト値を複数回設定しても、カメラのチルト軸は変更されません。 これは、ほとんどのカメラ操作で共通です。 範囲外の値はクランプされます。
図 : 地図を傾けます。 すべての軸を同時に操作できます。
カメラを傾けたときに、以下に示すようにベアリング値を変更すると、異なる結果が生じることに注意してください。 傾斜したカメラでは、方位値を設定するとターゲットの位置が異なり、傾斜していないカメラではターゲットの位置が維持されます。
図 : ベアリングおよびチルト用のカメラの軸。 既定では、マップのピボットポイントまたは主要ポイントはマップ ビューの中央に配置されます。 ターゲット座標がマップ ビュー内に配置されるポイントを指定します。 新しい主点を設定すると、マップがただちに移動し、現在のターゲット座標が新しい主点にレンダリングされます。 マップビューの原点を左上 (0, 0) から基準にしてピクセル単位で設定されます。
注
主なポイントは、すべてのプログラムマップの変形 ( 回転、軌道、チルト、ズーム ) に影響し、 2 本の指でのパンジェスチャによってマップを傾斜させます。 ピンチ回転などのその他のジェスチャには影響がありません。
通常は、ターン・バイ・ターンナビ (矢印ナビ)実行中にトランスフォームセンターを少し下げるなど、主要なポイントを 1 回だけ設定します。これにより、ユーザーは前方の道路をより多く見ることができます。 これを行うに mapViewHeightInPixels
は、マップ ビューのピクセルサイズ ( レイアウトとデバイスの画面サイズに基づいて ) を取得し、高さを 3/4 下げて 0.75 倍にする必要があります。 次の例を参照してください。
double mapViewWidthInPixels = mapView.getWidth();
double mapViewHeightInPixels = mapView.getHeight();
Point2D newTransformCenter = new Point2D(mapViewWidthInPixels / 2, mapViewHeightInPixels * 0.75);
camera.setPrincipalPoint(newTransformCenter);
cameraTargetView.setX((float) newTransformCenter.x - cameraTargetView.getWidth() / 2);
cameraTargetView.setY((float) newTransformCenter.y - cameraTargetView.getHeight() / 2);
上記のコード スニペットは、現在の地図の中央を画面に表示されている地図の 3/4 だけ下に移動する新しい主要ポイントを設定します。 設定すると、以降のすべてのマップ操作がこの新しい主要ポイントを中心にピボットされます。 たとえば、プログラムでマップを回転する場合、マップは常に主軸を中心に回転します。
上の例で cameraTargetView
は、主なポイントを中心にしてカスタムをレンダリングする方法についても説明します。このコードの完全なコードは 、カメラ のサンプルアプリで確認できます。