5

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

我的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-tree 结构并仅过滤当前绘制的那些位置MKMapRect,但我不确定这是否适用于折线本身。

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

在此处输入图像描述

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

4

1 回答 1

0

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

编辑:

我假设您使用折线 MKMapRect 相交检查有效的算法,例如如何找到直线和矩形之间的交点?.

于 2015-11-28T19:14:34.750 回答