2008-10-10 23 views
11

我有类似的问题this post。我需要在内嵌的Google地图上显示多达1000个多边形。多边形位于SQL数据库中,我可以使用自定义HttpHandler(在ASP.NET中)将每个多边形作为单个KML文件进行渲染,如此http://alpha.foresttransparency.org/concession.1.kml如何在KML中简化(减少点数)?

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

  1. 什么是渲染这些为标记,而不是覆盖一次,我以后一定缩放级别一个好的策略?

  2. 是否有公开可用的算法来简化多边形(减少点数),以便在特定缩放级别下我不会显示更多点而不合理?

回答

0

我不知道很多aobut KML,但我认为,通常解决问题2涉及遍历点,并具有一定规模下删除任何线段。这在某些情况下会造成一些“不幸”的影响,但这种做法相对快速且容易。

0

我会推荐2件事: - 计算并合并触摸的多边形。这涉及到大量的处理和艰苦的数学,但我已经完成了,所以我知道这是可能的。 - 创建自己的叠加层,而不是使用PNG格式的KML,而在之前的建议中将它们合并。你将不得不创建很多PNG,但它在客户端快速发展。

祝你好运:)

+0

谢谢 - 我真的没有资源来复制Google API免费提供的大量内容。 – 2008-10-10 21:58:02

2

关于第一个问题,你可以计算出特定的多边形的面积,并涉及每个缩放级别到特定的最小面积,以便放大或缩小多边形的消失,并根据缩放级别显示标记。

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

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. 围棋的区域到步骤#2,如果点的数量>Max
+0

出于好奇,为什么不去Douglas-Peucker?乍一看,你的算法看起来效率相当低。它还旨在提供固定数量的点,而不是给定的容差 - 那么如何将它应用于大量不同复杂形状? – 2008-10-23 13:28:48