我在这篇文章中遇到了类似的问题。我需要在嵌入式Google地图上显示多达1000个多边形。多边形位于SQL数据库中,我可以使用自定义HttpHandler(在ASP.NET中)将每个多边形渲染为单个KML文件,如下所示 http://alpha.foresttransparency.org/concession.1.kml

即使在我(非常快)的开发机器上,也需要一段时间来加载甚至几十个形状。真的有两个问题:

  1. 一旦超出某个缩放级别,将这些作为标记而不是叠加层渲染的好策略是什么?

  2. 是否有公开的算法来简化多边形(减少点数),这样我就不会在某个缩放级别显示更多的点数?

有帮助吗?

解决方案

关于第二个问题:您需要 Douglas-Peucker泛化算法

其他提示

对于第一个问题,您是否可以计算特定多边形的面积,并将每个缩放级别与特定的最小区域相关联,以便放大或缩小多边形时消失,并根据缩放级别显示标记。

对于第二个问题,我会使用Mark Bessey的建议。

我不太了解KML,但我认为问题#2的通常解决方案是迭代点,并删除特定大小的任何线段。这将导致一些“不幸”的事情。在某些情况下会产生影响,但这种影响相对较快且容易。

我会推荐两件事: - 计算并组合接触的多边形。这涉及很多处理和硬数学,但我已经完成了所以我知道这是可能的。 - 创建自己的叠加层而不是使用PNG格式的KML,同时在之前的建议中将它们组合在一起。您将不得不创建大量的PNG,但它在客户端上的速度非常快。

祝你好运:)

我需要一个解决你的#2问题的方法,在看了几个可用的行简化算法后,我创建了自己的。

这个过程很简单,看起来效果很好,但如果你没有正确实现它可能会有点慢:

P [0..n] 是您的积分数组  设 T [n] 定义为由点 P [n-1],P [n],P [n + 1]形成的三角形]   Max 是您尝试将此行减少到的点数。

  1. 计算集合中每个可能的三角形 T [1..n-1] 的面积。
  2. 选择面积最小的三角形 T [i]
  3. 删除点 P [i] 以基本上展平三角形
  4. 重新计算受影响三角形的区域 T [n-1],T [n + 1]
  5. 如果点数&gt;,则转到步骤#2。 <代码>最高
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top