2015-07-28 2 views
0

Я разрабатываю приложение для Android, которое должно давать указания с использованием OpenStreetMap (OSM).Как отрегулировать уровень масштабирования для OSM?

Моя проблема заключается в том, что я не могу найти правильные функции API, чтобы исправить уровень масштабирования карты, когда пользователь вводит исходный код и адрес назначения.

До сих пор на карте отображались только части вычисленного пути.

Я хотел бы исправить уровень масштабирования таким образом, чтобы весь путь вписывался в экран.

Может ли кто-нибудь дать мне подсказку, где я могу найти правильную документацию?

Мой код

Это мой код:

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
    <Button 
     android:id="@+id/buttonSearchDest" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right" 
     android:layout_weight="0" 
     android:text="@string/GetDirection"/> 
</LinearLayout> 

защищены недействительным onPostExecute (Список foundAdresses) {

 if (foundAdresses == null) { 
      Toast.makeText(getApplicationContext(), "Geocoding error", Toast.LENGTH_SHORT).show(); 
     } else if (foundAdresses.size() == 0) { 
      Toast.makeText(getApplicationContext(), "Address not found.", Toast.LENGTH_SHORT).show(); 
     } else { 
      Address address = foundAdresses.get(0); 
      String addressDisplayName = address.getExtras().getString("display_name"); 
      if (mIndex == START_INDEX){ 
       startPoint = new GeoPoint(address.getLatitude(), address.getLongitude()); 
       markerStart = updateItineraryMarker(markerStart, startPoint, START_INDEX, 
         R.string.departure, R.drawable.marker_departure, -1, addressDisplayName); 
       map.getController().setCenter(startPoint); 
      } else if (mIndex == DEST_INDEX){ 
       destinationPoint = new GeoPoint(address.getLatitude(), address.getLongitude()); 
       markerDestination = updateItineraryMarker(markerDestination, destinationPoint, DEST_INDEX, 
         R.string.destination, R.drawable.marker_destination, -1, addressDisplayName); 
       map.getController().setCenter(destinationPoint); 
      } 

      getRoadAsync(); 

     } 
    } 
} 
+0

Не могли бы вы подробнее рассказать о том, что вы сделали до сих пор, т. Е. Как вы попытались исправить уровень масштабирования и какие API-интерфейсы вы используете. –

+0

Вы используете API OSMDroid? Пожалуйста, будьте более конкретными. – dkiselev

ответ

1

Возможно, если бы вы могли каким-то образом получить общее расстояние от точки А и точки B, затем на основе полученного расстояния свяжите его с определенным уровнем масштабирования, а затем оживите карту, чтобы быть в центре.

Давайте предположим, что прямая линия между точками А и В является ...

10 км. И вы знаете, что 10 KM достаточно отображается на MapView на уровне масштабирования ... 16.

Так что вы, что вы могли бы рассмотреть возможность сделать это:

mapView.getController().setZoom(16); 
mapView.getController().animateTo(myPoint1); 

Где myPoint1 находится центральная точка между точками А и B, чтобы вы могли просмотреть весь маршрут.

Я лично новичок в разработке Android, поэтому я не знаю разницы между animateTo и setCenter ... Но я надеюсь, что мой ответ каким-то образом подскакивает в голове, как вы могли бы решить свою проблему?

+1

Спасибо, как вычислить центральную точку для точки A и точки B.? –

+0

Вы можете просмотреть этот ответ другого пользователя, чтобы найти центральную точку между двумя точками, если вы используете Geopoints. Чтобы лучше понять, вы должны прочитать формулу Хаверсина. http://stackoverflow.com/a/11682934/5141891 –

Смежные вопросы