2013-07-30 2 views
1

Я создаю приложение, где я визуализирую довольно большой набор данных (~ 5 миллионов полигонов), равномерно распределенных по географической области.Large MapKit vector overlay - advice

Примерно 2000 многоугольников отображаются сразу при соответствующем уровне масштабирования. При уменьшении масштаба данные просто скрыты.

Чтобы ускорить рисование полигонов, я применил R * -tree, который возвращает многоугольники, которые перекрывают рассматриваемую область.

-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context 
    MKCoordinateRegion region = MKCoordinateRegionForMapRect(mapRect); 
    NSArray *polygons = [[Polygons sharedPolygons] polygonsInRegion:region]; 
    for(Polygon *p in polygons) { 
     // Draw polygon 
    } 
} 

Фактическая сортировка, как только полигоны загружаются в память, кажется, решаемый путем выборки и хранения только многоугольников, что пользователь видит в R-дерево. Пользователь интересуется только функциями, расположенными рядом или в определенных регионах.

Я пробовал SQLite, но в данном случае это не похоже на правильный выбор, учитывая, что данный набор данных быстро становится довольно большим (> 1gb), и, возможно, SQLite не оптимален для выполнения запросов функций в определенных регионах?

Каковы некоторые умные способы хранения этого набора данных в комплекте? Есть ли какие-то конкретные технологии, которые вы предлагаете мне попробовать?

ответ

1

Вы не сможете загрузить весь набор данных 1 ГБ в память.

Данные следует хранить в R-tree in the database, чтобы вы могли делать запросы регионов непосредственно при загрузке данных.

+0

Кажется, лучший способ пойти, спасибо! – erik