resultTools.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # -*- coding: utf-8 -*-
  2. import log
  3. import zbmx.arcTools
  4. import appconfig
  5. import os
  6. # 面积统计
  7. def Area_statistics(inList, comObj, outGdb, xzq):
  8. mjField = "F__MJ"
  9. in_node = inList[0]
  10. data = in_node['sjy']
  11. areaU = "!shape.area@SQUAREMETERS!"
  12. if comObj["danwei"] == "km2":
  13. areaU = "!shape.area@SQUAREKILOMETERS!"
  14. if comObj["danwei"] == "hm2":
  15. areaU = "!shape.area@HECTARES!" # 公顷
  16. if comObj["danwei"] == "mu":
  17. areaU = "!shape.area@HECTARES!" # 亩=> 1公顷=15亩
  18. if comObj["danwei"] == "wmu":
  19. areaU = "!shape.area@HECTARES!" # 万亩
  20. if comObj["par1_field"] == "":
  21. arcTools.AddField_management(data, mjField, "DOUBLE")
  22. arcTools.CalculateField_management(data, mjField, areaU)
  23. else:
  24. mjField = comObj["par1_field"]
  25. list = arcTools.GetFieldValueList(data, mjField)
  26. tj = round(sum(list), 2)
  27. if comObj["danwei"] == "mu":
  28. tj = round(sum(list) * 15, 2)
  29. if comObj["danwei"] == "wmu":
  30. tj = round(sum(list) * 15 / 10000, 2)
  31. log.info("面积统计结束")
  32. return tj
  33. # 求面积占比(默认使用平方米 !shape.area@SQUAREMETERS!)
  34. def Area_proportion(inList, comObj, outGdb, xzq):
  35. divisor = 0 # 除数
  36. dividend = 0 # 被除数
  37. for in_node in inList:
  38. mjField = "F__MJ"
  39. data = in_node['sjy']
  40. type = "divisor" if in_node["key"] == comObj["divisor"] else "dividend"
  41. # 数据源
  42. if in_node['category'] == "sjy":
  43. sdeTable = in_node['sjy'].split('.')
  44. sde = appconfig.SDE[sdeTable[0]]
  45. data = sde + os.sep + sdeTable[1]
  46. # 面积
  47. if comObj["{0}_field".format(type)] == "":
  48. arcTools.AddField_management(data, mjField, "DOUBLE")
  49. arcTools.CalculateField_management(data, mjField, "!shape.area@SQUAREMETERS!")
  50. else:
  51. mjField = comObj["{0}_field"]
  52. # 汇总
  53. list = arcTools.GetFieldValueList(data, mjField)
  54. if type == "divisor":
  55. divisor = sum(list)
  56. else:
  57. dividend = sum(list)
  58. zb = round(divisor / dividend * 100, 2)
  59. log.info("面积占比结束")
  60. return zb
  61. # 求行政区占比(默认使用平方米 !shape.area@SQUAREMETERS!)
  62. def Area_xzqzb(inList, comObj, outGdb, xzq):
  63. divisor = 0 # 除数
  64. dividend = 0 # 被除数
  65. in_node = inList[0]
  66. in_data = in_node['sjy']
  67. in_xzq = in_node['xzq']
  68. mjField = "F__MJ"
  69. areaU = "!shape.area@SQUAREMETERS!"
  70. # 除数
  71. if comObj["par1_field"] == "":
  72. arcTools.AddField_management(in_data, mjField, "DOUBLE")
  73. arcTools.CalculateField_management(in_data, mjField, areaU)
  74. else:
  75. mjField = comObj["par1_field"]
  76. list = arcTools.GetFieldValueList(in_data, mjField)
  77. divisor = sum(list)
  78. # 被除数
  79. arcTools.AddField_management(in_xzq, mjField, "DOUBLE")
  80. arcTools.CalculateField_management(in_xzq, mjField, areaU)
  81. list = arcTools.GetFieldValueList(in_xzq, mjField)
  82. dividend = sum(list)
  83. zb = round(divisor / dividend * 100, 2)
  84. log.info("行政区占比结束")
  85. return zb