我在地图上有很多长折线。 我想优化他们的绘图,因为在几千点处,折线的绘制速度非常慢。
我的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之间的两个红色映射关系中没有段端点,但仍需要绘制...
是否有某种算法类似于四叉树或某种方法来解决这个问题?
答案 0 :(得分:0)
不幸的是,我不知道这样的数据结构可以检查与矩形的线交叉
但是,解决问题的一种方法可能如下:
在非常低分辨率的地图中绘制所有折线(2 dim数组),并注意折线绘制它的每个像素。然后在此低分辨率地图中扫描绘制像素的相关矩形,并存储所有相关折线。然后可以在全分辨率图中绘制这些图
也许这种近似算法比你现在使用的精确算法更快。
编辑:
我假设您使用折线MKMapRect交叉点检查有效算法,如How to find the intersection point between a line and a rectangle?所示。