如何在Android中的倾斜地图上将相机放置在屏幕底部

时间:2015-05-05 15:44:34

标签: android google-maps android-mapview

我想在我的Android应用中呈现一个地图,用3D引导用户。 为此,我使用com.google.android.gms.maps.GoogleMap对象。 更新GoogleMap的位置时,它会以提供的位置为中心。我希望地图将提供的位置放在屏幕的底部上。 我已经找到了一些如何实现这一目标的例子。 这是我用来更新地图位置的代码:

private static final int ZOOM_LEVEL = 20;
private static final int TILT = 90;
private float bearing; // from censors

private MapView gMapView;

private void updatePosition(final LatLng pos){
    GoogleMap map = gMapView.getMap();
    Point p = map.getProjection().toScreenLocation(pos);
    p.set(p.x, p.y - (gMapView.getHeight()/2));
    LatLng target = map.getProjection().fromScreenLocation(p);
    CameraPosition cap = new CameraPosition.Builder().target(target)
   .bearing(bearing).tilt(TILT).zoom(ZOOM_LEVEL).build();

    map.moveCamera(CameraUpdateFactory.newCameraPosition(cap));
}

如果我不使用倾斜,或者如果转换是反转的(如p.set(p.x, p.y + (gMapView.getHeight()/2));),这可以正常工作,但是当像上面的代码一样将中心转换到屏幕的底部时,定位会来回跳转在职位之间。

我找到了一种可以正确放置相机的替代解决方案的解决方案:

CameraPosition cap = new CameraPosition.Builder().target(pos)
   .bearing(bearing).tilt(TILT).zoom(ZOOM_LEVEL).build();    
map.moveCamera(CameraUpdateFactory.newCameraPosition(cap));
map.moveCamera(CameraUpdateFactory.scrollBy(0, -gMapView.getHeight()/2));

但它呈现两次,导致地图闪烁。

有没有人有关于如何使用屏幕底部的参考点渲染倾斜地图的解决方案?

1 个答案:

答案 0 :(得分:0)

我使用Java Geodesy Library解决了这个问题。

当地图倾斜时,使用地图转换原点不准确。 因此,使用地图计算转换是FUBAR。然而,使用独立的api工作正常。

(bar_id, foo_id)