resultTools.py 3.1 KB

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