почему osmdroid загрузил много карт. & Масштабировать не в то место

Я создаю приложение, которое должно использовать OpenStreetMap. Карта загружена. Однако, когда я уменьшил масштаб, я обнаружил, что загружено более одной карты ... на самом деле, кажется, что их бесконечное количество ... Одна карта посередине, одна вверху и одна внизу; на самом деле, если вы прокрутите экран вниз, вы увидите больше ...

В чем причина? Извините, stackoverflow не позволяет мне загрузить фото. Мой код прикреплен, и вы можете попробовать ..

Другое дело, что я нашел широту и долготу своего текущего местоположения с помощью служб определения местоположения и сохранил их в GeoPoint; затем я установил центр масштабирования в эту точку, но осм перешел в другую точку. Очень далеко.

Мой код и файл XML прилагаются ниже

public class OsmdActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    MapView mapView = (MapView) findViewById(R.id.mapview);
    mapView.setTileSource(TileSourceFactory.MAPNIK);
    mapView.setBuiltInZoomControls(true);
    MapController mapController = mapView.getController();
    mapController.setZoom(10);

    double lat = 1.29377413882149 * 1000000;
    double lon = 103.771969817518 * 1000000;
    GeoPoint p = new GeoPoint(lat, lon);
    mapController.setCenter(p);
}}



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <org.osmdroid.views.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mapview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"/>
</LinearLayout>

person Kelsie    schedule 09.05.2012    source источник


Ответы (3)


Я предполагаю, что у вас их больше, чем в архиве (карты) в папке SD card / osmdroid, и из-за этого вы видите больше карт.

Для центра вашего местоположения вы можете использовать.

    mMapView.getController().animateTo(yourPosition);
person Ahyle Blue    schedule 09.05.2012
comment
Привет, спасибо за ответ, но я не использую офлайн-карты. Это вызовет проблему? - person Kelsie; 09.05.2012
comment
Привет, спасибо, я знаю, в чем моя проблема! Я должен удалить этот источник, чтобы использовать онлайн-карту ... Однако что вы подразумеваете под несколькими архивными картами для автономного использования? - person Kelsie; 09.05.2012
comment
Я так не думаю. Возможно, у вас слабое интернет-соединение или что-то в этом роде. Или вы можете проверить свою SDCard на наличие папки osmdroid и очистить ее, если она не пуста. - person Ahyle Blue; 09.05.2012
comment
Когда вы используете онлайн-карту, osm droid загружает кеш карты, поэтому второй раз, когда вы открываете приложение, карта загружается быстрее, чем в первый раз. Насколько мне известно, osm использует папку SdCard \ osmdroid для хранения кеша карт. Вам нужна карта всего мира или только какого-то континента \ страны \ города? - person Ahyle Blue; 09.05.2012
comment
Большое спасибо за вашу помощь. На ваш вопрос, я использую карту только для одного города. Да, вы правы, это очень расточительно .. Ну, я подумал об использовании автономной карты, но для этого нужно вручную добавить zip-файл osmdroid на sdcard ?? Мне нужно распространить приложение, как только я закончу, мои пользователи могут не захотеть добавлять файл вручную .. Есть ли у вас какие-либо предложения по этому поводу? Могу ли я поместить zip-файл где-нибудь в проекте, и он будет автоматически записан на SD-карту пользователя при установке? - person Kelsie; 09.05.2012
comment
В своем приложении я тоже использую только один городской архив с поддержкой масштабирования от 12 до 16. Использую задачу для скачивания архива по внешней ссылке и копирования в директорию sdCard \ osmdroid. Для этого вы можете использовать пример AsyncTask с сайта android.developer.com и должны иметь разрешение в файле manifest.xml android: name = android.permission.WRITE_EXTERNAL_STORAGE / › - person Ahyle Blue; 09.05.2012
comment
Также для использования офлайн-карты я рекомендую вам использовать этот инструмент link. Просто установите на MapSource OpenStreetMap Mapnik и создайте желаемый атлас. Положите результат в архив с названием mapnik.zip и скопируйте в sdCard \ osmdroid. Удачи! - person Ahyle Blue; 09.05.2012

Для меня это было то, что я не мог установить центр при создании Activity. Если я подожду ~ 200 мс, прежде чем установить центральную точку, все будет работать нормально.

Вот некрасивое исправление:

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            GeoPoint point = new GeoPoint((int) (52.520820* 1E6),(int) (13.409346* 1E6));
            mapView.getController().animateTo(point);
        }
    }, 200);
person stephanlindauer    schedule 12.08.2014
comment
Спасибо! Вы спасаете мне день. - person tsil; 07.09.2014

Проблема с центрированием в местоположении должна быть исправлена ​​в osmdroid версии 4.3. Обходной путь с использованием postDelayed больше не требуется для версии 4.3 и выше.

Подробности: при следующей фиксации в osmdroid вызовы «animateTo ()» и т. Д., Которые ранее требовали правильной работы макета, теперь будут записываться и воспроизводиться автоматически после создания макета.

https://github.com/osmdroid/osmdroid/commit/2f38d492888290248908985d08d07d8d05d07d7d8d7d8d5d5d5

person headuck    schedule 07.09.2015