clipFeature.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # -*- coding: utf-8 -*-
  2. import os
  3. import sys
  4. import log
  5. import uuid
  6. import appconfig
  7. import arcpy
  8. import datetime
  9. import time
  10. import utils
  11. from arcpy import env
  12. from db.postgresql import Postgresql
  13. import importlib, sys
  14. importlib.reload(sys)
  15. class ClipFeature:
  16. def __init__(self):
  17. # 数据项配置
  18. self.clipF = "SDE.TKQFW"
  19. self.GlobalField = "KCXKZH"
  20. self.GlobalType = "TKQ"
  21. self.analyseF = "SDE.DLTB"
  22. self.bsm = self.getUUID()
  23. self.db = Postgresql(appconfig.DB_CONN)
  24. # 输出GDB
  25. self.root = os.path.dirname(os.path.abspath(__file__))
  26. path = os.path.join(self.root, "out")
  27. if not os.path.exists(path):
  28. os.makedirs(path)
  29. self.outGdb = os.path.join(path, "{0}.gdb".format(self.bsm))
  30. arcpy.Delete_management(self.outGdb)
  31. arcpy.CreateFileGDB_management(path, "{0}.gdb".format(self.bsm))
  32. # 输出文件夹里面已经有内容的,就覆盖掉
  33. env.overwriteOutput = True
  34. # 设置工作空间
  35. env.workspace = appconfig.SDE["SDE"]
  36. def run(self):
  37. self.out = r"{0}\ClipResults".format(self.outGdb)
  38. # 第一步裁剪要素
  39. arcpy.Intersect_analysis([self.clipF, self.analyseF], self.out)
  40. # 裁剪完成的数据增加字段
  41. arcpy.AddField_management(self.out, "YZMJ", "DOUBLE")
  42. arcpy.AddField_management(self.out, "TARGETID", "TEXT")
  43. arcpy.AddField_management(self.out, "TARGETTYPE", "TEXT")
  44. # 算压占面积
  45. arcpy.CalculateField_management(self.out, "YZMJ", "!shape.area@SQUAREMETERS!", "PYTHON_9.3")
  46. with arcpy.da.UpdateCursor(self.out, ["TARGETTYPE"]) as cursor:
  47. for row in cursor:
  48. row[0] = self.GlobalType
  49. cursor.updateRow(row)
  50. # 遍历数据 计算TARGETID
  51. ufields = [self.GlobalField]
  52. with arcpy.da.UpdateCursor(self.clipF, ufields) as cursor:
  53. for row in cursor:
  54. targetid = row[0]
  55. # 将数据设置为FeatureLayer进行操作
  56. arcpy.MakeFeatureLayer_management(self.clipF, "clipF")
  57. arcpy.MakeFeatureLayer_management(self.out, "out")
  58. arcpy.SelectLayerByAttribute_management("clipF", "NEW_SELECTION",
  59. self.GlobalField + " = '" + targetid + "'")
  60. arcpy.SelectLayerByLocation_management("out", "INTERSECT", "clipF")
  61. with arcpy.da.UpdateCursor("out", ["TARGETID"]) as cursor:
  62. for row in cursor:
  63. row[0] = targetid
  64. cursor.updateRow(row)
  65. print("####OK####")
  66. def getUUID(self):
  67. return ''.join(str(uuid.uuid1()).split('-'))