11

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

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

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

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

4

5 回答 5

13

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

于 2008-10-10T21:02:55.143 回答
2

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

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

于 2008-10-10T21:31:19.970 回答
0

我对 KML 了解不多,但我认为问题 #2 的通常解决方案涉及迭代点,并删除特定大小下的任何线段。这在某些情况下会导致一些“不幸”的影响,但它相对快速且容易做到。

于 2008-10-10T21:00:56.613 回答
0

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

祝你好运 :)

于 2008-10-10T21:01:28.407 回答
0

不久前,我需要解决您的 #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. 如果点数 > 则转到步骤 #2Max
于 2008-10-23T06:55:56.640 回答