zhangnaiwen 1 rok temu
rodzic
commit
cff745d708

+ 6 - 6
docker-compose.yml

@@ -4,7 +4,7 @@ service:
   image: sky_stareath_tiler:1.0.0
 
   ports:
-    - "5000:5000"
+    - "10071:5000"
 
   environment:
     - UWSGI_PROCESSES=8
@@ -17,11 +17,11 @@ service:
 
   volumes:
     - /data/sky_stareath_tiler/logs:/data/logs # 日志
-    - /data/sky_stareath_tiler/tif:/data/tif  # 影像数据目录
-    - /data/sky_stareath_tiler/tileset:/data/tileset  # 3Dtiles数据目录
-    - /data/sky_stareath_tiler/output:/data/output  # 切片输出目录
+    - /data/image:/data/image  # 影像数据目录
+    - /data/tileset:/data/tileset  # 3Dtiles数据目录
+    - /data/output:/data/output  # 切片输出目录
     - ./config:/work/sky_stareath_tiler/config  # 配置文件目录,包括软件配置信息
-
+    - ./src:/work/sky_stareath_tiler/src  # 挂载代码测试时使用
   privileged: true
 
   restart: always
@@ -29,7 +29,7 @@ service:
 redis:
   image: docker.jcing.com/centos7_redis
 
-  container_name: slice_redis_test
+  container_name: sky_starearth_tiler_redis
 
   ports:
     - "6379:6379"

+ 2 - 0
src/app/api/__init__.py

@@ -2,8 +2,10 @@ from flask_restx import Api
 
 from app.api.mission import ns as mission_ns
 from app.api.file import ns as file_ns
+from app.api.image import ns as image_ns
 
 api = Api(version='v1.0', title='', description='', doc='/api')
 
 api.add_namespace(mission_ns)
 api.add_namespace(file_ns)
+# api.add_namespace(image_ns)

+ 1 - 1
src/app/api/file.py

@@ -33,7 +33,7 @@ class GetFilesApi(Resource):
 
             structure = get_directory_tree(path)
 
-            return jsonify(code=StatesCode.SUCCESS, message='获取成功', data=json.dumps(structure))
+            return jsonify(code=StatesCode.SUCCESS, message='获取成功', path=path, data=structure)
         except Exception as e:
             traceback.print_exc()
 

+ 27 - 5
src/app/api/mission.py

@@ -8,6 +8,7 @@ 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
 
@@ -18,6 +19,8 @@ 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='瓦片大小')
@@ -25,6 +28,7 @@ slice_mission_parser.add_argument(name='tile_format', type=str, location='form',
                                   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='最大切片层级')
 
@@ -43,18 +47,35 @@ class MissionAPI(Resource):
             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 = int(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='输入路径错误')
-            # 获取token
+
+            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))
+
+                # 获取token
             login_data = {
                 'userName': config.oauth.userName,
                 'password': config.oauth.password,
@@ -70,13 +91,13 @@ class MissionAPI(Resource):
                     'content': json.dumps({
                         "title": title,
                         "content": content,
-                        "c_tile_grid": tile_grid,
+                        "c_tile_grid": "墨卡托投影切片",
                         "c_name": c_name,
                         "c_tile_format": tile_format,
                         "c_epsg": '4326',
-                        "c_url": config.nginx.URL + config.common.OUTPUT_PATH,
-                        "c_content": "0",
-                        "c_note": "0",
+                        "c_url": config.nginx.URL + config.common.OUTPUT_PATH + '/{z}/{x}/{y}.%s' % tile_format,
+                        "c_content": c_content,
+                        "c_note": c_note,
                         "c_tile_size": tile_size,
                         "c_zoom_min": min_zoom,
                         "c_zoom_max": max_zoom,
@@ -94,6 +115,7 @@ class MissionAPI(Resource):
                 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,

+ 2 - 1
src/app/mission_jobs/application.py

@@ -10,7 +10,7 @@ class Application:
     # def __init__(self, config):
     #     self._config = config
 
-    def new_mission(self, data_path, tile_size, tile_grid, tile_format, auto_zoom, min_zoom, max_zoom, dms_id):
+    def new_mission(self, data_path, tile_size, tile_grid, tile_format, epsg, auto_zoom, min_zoom, max_zoom, dms_id):
         # 影像切片
         config = Config()
         connection = Connection(config)
@@ -24,6 +24,7 @@ class Application:
                           "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,

+ 2 - 1
src/app/mission_jobs/image_slice.py

@@ -21,6 +21,7 @@ def slice_zxy(
         auto_zoom,
         min_zoom,
         max_zoom,
+        epsg='EPSG:4326',
         nodata=0,
         enable_msmt=0,
         render_type="RGB",
@@ -29,7 +30,7 @@ def slice_zxy(
 ):
     print_log('开始切片...')
 
-    epsg = verify_geotiff(input_file, None)
+    # epsg = verify_geotiff(input_file, None)
 
     filesystem_cache = FileSystem(config.common.CACHE_PATH)
 

+ 2 - 1
src/app/mission_jobs/image_slice_job.py

@@ -8,7 +8,7 @@ from config import Config
 from connection import Connection
 
 
-def image_slice_job(data_path, output_path, tile_size, tile_grid, tile_format, auto_zoom, min_zoom, max_zoom, dms_id):
+def image_slice_job(data_path, output_path, tile_size, tile_grid, tile_format, epsg, auto_zoom, min_zoom, max_zoom, dms_id):
     config = Config()
     # connection = Connection(config)
 
@@ -38,6 +38,7 @@ def image_slice_job(data_path, output_path, tile_size, tile_grid, tile_format, a
                 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,

+ 1 - 1
src/app/utils/utils.py

@@ -2,7 +2,7 @@ import os
 
 
 def get_directory_tree(path):
-    tree = {'name': os.path.basename(path)}
+    tree = {'name': path}
     if os.path.isdir(path):
         tree['type'] = 'directory'
         tree['children'] = [get_directory_tree(os.path.join(path, child)) for child in os.listdir(path)]