application.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import json
  2. import os
  3. import requests
  4. import rq
  5. from app.mission_jobs.image_slice_job import image_slice_job
  6. from config import Config
  7. from connection import Connection
  8. class Application:
  9. def __init__(self, config):
  10. self._config = config
  11. def new_mission(self, dms_params, data_path, output_path, tile_size, tile_grid, tile_format, epsg, auto_zoom, min_zoom, max_zoom):
  12. # 获取token
  13. login_data = {
  14. 'userName': self._config.oauth.userName,
  15. 'password': self._config.oauth.password,
  16. 'clientId': self._config.oauth.clientId,
  17. 'serviceId': self._config.oauth.serviceId
  18. }
  19. login_rep = requests.post(self._config.oauth.URL + '/api/user/login', data=login_data).json()
  20. # 添加DMS
  21. headers = {'token': login_rep.get('message'), 'Content-Type': 'application/x-www-form-urlencoded'}
  22. dms_data = \
  23. {
  24. 'content': json.dumps({
  25. "title": dms_params.get('title'),
  26. "content": dms_params.get('content'),
  27. "c_tile_grid": "墨卡托投影切片",
  28. "c_name": dms_params.get('c_name'),
  29. "c_tile_format": tile_format,
  30. "c_epsg": '4326',
  31. "c_url": self._config.nginx.URL + '/%s/{z}/{x}/{y}.%s' % (os.path.basename(data_path), tile_format),
  32. "c_content": dms_params.get('c_content'),
  33. "c_note": dms_params.get('c_note'),
  34. "c_tile_size": tile_size,
  35. "c_zoom_min": min_zoom,
  36. "c_zoom_max": max_zoom,
  37. "c_auto_zoom": auto_zoom,
  38. "bbox": ''
  39. }, ensure_ascii=False),
  40. 'modelId': self._config.dms.modelId,
  41. 'columnId': self._config.dms.columnId
  42. }
  43. dms_rep = requests.post(self._config.dms.URL + '/content/addContent', headers=headers, data=dms_data).json()
  44. dms_id = dms_rep['content']
  45. # 影像切片
  46. config = Config()
  47. connection = Connection(config)
  48. # 添加任务
  49. q = rq.Queue(name='default', connection=connection.redis_conn)
  50. q.enqueue(image_slice_job,
  51. kwargs={"data_path": data_path,
  52. "output_path": output_path,
  53. "tile_size": tile_size,
  54. "tile_grid": tile_grid,
  55. "tile_format": tile_format,
  56. "epsg": epsg,
  57. "auto_zoom": auto_zoom,
  58. "min_zoom": min_zoom,
  59. "max_zoom": max_zoom,
  60. "dms_id": dms_id,
  61. "dms_data":dms_data
  62. },
  63. job_timeout=int(config.common.JOB_TIMEOUT)
  64. )