900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 从上到下 从左到右的顺序编号

从上到下 从左到右的顺序编号

时间:2023-09-03 09:25:00

相关推荐

从上到下 从左到右的顺序编号

一、背景:某项建库工作中某图层中的一字段存在下面所述需求。

二、需求:将某数据按行政村为单位按照从上到下、从左到右的顺序编号。

三、解决办法:

(一)建库软件肯定可以实现这个功能,花钱买个软件,搞定。

(二)利用ArcMAP+基础python编程解决,其中ArcMAP用来解决排序问题,用python来解决编程问题。下面开始操作:

1.打开ArcToolbox找到—常规—排序工具,打开工具进行如图选择设置:

这个工具的本质是一个Sort_management (in_dataset, out_dataset, sort_field, {spatial_sort_method})语法的运用,在这里in_dataset和out_dataset代表输入和输出数据名称, sort_field代表排序字段及排序方式(ASCENDING 低到高排序、DESCENDING 高到低顺序),{spatial_sort_method}代表了指定对要素进行空间排序的方法(需要强调的是仅当将“Shape”作为排序字段之一时,排序方法才可用)。在工具使用时需要强调的是设置排序字段时候要***先选择ZLDM在选择Shape,***这样选择以后会先搜索行政区代码,在同一行政区代码内进行空间位置的排序。空间排序的方法有以下五中:

(1)UR —从右上角开始排序。这是默认设置。

(2)UL —从左上角开始排序。

(3)LR —从右下角开始排序。

(4)LL —从左下角开始排序。

(5)PEANO —使用空间填充曲线算法(也称为皮亚诺曲线)排序。 (想知道这是啥自行百度,一般用不上)

在这里需要说明的是该工具在进行空间排序时:从上到下 的优先级高于从右到左 的优先级。

2.第一步完成以后,此时对应图层的FID已经按照同一行政代码下“从上到下、从左到右”进行了排列,下面我们要做的就是利用python进行排序,排序的思路就是设置初始编号,然后以不同ZLDM为基础进行依次加1的循环,来实现不同行政村的编号,最后的结果前面补充“00000”,此时导出的结果分别为“000001、000002、000003……”,代码如下:

打开属性表,找到需要编号的那一列打开字段计算器,解译程序选择python然后点击显示代码块,在预逻辑代码脚本中输入以下代码:

rec=0fname = ""def autoIncrement(field):global recglobal fnameif field != fname:fname = fieldpStart = 1 rec = pStart return recelse:pInterval = 1 rec = rec + pInterval return rec

在结果框内出入以下代码(上张截图内地段名称应为DM不是MC),下列代码实现了输出结果加0及字符型的转换:

(str(autoIncrement( !ZLDWMC! ))).zfill(6)

运行结果如下:

到这里就实现了将该数据按行政村为单位按照从上到下、从左到右的顺序编号的需求了。剩下的根据工作要求继续进行即可。

四、缺点

(一)这种思路完全ArcMAP软件中排序工具,来进行排序工作,其软件上下的优先级优于左右,若需求优先级左右大于上下,则无法依靠软件实现。想到的解决办法:获取各要素的X坐标、Y坐标的最大值和最小值,然后进行排序。

(二)这种思路的编号方式,是以FID为基础进行的,当排列后个行政村对应要素的FID字段不连续,则程序运行结果错误。想到的解决办法:导出到Excel中,用表格函数实现编号再关联回来。

(三)为啥(二)的解决办法不用代码实现,因为我不会,望大佬指点。

(四)用VB肯定也可以实现,没有进行比较。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。