如何在ArcGIS中沿着流到达顺序添加点?

时间:2015-03-05 15:24:52

标签: arcgis

我在ArcGIS中有一个流网络 - 即一系列折线,并且沿着每个流部分我添加了点。对于每个点,我从底层栅格中提取了高度和流量,并且还从交叉折线中提取了数据,包括折线的最小值,平均值和最大高度,HydroID和nextdownID。积分也有自己的ID,但我注意到这些不符合规定。

我想要的是将stepID添加到每个点,其中在每个河段的开始处(每条折线),第一个点是步骤1,然后向上递增直到到达范围的末尾。因此,如果折线上有10个点,则第一个点的stepID值为1,最后一个点的stepID值为10.

这听起来很简单,但不知道该怎么做。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

您可以使用构造点工具/函数以特定间隔沿着线构建点。

单击“编辑器”工具栏上的“编辑”工具“编辑工具”。 单击要生成点的线要素。 单击“编辑器”菜单,然后单击“构造点”。

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//001t00000029000000.htm

为了使编号自动化,您可能会考虑翻转线条以使所有尾部指向一个方向 - 向上或向下。双击一行,然后右键单击以查看“翻转”命令。如果您使用从上面的方法设置的点,它可能从尾部到头部排序。

另一种选择是为stepID创建自己的字段。创建属性连接到流段,并为每个连接的记录提供唯一的编号。通过你的记录选择每组十个,然后按FID排序(检查这些是按顺序)然后计算stepID = FID的值 - x 其中x =流段的stepID中的最低FID。这个想法可能会帮助你弄清楚如何正确地哄骗数字。

答案 1 :(得分:0)

我以前有这个问题,并以此方式解决过。这不是一个很好的解决方案。很想听听是否有更优雅的方法 。 为了清楚起见,我将其称为pointdataset,您将其称为“输入点”。

步骤1:以正确的顺序获取积分

  • 如果您的输入点有时离线很远,请先将它们投影到您的线上。
  • 为您的行指定一个唯一的行号,并将其加入最接近的输入点要素

  • 沿线生成点:使用折线并在其上添加很多点。我将此数据集称为辅助点。填写一个小于两个输入点之间最小距离的距离。 确保折线具有正确的“方向”。您可以使用带有箭头的符号系统来检查它,并在需要时使用翻转编辑工具对其进行纠正。

  • 在您的帮助点中添加一个ID字段,键入float或double,并在其中创建顺序的idnumber(https://support.esri.com/en/technical-article/000011137)。
  • 空间连接:输入点是您的目标,帮助程序指点连接功能。保留所有目标功能。您只需要从帮助点加入IDfield。右键单击字段图中的ID字段,然后制定合并规则“ Mean”。将“匹配”选项设置为“在距离内”,并使搜索半径为沿线步在生成点中使用的距离的1.5倍。
  • 使用排序工具,对刚添加的ID字段,然后在第一步中添加的lineID上的空间连接输出进行排序。如果您拥有高级许可证,则可以立即进行。

第2步:生成StepID

  • 在排序输出中添加一个新字段,并将其命名为StepID
  • 使用字段计算器填充它。我使用此代码使每次有新行时重新开始编号。
rec=0 
oldid = -1 
def autoIncrement(lineid): 
    global rec 
    global oldid 
    pStart = 1  
    pInterval = 1 
    if rec == 0 or lineid!= oldid :  
        rec = pStart  
    else:
        rec += pInterval 
    oldid = lineid
    return int(rec)

表达式:autoIncrement( !lineID! ) 表达式类型:Python

如果线条彼此之间非常接近,或者末端出现怪异的卷发,它可能仍然会混乱。但对于其余部分,它应该起作用!