如何使用Android Map v2 API显示旋转的“地图图像”

时间:2013-04-15 00:54:43

标签: android-maps-v2

作为背景......我正在使用 Android Google Map v2 开发原生Android应用。我的要求如下:

要求#1:显示由两个LatLng绑定的特定地理区域的卫星图像。请注意,这些LatLng表示我想要显示的矩形地图区域的“中心线端点”(与地图区域的东北角和东南角相对)。为了清楚起见,我想要显示的地图区域是高尔夫球场上的一个洞,而我所代表的两个LatLngs代表了特定高尔夫球洞的球座位置和球/洞位置。

没有问题....这部分的解决方案似乎非常简单。我使用以下代码显示具有适当边界的地图:

public void onCameraChange(CameraPosition arg0) {
// Determine the bounds and then move camera
LatLngBounds bounds = new LatLngBounds.Builder()
  .include(TPS_PIN)
  .include(TPS_HOLE)            
  .build();
googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 10));    

要求#2:旋转地图图像,以便在纵向模式下,Tee位置位于手机屏幕的底部,而Pin / hole位置位于手机屏幕的顶部。

虽然有一种旋转地图图像的方法(CameraPosition.Builder使用它的“方位”参数)显然你不能将它与LatLngBounds方法结合使用(如上所述)来实现我的目标(绑定和旋转)地图图片)。还有另一个StackOverflow帖子(Android maps V2 newLatLngBounds with bearing),其中作者有类似的目标,但不幸的是,提供的答案并没有解决问题。但是,如果他的建议答案不起作用(并且没有),响应者建议采用以下方法:

  

“您可能需要使用Projection计算目标并自行缩放,因此您可以将边界设置为上面第一个moveCamera()调用的一部分。”

不幸的是,没有提供更多细节。我看过Projection,却看不到用来实现目标的方法。

有没有人看到一种方法来实现我的目标(绑定和旋转)?也许有一种方法可以使用投影来做到这一点?请记住,我只有两个可用的LatLng点(LatLng的三通位置和引脚/孔位置)。我需要确保整个孔适合屏幕。

如上所述,我需要确定如何旋转图像,以便当手机处于Potrait模式时,Tee位于手机屏幕的底部,并且孔/ Pin位置位于屏幕顶部。再次需要确保整个孔(T形和销/孔)适合屏幕。有没有办法将特定LatLng“固定”到屏幕底部,将另一个LatLng“固定”到手机屏幕顶部?

重申我需要一个适用于Android Maps v2 api的解决方案。

任何建议都会受到高度赞赏......即使它们是高水平的“定向”建议。这说希望“定向”建议有足够的细节,让我连接点。

1 个答案:

答案 0 :(得分:0)

在这里回答我自己的问题。我不确定这是否是实现我的目标的最佳方式(即,使用适当的缩放级别显示绑定的旋转图像(至90度))..如果有更好的方法来做到这一点,我很乐意听到它们。

这是我做的最高级别:

  1. 使用LatLngBounds首先获取包含我的两个LatLng坐标的地图图像。
  2. 获得该地图图像的投影,以提取/计算随后用于显示图像的其他属性(目标,缩放级别,坡度/方位)。
  3. 然后我使用CameraPosition.Builder(),前面提取的参数/ calc'd来构建和显示最终的地图图像。
  4. 所以这有效,但我不确定这是实现目标的最有效方式。例如,我使用“LatLngBounds”然后“moveCamera(CameraUpdateFactory.newLatLngBounds(bounds,25)”来生成地图,这样我就可以提取zoomLevel。不幸的是,使用“moveCamera”方法会生成“临时”地图图像在生成并显示最终旋转的地图图像之前,间接显示(至少在模拟器中)。除了第一个图像的残差短暂出现在屏幕上的视觉“故障”之外,似乎生成一个临时地图以获得关键属性最终地图所需的是一种效率低下的方法。

    也许有办法获得zoomLevel而不实际生成图像?顺便说一句,在我的应用程序中,将zoomLevel设置为尽可能最大的水平同时仍然显示整个孔是至关重要的。因为任何高尔夫球洞的长度可以显着变化,所以zoomLevel在各个洞之间可以显着变化,因此我没有机会将zoomLevel设置为“X”并期望它适用于每个洞。此外,我的解决方案需要与世界上任何一个40K +高尔夫球场一起使用,因此我不能为每个高尔夫球洞存储适当的变焦水平。