2013-01-18 52 views
2

在Python中,最有效的方法是将几个多边形合并并简化为等效形状,但使用的多边形少得多?使用Python高效地合并和缩小多边形

polygon reduction

我试图绘制邮政编码区域,由US Census data在谷歌地图定义。使用Django的优秀GeoDjango框架以及我对django-census-places应用程序的破解,现在我有数以千计的拉链和纬度/经度矢量描述其数据库中的区域。

我已经写了一些基本的Python来导出矢量,并呈现Javascript以在Google Map上绘制选定的拉链。但是,我遇到的问题是速度非常慢,因为即使是一个邮政编码也可能包含数千个多边形。我可以将此输出预处理为JSON并对其进行缓存,但即使这样,浏览器也需要几分钟才能加载所有三角形,其中大部分是冗余的,因为我只对几个邮政编码的整体大纲感兴趣。

注意,这个问题类似于this,但不一样。我不关心重叠的多边形,因为我相信没有重叠。

编辑:This问题也显得非常相似。

回答

0

要合并多边形,我建议您需要执行boolean union operation。我不确定你如何在Python中做到这一点,但既然你也提到过JavaScript,那么我的Clipper库(用Delphi,C++和C#编写)here就有很好的JavaScript翻译。

还有一个在线演示here,它很好地显示了剪辑库的功能。

+0

在演示页面上,“时间”标题下的数字是几秒或几分钟? –

+0

我猜测毫秒。清除基准并执行另一个剪辑操作。手术发生得比眼睛能看到的要快得多,所以绝对不是秒或分钟:)。 –

1

事实证明,GeoDjango的几个特性之一是布尔多边形运算符的全部范围。我所要做的就是在每个MultiPolygon对象上调用union()来获取描述整个区域的MultiPolygon。点数的减少是一个数量级。