2016-06-01 4 views
0

Я использую OSMDROID. В настоящее время, когда я перемещаюсь по карте, она остается такой, какая есть (северное направление остается наверху моего экрана), но я хочу повернуть карту в соответствии с направлением устройства. например если я двигаюсь к востоку, карта поворачивается с правой стороны и показывает восток поверх экрана моего устройства.OSMDROID: Как повернуть карту OSM по направлению устройства?

Есть ли решение для этого?

ответ

2

В примере приложения есть пример. Вы еще посмотрели на это? Это не идеально, и вы хотите дополнить его с GPS заголовок

https://github.com/osmdroid/osmdroid/blob/master/OpenStreetMapViewer/src/main/java/org/osmdroid/samplefragments/SampleHeadingCompassUp.java

`` `` `

//lock the device in current screen orientation 
    int orientation = getActivity().getRequestedOrientation(); 
    int rotation = ((WindowManager) getActivity().getSystemService(
      Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation(); 
    switch (rotation) { 
     case Surface.ROTATION_0: 
      orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; 
      this.deviceOrientation=0; 
      break; 
     case Surface.ROTATION_90: 
      this.deviceOrientation=90; 
      orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; 
      break; 
     case Surface.ROTATION_180: 
      this.deviceOrientation=180; 
      orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; 
      break; 
     default: 
      this.deviceOrientation=270; 
      orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; 
      break; 
    } 

    getActivity().setRequestedOrientation(orientation); 


    LocationManager lm = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 
    try { 
     //on API15 AVDs,network provider fails. no idea why 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, (LocationListener) this); 
     lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, (LocationListener) this); 
    } catch (Exception ex) { 
    } 
    compass = new InternalCompassOrientationProvider(getActivity()); 
    compass.startOrientationProvider(this); 
    mMapView.getController().zoomTo(18); 

` `` ``

настроить поворот, принимая во внимание устройство вращения

`` ``

@Override 
public void onOrientationChanged(float orientation, IOrientationProvider source) { 
    //System.out.println("compass " + orientation); 
    //System.out.println("deviceOrientation " + deviceOrientation); 
    //this part adjusts the desired map rotation based on device orientation and compass heading 
    float t=(360-orientation-this.deviceOrientation); 
    if (t < 0) 
     t+=360; 
    if (t > 360) 
     t-=360; 
    //System.out.println("screen heading to " + t); 
    mMapView.setMapOrientation(t); 
} 

`` ``

+0

Это не то, что я хотел ... –

+1

Хорошо, хорошо, он делает то, что вы описали. обновите описание или предоставите больше информации о том, что вы хотите. Возможно, это то, что вы хотите ... https://github.com/osmdroid/osmdroid/blob/44408833ca2c16c5cf35b8681e9fa02ef3099263/osmdroid-android/src/main/java/org/osmdroid/views/overlay/gestures/RotationGestureOverlay.java – spy

+0

иногда это все о ключевом слове. Я получил ответ. установив ориентацию карты, я сделал это. Кстати, спасибо за вашу помощь. –