Временное кэширование части карты (MapView)

#android #caching #maps #android-mapview

#Android #кэширование #Карты #android-mapview

Вопрос:

Я разрабатываю приложение с использованием MapView и GPS. Моя проблема в том, что пользователь может отключиться во время использования моего приложения, поэтому он будет ходить по полностью серой карте. Я хотел бы временно кэшировать карту, чтобы просмотреть ее позже. Я знаю, что кэшировать карту запрещено Google maps API, но я хочу быть уверенным, что ВРЕМЕННОЕ кэширование карты (и удаление ее при закрытии приложения) также запрещено.

Я слышал об openstreetmaps / osmdroid, но я хотел бы подтвердить, что я ДОЛЖЕН использовать его перед удалением половины моего кода.

Ответ №1:

Я знаю, что кэшировать карту запрещено Google maps API, но я хочу быть уверенным, что ВРЕМЕННОЕ кэширование карты (и удаление ее при закрытии приложения) также запрещено.

С помощью дополнения Google Maps для Android этого не добиться.

Ответ №2:

Поскольку мне нужен SatelliteView, я, наконец, использовал метод, который можно было бы улучшить.

Я запускаю поток, который запрашивает контроллер перейти в местоположение рядом с пользователем. Он загружен, и кэш управляется MapView:

 int latitudeSpan = mapView.getLatitudeSpan();
        int longitudeSpan = mapView.getLongitudeSpan();
        for(int i=-MEMORIZED_MAP_SIZE;i<=MEMORIZED_MAP_SIZE;i  )
        {
            for(int j=-MEMORIZED_MAP_SIZE;j<=MEMORIZED_MAP_SIZE;j  )
            {
                synchronized (this) 
                {
                    if(i==jamp;amp;j==0) j  ;
                    Message msg = new Message();
                    msg.arg1=latitude latitudeSpan*i;
                    msg.arg2=longitude longitudeSpan*j;
                    msg.setTarget(MainActivity.handler);
                    msg.sendToTarget();
                    try
                    {
                    wait(5000);
                    }
                    catch(Exception e){}
                }
            }
        }
  

Теперь мне просто нужно найти другой способ, кроме «wait (5000)», чтобы узнать, что часть карты, на которую я смотрю, загружена. Я изменю это сообщение, если найду таковое.

Комментарии:

1. Это нарушает условия предоставления услуг Google.

Ответ №3:

У вас есть полный пример этого?

     int latitudeSpan = mapView.getLatitudeSpan();
    int longitudeSpan = mapView.getLongitudeSpan();
    for(int i=-MEMORIZED_MAP_SIZE;i<=MEMORIZED_MAP_SIZE;i  )
    {
        for(int j=-MEMORIZED_MAP_SIZE;j<=MEMORIZED_MAP_SIZE;j  )
        {
            synchronized (this) 
            {
                if(i==jamp;amp;j==0) j  ;
                Message msg = new Message();
                msg.arg1=latitude latitudeSpan*i;
                msg.arg2=longitude longitudeSpan*j;
                msg.setTarget(MainActivity.handler);
                msg.sendToTarget();
                try
                {
                wait(5000);
                }
                catch(Exception e){}
            }
        }
    }
  

Мне удалось частично решить эту проблему, используя 2 фрагмента MapView, один из которых невидим.
Затем цикл перемещал камеру, чтобы создать кэш для другого MapView