折线drawMapRect优化绘图

时间:2015-11-18 09:56:19

标签: ios mkmapview mkmaprect mkoverlaypathrenderer

我在地图上有很多长折线。 我想优化他们的绘图,因为在几千点处,折线的绘制速度非常慢。

我的drawMapRect看起来像这样:

- for each polyline segment 
- verify if it's bounding box intersects the currently drawn MKMapRect
- if id does, draw it

如果没有太多分数,这会很棒。但是当有8-16个可见的maprects和2-3000个点时,它们在for中运行得非常慢。

如果它们只是位置,那么解决方案就是实现某种四叉树/ r树结构,只过滤当前绘制的MKMapRect中的那些位置,但我不确定如果这对于折线本身来说是合适的。

如果我仅过滤当前maprect内的段端点,则可能不会绘制某些线段。例如,点1-2之间的两个红色映射关系中没有段端点,但仍需要绘制...

enter image description here

是否有某种算法类似于四叉树或某种方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

不幸的是,我不知道这样的数据结构可以检查与矩形的线交叉 但是,解决问题的一种方法可能如下:
在非常低分辨率的地图中绘制所有折线(2 dim数组),并注意折线绘制它的每个像素。然后在此低分辨率地图中扫描绘制像素的相关矩形,并存储所有相关折线。然后可以在全分辨率图中绘制这些图 也许这种近似算法比你现在使用的精确算法更快。

编辑:

我假设您使用折线MKMapRect交叉点检查有效算法,如How to find the intersection point between a line and a rectangle?所示。