【问题标题】:How to display rotated "map image" using Android Map v2 API如何使用 Android Map v2 API 显示旋转的“地图图像”
【发布时间】:2013-04-15 00:54:43
【问题描述】:

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

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

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

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),作者有类似的目标,但不幸的是,提供的答案并没有解决问题。但是,如果响应者建议的答案不起作用(并且不起作用),则响应者建议采用以下方法:

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

很遗憾,没有提供更多详细信息。我看过投影,但看不到实现目标的方法。

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

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

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

任何建议都将不胜感激......即使它们是高级“定向”建议。这就是说希望“定向”建议将有足够的细节让我连接点。

【问题讨论】:

    标签: android-maps-v2


    【解决方案1】:

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

    在高层次上,这是我所做的:

    1. 使用 LatLngBounds 首先获取包含我的两个 LatLng 坐标的地图图像。
    2. 获取该地图图像的投影,以提取/计算其他属性(目标、缩放级别、坡度/方位),然后用于显示图像。
    3. 然后,我使用 CameraPosition.Builder() 和上述提取/计算的参数来构建和显示最终的地图图像。

    所以这行得通,但我不确定这是实现目标的最有效方式。例如,我使用“LatLngBounds”,然后使用“moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 25)”来生成地图,以便提取缩放级别。不幸的是,使用“moveCamera”方法会生成“临时”地图图像并在生成和显示最终旋转的地图图像之前临时显示(至少在模拟器中)。除了第一张图像的残差短暂出现在屏幕上的视觉“故障”之外,似乎生成临时地图以获取关键属性最终地图所需的方法是一种低效的方法。

    也许有一种方法可以在不实际生成图像的情况下获得 zoomLevel?顺便说一句,在我的应用程序中,将 zoomLevel 设置为可能的最大级别,同时仍然显示整个洞是至关重要的。因为任何高尔夫球洞的长度可能会有很大差异,所以 zoomLevel 在各个洞之间可能会有很大差异,因此我不可能将 zoomLevel 设置为“X”并期望它适用于每个洞。此外,我的解决方案需要与世界上任何 40K+ 高尔夫球场配合使用,因此我无法为每个高尔夫球洞存储适当的缩放级别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多