#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