寻找一种快速,开源的栅格成本距离函数以在代码中使用


9

我一直在互联网上搜寻可以嵌入到我的代码中的快速,开源的成本-距离功能。该功能基本上应该像ArcGIS实施一样工作,在其中我可以指定源栅格和成本栅格,并输出成本距离栅格。就是说,实现不需要像ArcGIS那样复杂,因为我不必一定要输入带有嵌入式地理元数据的“栅格”-采用简单数字数组的签名就足够了,因为我可以验证数据是否正确重叠在我调用该函数时。

我的具体意图是基于用户单击来计算到1000 x 1000成本栅格中心的单个点的成本距离,因此快速执行非常重要。

AC#实现将是理想的选择,但我将介绍其中的所有内容。

有谁知道支持此功能的开源库?谢谢你的帮助!

Answers:


5

GRASS GIS在r.cost文档)中使用 min-heap进行了C实现。或者,您可以使用QuickGraphFloyd-Warshall之类的图形包来计算成本。

GRASS 6.4的最新更改使r.cost大大加快了,因此性能也许足够好:在我的笔记本电脑上,一个1M单元区域大约需要3s,而启用骑士移动大约需要5s。GRASS是一个C应用程序,而不是C#代码库的嵌入式解决方案。如果可以添加到堆栈中,则可以使用PyWPS调用GRASS,然后在应用程序的其他位置使用结果。


我将在Web应用程序中使用它,因此我的目标是仅在几秒钟内完成操作。我将只有一个目标像元和一个相对较小的最大成本距离(假设最小成本为一条直线,从中心目标像元到成本栅格边缘的距离)。在这些条件下使用ArcMap进行的测试使我认为这是可能的。在C#中使用GRASS有任何技巧或经验吗?
10

我已经更新了我的问题,以回答您的问题,它开始是评论,但时间太长。希望有帮助!
SCW

谢谢scw!这些都是非常有用的信息,但是除非我开始移植GRASS代码(我并不急于这样做),否则并不能真正带我到需要的地方。也许还有其他一些栅格极客,还有一些技巧。我将继续研究这个问题,并将发布我确定的解决方案。
10年

也许您可以咨询您的同事:azavea.com/research/staff-research-projects/map-algebra ;-)我建议使用GRASS代码,因为它健壮且快速的实现,C#在地理处理领域相对较新,因此已经存在实现可能很难实现。
scw 2010年

scw-实际上,这就是我的旅程的起点。我的问题是,他的实现牺牲了高质量计算的处理时间。我们正在研究一种相反的算法。GRASS是一个很好的建议,我只是没有一种实际使用它的方法。=)
删除

3

r.cost在GRASS中使用了很多功能。在普通笔记本电脑上,1000 * 1000网格没有问题。正在开发中的R包(gdistance,http: //r-forge.r-project.org/projects/gdistance/ )。我发现GRASS快很多。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.