1

我正在构建一个应用程序,在其中可视化一个相当大的数据集(约 500 万个多边形),均匀分布在一个地理区域。

以适当的缩放级别一次显示大约 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-tree 中来解决。用户只对靠近或特定区域的特征感兴趣。

我已经尝试过 SQLite,但在这种情况下它似乎不是正确的选择,考虑到有问题的数据集很快变得相当大(> 1gb),也许 SQLite 不是查询特定区域内的特征的最佳选择?

有哪些聪明的方法可以将此数据集存储在包中?您是否建议我为此尝试任何特定技术?

4

1 回答 1

1

您将无法将整个 1 GB 数据集加载到内存中。

您应该将数据存储在数据库中的R-tree 中,以便在加载数据时可以直接进行区域查询。

于 2013-07-31T06:56:42.300 回答