123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import json
- import os.path
- import traceback
- import requests
- from flask import request, jsonify
- from flask_restx import Resource, Namespace, reqparse
- from app.defines import StatesCode
- from app.mission_jobs.application import Application
- from app.utils.create_geojsonl import verify_geotiff
- from config import Config
- from starearth.utils.general_utils import print_log
- config = Config()
- ns = Namespace('mission', description='任务管理 API接口')
- slice_mission_parser = reqparse.RequestParser(bundle_errors=True)
- slice_mission_parser.add_argument(name='title', type=str, location='form', required=False, help='dms 标题')
- slice_mission_parser.add_argument(name='content', type=str, location='form', required=False, help='dms 描述')
- slice_mission_parser.add_argument(name='c_name', type=str, location='form', required=False, help='dms 名称')
- slice_mission_parser.add_argument(name='c_content', type=str, location='form', required=False, help='dms 描述')
- slice_mission_parser.add_argument(name='c_note', type=str, location='form', required=False, help='dms 备注')
- slice_mission_parser.add_argument(name='data_path', type=str, location='form', required=False, help='数据目录')
- slice_mission_parser.add_argument(name='tile_size', type=int, location='form', required=False, help='瓦片大小')
- slice_mission_parser.add_argument(name='tile_format', type=str, location='form', required=False,
- help='瓦片格式:png、jpeg、tif')
- slice_mission_parser.add_argument(name='auto_zoom', type=int, location='form', required=False,
- help='是否自动切片,0:否,1:是')
- slice_mission_parser.add_argument(name='epsg', type=str, location='form', required=False, help='投影信息:EPSG:4326、EPSG:3857')
- slice_mission_parser.add_argument(name='min_zoom', type=int, location='form', required=False, help='最小切片层级')
- slice_mission_parser.add_argument(name='max_zoom', type=int, location='form', required=False, help='最大切片层级')
- @ns.route('/mission_slice_api')
- class MissionAPI(Resource):
- @ns.doc(id='slice', description='切片')
- @ns.expect(slice_mission_parser)
- def post(self):
- """添加任务"""
- try:
- form = request.form
- # dms
- title = form.get('title')
- content = form.get('content')
- c_name = form.get('c_name')
- c_content = form.get('c_content')
- c_note = form.get('c_note')
- data_path = form.get('data_path')
- tile_size = int(form.get('tile_size', 256))
- tile_grid = form.get('tile_grid', 'WebMercatorQuad')
- tile_format = form.get('tile_format', 'png')
- auto_zoom = int(form.get('auto_zoom', 1))
- epsg = form.get('epsg', 'EPSG:4326')
- min_zoom = int(form.get('min_zoom', 1))
- max_zoom = int(form.get('max_zoom', 19))
- if not data_path:
- return jsonify(code=StatesCode.PARA_ERROR, message='输入路径错误')
- file_list = []
- for file in os.listdir(data_path):
- if file.endswith('.tif'):
- file_list.append(file)
- if not file_list:
- return jsonify(code=StatesCode.PARA_ERROR, message='路径无有效文件')
- err_file = []
- # 验证数据有错误数据直接返回错误数据
- for file_name in os.listdir(data_path):
- input_file = os.path.join(data_path, file_name)
- if os.path.splitext(file_name)[-1] == ".tif":
- try:
- verify_geotiff(input_file, epsg)
- except Exception:
- err_file.append(file_name)
- if err_file:
- return jsonify(code=StatesCode.PARA_ERROR, message='输入文件错误:{},不支持的投影'.format(err_file))
- output_path = os.path.join(config.common.OUTPUT_PATH, os.path.basename(data_path))
- dms_params = {
- 'title': title,
- 'content': content,
- 'c_name': c_name,
- 'c_content': c_content,
- 'c_note': c_note
- }
- application = Application(config)
- application.new_mission(
- dms_params=dms_params,
- data_path=data_path,
- output_path=output_path,
- tile_size=tile_size,
- tile_grid=tile_grid,
- tile_format=tile_format,
- epsg=epsg,
- auto_zoom=auto_zoom,
- min_zoom=min_zoom,
- max_zoom=max_zoom,
- )
- return {"code": StatesCode.SUCCESS,
- "message": "开始切片预计需要%s分钟,请耐心等待" % str(len(os.listdir(data_path)) * 8)}
- except Exception as err:
- traceback.print_exc()
- return {"code": StatesCode.UNKNOWN_ERROR, "message": str(err)}
|