Я сделал нечто подобное в приложении WherOnEarth. У нас есть база данных SQLCE, в которой мы храним данные, а затем загружаем материал, который находится рядом.
Фоновое чтение: http://www.silverlightshow.net/items/Windows-Phone-7.1-Local-SQL-Database.aspx & http://www.jeffblankenburg.com/2011/11/30/31-days-of-mango-day-30-local-database/
У меня есть файл sdf, который поставляется вместе с приложением, класс данных показан ниже
[Table]
public class PointData : IPositionElement, INotifyPropertyChanged
{
[Column]
public string Description { get; set; }
[Column]
public double Latitude { get; set; }
[Column]
public double Longitude { get; set; }
Затем мы читаем точки, которые рядом, я получаю их со следующим:
(from ht in _context.Points
where ht.Latitude >= bottomLeft.Latitude && ht.Latitude <= topRight.Latitude &&
ht.Longitude >= bottomLeft.Longitude && ht.Longitude <= topRight.Longitude
select ht
).ToArray();
Этот подход был достаточно быстрым для меня (то есть, для извлечения элементов из файла sdf потребовалось меньше времени, чем для позиционирования их на экране и для выполнения всех других связанных с этим математических операций. 300000 элементов из базы данных. Было еще больше оптимизаций, которые я мог бы выполнить в отношении индексации и тому подобного, но, как я уже сказал, в данный момент это было достаточно быстро, поэтому я вернусь к нему в какой-то момент позже.