Запоминать уже загруженные области
Добавлено: 26 май 2012, 16:15
Привет.
Мне кажется тема должна была где-то обсуждаться, но поиском ничего не нашел.
Я пишу приложение для мобильного устройства, которое с помощью некоторого API получает с сервера географические координаты объектов, ближайших к пользователю и отображает их на карте. (при этом пользователь может двигаться и информация подгружается по мере передвижения пользователя)
Информация об объектах кэшируется локально на устройстве в базе sqlite, так как запросы к api могут идти по медленному edge или gprs каналу.
Подскажите пожалуйста, как можно было бы запоминать области, для которых объекты уже загружены в базу? Чтобы, допустим, если пользователь ездит каждый день по одному и тому же маршруту, не грузить каждый раз объекты заново.
У меня есть две идеи:
1) После API запроса cохранять области в виде пар точек (левая-верх, правая-низ) в базу и перед другим API-запросом к серверу проверять, нет ли уже этой области в базе, или области которая покрывала бы эту новую область. Если есть - загружаем объекты из базы.
Сложность в том, что пользователь передвигается. Даже если кэшировать в базу области "с запасом" (отображаем, например, объекты в радиусе 5 километров, а загружаем с сервера область в 10 километров), и делать запросы когда пользователь переместится так, что "запас" кончится - то в базе все равно будет куча областей которые частично пересекаются, а чем больше областей в базе - тем (как мне кажется) больше ресурсов требуется на обработку запроса к БД.
2) Опираться на среднее количество объектов для области. То есть если для 10 предидущих загруженных областей в среднем было 5 объектов, то если для текущей области есть в локальной базе 5 объектов - отображаем их и не делаем запрос к API.
Этот вариант мне вобще не нравится, так как важно, чтобы пользователь видел все объекты вокруг него. Понятно, что при втором подходе довольно большая часть объектов не будет загружена.
Я склоняюсь к первому варианту, но меня терзают сомнения. Проблема еще в том, что приложение будет использоваться только интерактивно - пользователь идет/едет - запускает приложение, пришел/приехал - приложение отключил. Так бы во время простоя, когда нет необходимости грузить/показывать близлежащие объекты, можно было бы суммировать соседние/частично покрывающиеся области, подгружать недостающие объекты из получившихся областей.
Есть ли что - нибудь что я упускаю? Как лучше реализовать эту задачу, учитывая мобильность устройства и ограниченность системных ресурсов.
Мне кажется тема должна была где-то обсуждаться, но поиском ничего не нашел.
Я пишу приложение для мобильного устройства, которое с помощью некоторого API получает с сервера географические координаты объектов, ближайших к пользователю и отображает их на карте. (при этом пользователь может двигаться и информация подгружается по мере передвижения пользователя)
Информация об объектах кэшируется локально на устройстве в базе sqlite, так как запросы к api могут идти по медленному edge или gprs каналу.
Подскажите пожалуйста, как можно было бы запоминать области, для которых объекты уже загружены в базу? Чтобы, допустим, если пользователь ездит каждый день по одному и тому же маршруту, не грузить каждый раз объекты заново.
У меня есть две идеи:
1) После API запроса cохранять области в виде пар точек (левая-верх, правая-низ) в базу и перед другим API-запросом к серверу проверять, нет ли уже этой области в базе, или области которая покрывала бы эту новую область. Если есть - загружаем объекты из базы.
Сложность в том, что пользователь передвигается. Даже если кэшировать в базу области "с запасом" (отображаем, например, объекты в радиусе 5 километров, а загружаем с сервера область в 10 километров), и делать запросы когда пользователь переместится так, что "запас" кончится - то в базе все равно будет куча областей которые частично пересекаются, а чем больше областей в базе - тем (как мне кажется) больше ресурсов требуется на обработку запроса к БД.
2) Опираться на среднее количество объектов для области. То есть если для 10 предидущих загруженных областей в среднем было 5 объектов, то если для текущей области есть в локальной базе 5 объектов - отображаем их и не делаем запрос к API.
Этот вариант мне вобще не нравится, так как важно, чтобы пользователь видел все объекты вокруг него. Понятно, что при втором подходе довольно большая часть объектов не будет загружена.
Я склоняюсь к первому варианту, но меня терзают сомнения. Проблема еще в том, что приложение будет использоваться только интерактивно - пользователь идет/едет - запускает приложение, пришел/приехал - приложение отключил. Так бы во время простоя, когда нет необходимости грузить/показывать близлежащие объекты, можно было бы суммировать соседние/частично покрывающиеся области, подгружать недостающие объекты из получившихся областей.
Есть ли что - нибудь что я упускаю? Как лучше реализовать эту задачу, учитывая мобильность устройства и ограниченность системных ресурсов.