我正在寻找一种基于线段而不是点创建voronoi图的方法。请参见下面的示例(摘自本演示文稿)。
理想情况下,我希望可以使用Python编写脚本,但是使用ArcGIS或类似工具的解决方案也是可以接受的。
到目前为止,我发现的唯一可以做到这一点的库是openvoronoi,它看起来很有希望。还有其他吗?
我正在寻找一种基于线段而不是点创建voronoi图的方法。请参见下面的示例(摘自本演示文稿)。
理想情况下,我希望可以使用Python编写脚本,但是使用ArcGIS或类似工具的解决方案也是可以接受的。
到目前为止,我发现的唯一可以做到这一点的库是openvoronoi,它看起来很有希望。还有其他吗?
Answers:
我们(一个大学团队)使用ArcGIS 10.0插件和ArcObjects为此设计了一个实现。该应用程序是完全免费的。该实现使用栅格方法,该方法以点,线或多边形为输入点,以创建普通的或乘以加权的Voronoi图(或上述方法的组合,即,您可以使用每种形状中的一种,创建从三个不同的要素类)。它仍在开发中,但应该相当稳定,特别是如果您只想做生产线。该插件需要Spatial Analyst许可证才能运行。该代码本身是开源的,因此可以随意使用它。
https://github.com/UNTGeography/VoronoiDiagramsGIS
它使用与@radouxju的答案中所述的“欧几里得分配”类似的方法,并使用“流向/基本”栅格从所得栅格创建矢量多边形。
对于一些客户,我和几个同事一直在努力创建2个可以做到这一点的地理处理工具。虽然地理处理工具尚未公开,但我们使用的python和C#是:
C#和python包装器实际上都依赖于C ++ Boost Voronoi API:http : //www.boost.org/doc/libs/1_54_0/libs/polygon/doc/voronoi_main.htm
请注意,API占用大量内存。如果您将地理处理用于64位,ArcGIS Pro或QGIS,则这不是问题。如果您使用的是32位的ArcGIS Desktop,这是一个限制。(40,000行或更多行的详细道路网络应该足以达到内存限制)
ET Geowizards(Arc的插件)为此提供了一个接受折线的工具(请参见下面的屏幕截图)。不幸的是,您将需要许可产品来运行该工具,但我认为它可以解决问题。
另外还有一种使用PostgreSQL / PostGIS解决任务的方法。
如果行短而简单,请运行脚本:
WITH
tbla AS (SELECT (ST_Dump(geom)).geom geom FROM <line_name_table>),
tblb AS (SELECT (ST_DumpPoints(geom)).geom geom FROM tbla
UNION
SELECT ST_Centroid(geom) geom FROM tbla),
tblc AS (SELECT ((ST_Dump(ST_VoronoiPolygons(ST_Collect(geom)))).geom) geom FROM tblb)
SELECT ST_Union(a.geom) geom FROM tblc a JOIN tbla b ON ST_Intersects(a.geom, b.geom) GROUP BY b.geom;
查看结果。
如果行很长,请运行脚本:
WITH
tbla AS (SELECT (ST_Dump(geom)).geom geom FROM <line_name_table>),
tblb AS (WITH btbl AS (SELECT (ST_Dump(geom)).geom geom FROM tbla),
intervals AS (SELECT generate_series (0, 9) as steps)
SELECT steps AS stp, ST_LineInterpolatePoint(geom, steps/(SELECT count(steps)::float-1 FROM intervals)) geom FROM btbl, intervals GROUP BY intervals.steps, geom),
tblc AS (SELECT ((ST_Dump(ST_VoronoiPolygons(ST_Collect(geom)))).geom) geom FROM tblb)
SELECT ST_Union(a.geom) geom FROM tblc a JOIN tbla b ON ST_Intersects(a.geom, b.geom) GROUP BY b.geom;
查看结果。
如有必要,压缩线上的点数,在我的示例中为10点。
原始解决方案。
该脚本称为:ST_VoronoiDiagramsFromLines。