ztt.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # -*- coding: utf-8 -*-
  2. import os
  3. import arcpy
  4. import uuid
  5. from db.postgresql import Postgresql
  6. import appconfig
  7. from arcpy import env
  8. import platform
  9. class Ztt:
  10. def __init__(self, data):
  11. # self.db = Postgresql(appconfig.DB_CONN)
  12. self.bsm = data["bsm"]
  13. # self.mxd = data["mxd"]
  14. # self.jpg = data["jpg"]
  15. # self.bsm = "d6acdfa1ee494a44a7f131abf69334b9"
  16. self.db = Postgresql(appconfig.DB_CONN)
  17. self.task()
  18. self.mxd = self.task['MBWJ']
  19. self.jpg = self.task['OUTPUT']
  20. self.extent = self.task['EXTENT']
  21. # self.jpg = "D:\\GeoScene\\work\\aprx\\export.jpg"
  22. def task(self):
  23. '''加载数据-任务'''
  24. sql = 'SELECT A.BSM AS "BSM",A.NAME AS "ZBT",A.dtsm AS "FBT",A.zzdw AS "BZDW",A.zzsj AS "BZSJ",a.zttwjlj as "OUTPUT",a.filepath as "EXTENT",B.MBMC AS "MBMC",B.MBWJ AS "MBWJ" FROM onemap.T_YZT_ZTTK A left JOIN onemap.T_YZT_ZTTMBK b ON A.MBBSM = b.BSM WHERE A.BSM = \'{0}\''.format(
  25. self.bsm)
  26. tasks = self.db.query(sql)
  27. if len(tasks) == 0:
  28. self.fxlog(self.bsm, "error", "任务标识错误[{0}]".format(self.bsm))
  29. raise Exception("任务标识错误[{0}]".format(self.bsm))
  30. self.task = tasks[0]
  31. def get_layer_extent(self, layer):
  32. desc = arcpy.Describe(layer)
  33. if desc and desc.extent:
  34. return desc.extent
  35. return None
  36. # 获取系统默认下载路径
  37. def get_download_dir(self):
  38. if platform.system() == "Windows":
  39. return os.path.join(os.path.expanduser("~"), "Downloads")
  40. elif platform.system() == "Darwin":
  41. return os.path.join(os.path.expanduser("~"), "Downloads")
  42. elif platform.system() == "Linux":
  43. return os.path.join(os.path.expanduser("~"), "Downloads")
  44. else:
  45. return None
  46. def run(self):
  47. aprx = arcpy.mp.ArcGISProject(self.mxd)
  48. layout_doc = aprx.listLayouts()[0]
  49. for elm in layout_doc.listElements("TEXT_ELEMENT"):
  50. if elm.name == "zbt":
  51. elm.text = self.task['ZBT']
  52. elif elm.name == "fbt":
  53. elm.text = self.task['FBT']
  54. elif elm.name == "bzsj":
  55. elm.text = '制作时间:{0}'.format(self.task['BZSJ'])
  56. elif elm.name == "ztdw":
  57. elm.text = '制作单位:{0}'.format(self.task['BZDW'])
  58. mapframe = layout_doc.listElements("MAPFRAME_ELEMENT")[0]
  59. temp = self.get_download_dir()
  60. temp_layer = temp + "/extent.shp"
  61. arcpy.Delete_management(temp_layer)
  62. if '.shp' in self.extent:
  63. where = '1 = 1'
  64. arcpy.analysis.Select(self.extent, temp_layer, where)
  65. else:
  66. where = 'xzqdm = \'{0}\''.format(self.extent)
  67. env.workspace = appconfig.SDE["KJGH"]
  68. arcpy.analysis.Select("KJGH.XZQMERGE", temp_layer, where)
  69. temp_layer_extent = self.get_layer_extent(temp_layer)
  70. layer = mapframe.map.addDataFromPath(temp_layer)
  71. if layer.isFeatureLayer:
  72. sym = layer.symbology
  73. sym.renderer.symbol.color = {"RGB": [0, 0, 0, 0]}
  74. sym.renderer.symbol.outlineColor = {"RGB": [255, 0, 0, 100]}
  75. sym.renderer.symbol.outlineWidth = 3.0
  76. layer.symbology = sym
  77. mapframe.camera.setExtent(temp_layer_extent)
  78. layout_doc.exportToJPEG(self.jpg, resolution=300)
  79. arcpy.Delete_management(temp_layer)
  80. print("####OK####")