2015-05-05 1 views
0

Я хочу отобразить карту в своем приложении для Android, которое направляет пользователя в 3D. Для этого я использую объект com.google.android.gms.maps.GoogleMap. При обновлении положения GoogleMap он центрируется в заданном положении. Я хочу, чтобы карта помещала предоставленную позицию на нижнее . Я нашел несколько примеров того, как это можно достичь. Это код, который я использую для обновления положения карты:Как я могу поместить камеру в нижней части экрана на наклонной карте в Android

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)); 

Но это делает в два раза, в результате чего карта мерцать.

ли кто-нибудь есть решение о том, чтобы сделать наклонную карту с опорной точкой на нижней части экрана?

+0

Если вы загрузите «скриншот», который лучше объяснить. Кроме того, пожалуйста, обратитесь к [здесь] (http://stackoverflow.com/questions/28951974/android-google-maps-api-v2-get-my-bearing-location/28953010#28953010), чтобы узнать, помогает ли это. – bjiang

ответ

0

Я решил это, используя Java Geodesy Library.

Преобразование происхождения с помощью карты неточно, когда карта наклонена. Таким образом, используя карту для расчета преобразования, это FUBAR. Однако использование независимого api отлично работает.

private LatLng currentLatLng; 
private float AR_MAP_TRANSLATE = 100f; 

private CameraUpdate arCamera() {  
    GlobalCoordinates start = new GlobalCoordinates(currentLatLng.latitude, currentLatLng.longitude); 
    GlobalCoordinates target = geoCalc.calculateEndingGlobalCoordinates(
    Ellipsoid.WGS84, start, mapBearing, AR_MAP_TRANSLATE); 
    LatLng mapTarget = new LatLng(target.getLatitude(), target.getLongitude()); 
    CameraPosition cap = new CameraPosition(mapTarget, 
        AR_MAP_ZOOM, AR_MAP_TILT, mapBearing); 

    return CameraUpdateFactory.newCameraPosition(cap); 
} 
Смежные вопросы