免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 15403|回复: 39
收起左侧

[技术交流] 求助——关于实现arcgis面积平差 的工具制作

  [复制链接]

2

主题

4698

铜板

7

好友

助理工程师

Rank: 5Rank: 5

积分
395
发表于 2021-7-27 13:40 | 显示全部楼层 |阅读模式
亲爱的小伙伴们,最近我在做一个实现图斑破碎后,面积重新平差的工具,有一步卡顿实现不了,来请小伙们提提建议,在此表示感谢。
工作背景:
现阶段以三调图斑为底图,完成其他资源的调查与分析,在这个过程中,少不了的就是分割图斑。但是要求分割后图斑要求与原图斑外边界一致,分割后小图斑面积之和与原图斑图斑面积相等。
平差要求:
将差值以0.01为单位,按照从大到小的顺序,分配到每个图斑上。
有什么方法可以实现吗?

324

主题

56万

铜板

1172

好友

等待验证会员

Rank: 1

积分
349368

宣传勋章爱心勋章组织勋章官方团队冰雪节勋章

发表于 2021-7-27 13:50 | 显示全部楼层
欢迎论坛的高手解答,会奖励相应的威望和铜板哦
回复 支持 反对

使用道具 举报

6

主题

1万

铜板

5

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
740
发表于 2021-7-27 14:44 | 显示全部楼层
你确定不画一个示意图,反正作为新手的我看不懂。这个是动表格的事吧
回复 支持 反对

使用道具 举报

2

主题

4698

铜板

7

好友

助理工程师

Rank: 5Rank: 5

积分
395
 楼主| 发表于 2021-7-28 10:52 | 显示全部楼层
城下秋木 发表于 2021-7-27 14:44
你确定不画一个示意图,反正作为新手的我看不懂。这个是动表格的事吧

确实是动属性表的问题,但是如何去调整属性表不好实现
回复 支持 反对

使用道具 举报

16

主题

1万

铜板

7

好友

教授级高工

Rank: 12Rank: 12Rank: 12

积分
1277
QQ
发表于 2021-7-28 22:18 | 显示全部楼层
用游标很容易实现!
回复 支持 反对

使用道具 举报

2

主题

4698

铜板

7

好友

助理工程师

Rank: 5Rank: 5

积分
395
 楼主| 发表于 2021-7-30 16:39 | 显示全部楼层
tdz0855 发表于 2021-7-28 22:18
用游标很容易实现!

可以详细说一下吗?代码以前用的不多,最近在恶补
回复 支持 反对

使用道具 举报

15

主题

2万

铜板

34

好友

至尊VIP

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

积分
2047
发表于 2021-8-1 16:14 | 显示全部楼层
楼主提的好,确实需要!
回复 支持 反对

使用道具 举报

0

主题

689

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
64
发表于 2021-8-12 16:10 | 显示全部楼层
DLTB0=老图斑
DLTB1=分割后的新图斑
先统计前后两个图斑的总椭球面积之差,就是要平差的总面积,记为AreaAD.
可以参考如下代码,这个代码是按照面积值的比例来分配的。
  1. AreaSum0=sum([row[0] for row in arcpy.da.UpdateCursor('DLTB0',u'椭球面积')]) #计算老DLTB总面椭球面积
  2. AreaSum1=sum([row[0] for row in arcpy.da.UpdateCursor('DLTB1',u'椭球面积')]) #计算分割后新DLTB总面椭球面积
  3. AreaAD=AreaSum1-AreaSum0  #计算要平差的面积,可正可负
  4. arcpy.AddField_management("DLTB1",'Scale',"DOUBLE")   #添加比例scale字段
  5. arcpy.AddField_management("DLTB1",u'椭球面积_平差',"DOUBLE")   #添加用于存放平差后面积字段
  6. arcpy.CalculateField_management("DLTB1","Scale","!Shape_Area!/AreaSum1","PYTHON_9.3")  #计算scale字段,字段值是dltb1每个要素与总面积的比例
  7. arcpy.CalculateField_management("DLTB1",u"椭球面积_平差","!Scale!*AreaAD+!椭球面积!","PYTHON_9.3")   #将AreaAD按照比例分别平差到各个图斑
复制代码


如果你要按照0.01最小单位来的话,可以计算AreaAD/0.01,为每个图斑分配0.01的个数,然后再计算,道理是一样的。
回复 支持 反对

使用道具 举报

0

主题

256

铜板

1

好友

实习生

Rank: 1

积分
3
发表于 2021-8-13 14:18 | 显示全部楼层
有木有更高效一点的策略,感觉跑的太慢了
回复 支持 反对

使用道具 举报

2

主题

4698

铜板

7

好友

助理工程师

Rank: 5Rank: 5

积分
395
 楼主| 发表于 2021-8-16 07:46 | 显示全部楼层
13883743533 发表于 2021-8-12 16:10
DLTB0=老图斑
DLTB1=分割后的新图斑
先统计前后两个图斑的总椭球面积之差,就是要平差的总面积,记为Area ...

谢谢,方法与我写的模型基本一致,但是简洁太多了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表