如何从给定的DEM中提取断线?


10

折线对于描述地形非常有用-例如,构建精确的TIN。

我的问题是,如何从给定的DEM中提取这些中断线?

我计算了曲率(垂直)-栅格(使用arcgis 10),您可以在其中看到折断线(最小/最大曲率),但是我没有弄清楚如何提取折线以最终得到折线。

从DEM获得这些突破线的工作流程是什么?

是否有人对工作流程,“工具”或skript有所帮助?

我想我不是想执行此任务的第一个/最后一个人:)

...与此同时,我发现了一篇有关该主题的论文,这似乎是一个很好的解决方案,但最大的问题仍然是:如何减少这种实践?

还是有人对软件使用不同(更轻松?)的方法?


据我所记得,QuikGrid可以很好地检测到折线,尽管它主要适用于质量点。
JanŠimbera2014年

您想提取哪种中断线?最常见的是液压平整,但可以将折断线用于道路。我不明白这个问题,因为在创建DEM之前需要折断线。你能澄清一下吗?
geomatix 2014年

Answers:


2

我会这样尝试:在曲率栅格文件中搜索一个临界值。高于此值,您将预期到折线。

然后,我将在栅格计算器中使用条件语句,对高于临界值的像素使用“ 1”,对于低于临界值的像素使用“ 0”。使用此二进制栅格在工具箱中进行栅格到多边形的转换。您将在此处找到有关如何使多边形对齐的答案

毕竟,您可以按照以下步骤建立模型。


可能必须根据结果使用半字节或某些细化功能,但我认为@butcher的答案已成定局。
罗兰

2

Conrec执行此操作。但是它最初是用fortran编写的,因此已经移植了好几次。

我一直在node.js中使用的库turf,使用此算法基于点矢量数据创建这些轮廓。执行此操作的脚本非常简单,基本上是:

var t = require('turf')
var fs = require('fs')
var z = 'elevation'
var resolution = 15
var breaks = [.1, 22, 45, 55, 65, 85,  95, 105, 120, 180]

t.load('./path/to/points.geojson', function(err, points){
  t.contour(points, z, resolution, breaks, function(err, contours){
    if(err) throw err
    fs.writeFileSync('.path/to/output.geojson', contours)
  })
})

如果您没有特定的休息时间,还可以生成抽搐的自然休息时间:

var t = require('turf')
var propertyName = 'elevation'
var num = 10

t.load('./path/to/points.geojson', function(err, pts){
  if(err) throw err
  t.jenks(pts, 'elevation', num, function(err, breaks){
    if(err) throw err
    console.log(breaks) // [ 11, 12, 18, 25, 29, 41, 50, 55, 76, 90, 143 ]
  })
})

1

如果您去我的VA激光雷达站点,并寻找带有Breaklines的项目。我们有很多。

例如2010/2011十一县沿海VA激光雷达。您将看到所有报告和其他文档的链接,这将解释它们通常如何在ArcGIS中创建折线。尝试一些不同的项目以使用不同的方法,但是我可以告诉您,经常使用NHD,以及从DEM派生的山脊。大多数情况下,报告位于元数据中。这是上面的一个。CTRL F pdf中的折线。

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.