正在显示
69 个修改的文件
包含
3199 行增加
和
305 行删除
@@ -44,6 +44,9 @@ def create_app(): | @@ -44,6 +44,9 @@ def create_app(): | ||
44 | :return:app,flask实例 | 44 | :return:app,flask实例 |
45 | """ | 45 | """ |
46 | 46 | ||
47 | + # 上下文全局变量字典 | ||
48 | + global GLOBAL_DIC | ||
49 | + | ||
47 | # app基本设置 | 50 | # app基本设置 |
48 | app = Flask(__name__) | 51 | app = Flask(__name__) |
49 | app.config['SQLALCHEMY_DATABASE_URI'] = configure.SQLALCHEMY_DATABASE_URI | 52 | app.config['SQLALCHEMY_DATABASE_URI'] = configure.SQLALCHEMY_DATABASE_URI |
@@ -96,15 +99,14 @@ def create_app(): | @@ -96,15 +99,14 @@ def create_app(): | ||
96 | # 入库监测线程 | 99 | # 入库监测线程 |
97 | @app.before_first_request | 100 | @app.before_first_request |
98 | def data_entry_process(): | 101 | def data_entry_process(): |
99 | - StructurePrint.print("start listen") | 102 | + StructurePrint().print("start listen") |
100 | process = threading.Thread(target=data_entry_center) | 103 | process = threading.Thread(target=data_entry_center) |
101 | process.start() | 104 | process.start() |
102 | 105 | ||
103 | # 不检测https | 106 | # 不检测https |
104 | os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1' | 107 | os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1' |
105 | 108 | ||
106 | - # 上下文全局变量字典 | ||
107 | - global GLOBAL_DIC | 109 | + |
108 | 110 | ||
109 | return app | 111 | return app |
110 | 112 |
@@ -11,7 +11,7 @@ import datetime | @@ -11,7 +11,7 @@ import datetime | ||
11 | 11 | ||
12 | from app.util.component.PGUtil import PGUtil | 12 | from app.util.component.PGUtil import PGUtil |
13 | import glob | 13 | import glob |
14 | - | 14 | +import traceback |
15 | class DES(): | 15 | class DES(): |
16 | ''' | 16 | ''' |
17 | DES密码加解密 | 17 | DES密码加解密 |
@@ -33,21 +33,6 @@ class DES(): | @@ -33,21 +33,6 @@ class DES(): | ||
33 | 33 | ||
34 | db = SQLAlchemy() | 34 | db = SQLAlchemy() |
35 | 35 | ||
36 | -# 动态加载Model | ||
37 | -current_dir = os.path.abspath(os.path.dirname(__file__)) | ||
38 | -pkgs = list(glob.glob('%s/modules/*/models' % (current_dir))) | ||
39 | -pkgs.extend(list(glob.glob('%s/modules/*/*/models' % (current_dir)))) | ||
40 | - | ||
41 | -for pkg in pkgs : | ||
42 | - pkg = os.path.normpath(pkg) | ||
43 | - node_list = pkg.split(os.path.sep) | ||
44 | - pkg_name = ".".join(node_list[node_list.index("app"):]) | ||
45 | - try: | ||
46 | - __import__(pkg_name) | ||
47 | - except: | ||
48 | - pass | ||
49 | - | ||
50 | - | ||
51 | 36 | ||
52 | class Table(db.Model): | 37 | class Table(db.Model): |
53 | ''' | 38 | ''' |
@@ -268,4 +253,21 @@ class TileScheme(db.Model): | @@ -268,4 +253,21 @@ class TileScheme(db.Model): | ||
268 | dpi = Column(Integer) | 253 | dpi = Column(Integer) |
269 | rows = Column(Integer) | 254 | rows = Column(Integer) |
270 | cols = Column(Integer) | 255 | cols = Column(Integer) |
271 | - update_time = Column(DateTime) | ||
256 | + update_time = Column(DateTime) | ||
257 | + | ||
258 | + parameter = Column(Text) | ||
259 | + | ||
260 | +# 动态加载Model | ||
261 | +current_dir = os.path.abspath(os.path.dirname(__file__)) | ||
262 | +pkgs = list(glob.glob('%s/modules/*/models' % (current_dir))) | ||
263 | +pkgs.extend(list(glob.glob('%s/modules/*/*/models' % (current_dir)))) | ||
264 | + | ||
265 | +for pkg in pkgs : | ||
266 | + pkg = os.path.normpath(pkg) | ||
267 | + node_list = pkg.split(os.path.sep) | ||
268 | + pkg_name = ".".join(node_list[node_list.index("app"):]) | ||
269 | + try: | ||
270 | + __import__(pkg_name) | ||
271 | + except Exception as e: | ||
272 | + print(traceback.format_exc()) | ||
273 | + pass |
@@ -121,7 +121,7 @@ class Api(ApiTemplate): | @@ -121,7 +121,7 @@ class Api(ApiTemplate): | ||
121 | 121 | ||
122 | # 没有权限的表跳过 | 122 | # 没有权限的表跳过 |
123 | if not PGUtil.check_table_privilege(l_name,"SELECT",db_tuple[0],pg_ds): | 123 | if not PGUtil.check_table_privilege(l_name,"SELECT",db_tuple[0],pg_ds): |
124 | - StructurePrint.print("用户{}对表{}没有select权限!".format(db_tuple[0],l_name),"warn") | 124 | + StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0],l_name),"warn") |
125 | continue | 125 | continue |
126 | 126 | ||
127 | # 范围统计和数量统计以100w为界限 | 127 | # 范围统计和数量统计以100w为界限 |
@@ -174,7 +174,7 @@ class Api(ApiTemplate): | @@ -174,7 +174,7 @@ class Api(ApiTemplate): | ||
174 | 174 | ||
175 | spatial_table_name.append(layer.GetName()) | 175 | spatial_table_name.append(layer.GetName()) |
176 | except: | 176 | except: |
177 | - StructurePrint.print("表{}注册失败!".format(l_name), "warn") | 177 | + StructurePrint().print("表{}注册失败!".format(l_name), "warn") |
178 | continue | 178 | continue |
179 | return spatial_table_name,tables | 179 | return spatial_table_name,tables |
180 | 180 | ||
@@ -193,7 +193,7 @@ class Api(ApiTemplate): | @@ -193,7 +193,7 @@ class Api(ApiTemplate): | ||
193 | 193 | ||
194 | # 没有权限的表跳过 | 194 | # 没有权限的表跳过 |
195 | if not SQLUtil.check_table_privilege(table_name, "SELECT", db_tuple[0], db_session): | 195 | if not SQLUtil.check_table_privilege(table_name, "SELECT", db_tuple[0], db_session): |
196 | - StructurePrint.print("用户{}对表{}没有select权限!".format(db_tuple[0],table_name), "warn") | 196 | + StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0],table_name), "warn") |
197 | continue | 197 | continue |
198 | 198 | ||
199 | table_guid = uuid.uuid1().__str__() | 199 | table_guid = uuid.uuid1().__str__() |
@@ -248,7 +248,7 @@ class Api(ApiTemplate): | @@ -248,7 +248,7 @@ class Api(ApiTemplate): | ||
248 | 248 | ||
249 | # 没有权限的表跳过 | 249 | # 没有权限的表跳过 |
250 | # if not PGUtil.check_table_privilege(l_name, "SELECT", db_tuple[0], pg_ds): | 250 | # if not PGUtil.check_table_privilege(l_name, "SELECT", db_tuple[0], pg_ds): |
251 | - # StructurePrint.print("用户{}对表{}没有select权限!".format(db_tuple[0], l_name), "warn") | 251 | + # StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], l_name), "warn") |
252 | # continue | 252 | # continue |
253 | 253 | ||
254 | base_layer_name=l_name.split("_vacuate_")[1] | 254 | base_layer_name=l_name.split("_vacuate_")[1] |
@@ -43,7 +43,7 @@ def data_entry_center(): | @@ -43,7 +43,7 @@ def data_entry_center(): | ||
43 | for process in remove_process: | 43 | for process in remove_process: |
44 | running_dict.pop(process) | 44 | running_dict.pop(process) |
45 | 45 | ||
46 | - # StructurePrint.print("listening...") | 46 | + # StructurePrint().print("listening...") |
47 | 47 | ||
48 | # 入库进程少于阈值,开启入库进程 | 48 | # 入库进程少于阈值,开启入库进程 |
49 | 49 | ||
@@ -58,7 +58,7 @@ def data_entry_center(): | @@ -58,7 +58,7 @@ def data_entry_center(): | ||
58 | 58 | ||
59 | try: | 59 | try: |
60 | parameter = json.loads(ready_task.parameter) | 60 | parameter = json.loads(ready_task.parameter) |
61 | - StructurePrint.print("检测到入库任务") | 61 | + StructurePrint().print("检测到入库任务") |
62 | ready_task.state = 2 | 62 | ready_task.state = 2 |
63 | ready_task.process = "入库中" | 63 | ready_task.process = "入库中" |
64 | sys_session.commit() | 64 | sys_session.commit() |
@@ -104,10 +104,10 @@ def data_entry_center(): | @@ -104,10 +104,10 @@ def data_entry_center(): | ||
104 | sys_session.query(Task).filter_by(guid=ready_task.guid).update( | 104 | sys_session.query(Task).filter_by(guid=ready_task.guid).update( |
105 | {"state": -1, "process": "入库失败"}) | 105 | {"state": -1, "process": "入库失败"}) |
106 | sys_session.commit() | 106 | sys_session.commit() |
107 | - StructurePrint.print(e.__str__(), "error") | 107 | + StructurePrint().print(e.__str__(), "error") |
108 | else: | 108 | else: |
109 | # 解表啊 | 109 | # 解表啊 |
110 | sys_session.commit() | 110 | sys_session.commit() |
111 | except Exception as e: | 111 | except Exception as e: |
112 | sys_session.commit() | 112 | sys_session.commit() |
113 | - StructurePrint.print(e.__str__(), "error") | ||
113 | + StructurePrint().print(e.__str__(), "error") |
@@ -199,7 +199,7 @@ class Api(ApiTemplate): | @@ -199,7 +199,7 @@ class Api(ApiTemplate): | ||
199 | 199 | ||
200 | # 没有权限的表跳过 | 200 | # 没有权限的表跳过 |
201 | if not PGUtil.check_table_privilege(l_name, "SELECT", db_tuple[0], pg_ds): | 201 | if not PGUtil.check_table_privilege(l_name, "SELECT", db_tuple[0], pg_ds): |
202 | - StructurePrint.print("用户{}对表{}没有select权限!".format(db_tuple[0], l_name), "warn") | 202 | + StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], l_name), "warn") |
203 | continue | 203 | continue |
204 | 204 | ||
205 | 205 | ||
@@ -224,11 +224,11 @@ class Api(ApiTemplate): | @@ -224,11 +224,11 @@ class Api(ApiTemplate): | ||
224 | ext = [round(e, 2) for e in ext] | 224 | ext = [round(e, 2) for e in ext] |
225 | extent = "{},{},{},{}".format(ext[0], ext[1], ext[2], ext[3]) | 225 | extent = "{},{},{},{}".format(ext[0], ext[1], ext[2], ext[3]) |
226 | 226 | ||
227 | - StructurePrint.print("空间表增加!") | 227 | + StructurePrint().print("空间表增加!") |
228 | 228 | ||
229 | geom_type = GeometryAdapter.get_geometry_type(layer) | 229 | geom_type = GeometryAdapter.get_geometry_type(layer) |
230 | except: | 230 | except: |
231 | - StructurePrint.print("表{}注册失败!".format(l_name), "warn") | 231 | + StructurePrint().print("表{}注册失败!".format(l_name), "warn") |
232 | continue | 232 | continue |
233 | 233 | ||
234 | table_guid = uuid.uuid1().__str__() | 234 | table_guid = uuid.uuid1().__str__() |
@@ -304,7 +304,7 @@ class Api(ApiTemplate): | @@ -304,7 +304,7 @@ class Api(ApiTemplate): | ||
304 | 304 | ||
305 | # 删除表 | 305 | # 删除表 |
306 | if table.name not in db_tables_names: | 306 | if table.name not in db_tables_names: |
307 | - StructurePrint.print("空间表减少!") | 307 | + StructurePrint().print("空间表减少!") |
308 | sys_session.delete(table) | 308 | sys_session.delete(table) |
309 | # 修改表 | 309 | # 修改表 |
310 | else: | 310 | else: |
@@ -320,7 +320,7 @@ class Api(ApiTemplate): | @@ -320,7 +320,7 @@ class Api(ApiTemplate): | ||
320 | 320 | ||
321 | # 没有权限的表跳过 | 321 | # 没有权限的表跳过 |
322 | if not PGUtil.check_table_privilege(l_name, "SELECT", db_tuple[0], pg_ds): | 322 | if not PGUtil.check_table_privilege(l_name, "SELECT", db_tuple[0], pg_ds): |
323 | - StructurePrint.print("用户{}对表{}没有select权限!".format(db_tuple[0], l_name), "warn") | 323 | + StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], l_name), "warn") |
324 | sys_session.delete(table) | 324 | sys_session.delete(table) |
325 | continue | 325 | continue |
326 | 326 | ||
@@ -336,7 +336,7 @@ class Api(ApiTemplate): | @@ -336,7 +336,7 @@ class Api(ApiTemplate): | ||
336 | db_columns_names.append(field_name) | 336 | db_columns_names.append(field_name) |
337 | 337 | ||
338 | if field_name not in columns_names: | 338 | if field_name not in columns_names: |
339 | - StructurePrint.print("{}空间表属性增加!".format(table.name)) | 339 | + StructurePrint().print("{}空间表属性增加!".format(table.name)) |
340 | field_alias = field_name if field_defn.GetAlternativeName() is None or field_defn.GetAlternativeName().__eq__( | 340 | field_alias = field_name if field_defn.GetAlternativeName() is None or field_defn.GetAlternativeName().__eq__( |
341 | "") else field_defn.GetAlternativeName() | 341 | "") else field_defn.GetAlternativeName() |
342 | column = Columns(guid=uuid.uuid1().__str__(), table_guid=table.guid, | 342 | column = Columns(guid=uuid.uuid1().__str__(), table_guid=table.guid, |
@@ -347,7 +347,7 @@ class Api(ApiTemplate): | @@ -347,7 +347,7 @@ class Api(ApiTemplate): | ||
347 | # 删除列 | 347 | # 删除列 |
348 | for column in columns: | 348 | for column in columns: |
349 | if column.name not in db_columns_names: | 349 | if column.name not in db_columns_names: |
350 | - StructurePrint.print("{}空间表属性减少!".format(table.name)) | 350 | + StructurePrint().print("{}空间表属性减少!".format(table.name)) |
351 | sys_session.delete(column) | 351 | sys_session.delete(column) |
352 | 352 | ||
353 | # 范围统计和数量统计以100w为界限 | 353 | # 范围统计和数量统计以100w为界限 |
@@ -373,7 +373,7 @@ class Api(ApiTemplate): | @@ -373,7 +373,7 @@ class Api(ApiTemplate): | ||
373 | 373 | ||
374 | # 修改要素量 | 374 | # 修改要素量 |
375 | if not table.feature_count.__eq__(feature_count): | 375 | if not table.feature_count.__eq__(feature_count): |
376 | - StructurePrint.print("{}空间表要素!".format(table.name)) | 376 | + StructurePrint().print("{}空间表要素!".format(table.name)) |
377 | sys_session.query(Table).filter_by(guid=table.guid).update({"feature_count": feature_count, | 377 | sys_session.query(Table).filter_by(guid=table.guid).update({"feature_count": feature_count, |
378 | "extent": extent}) | 378 | "extent": extent}) |
379 | 379 | ||
@@ -381,13 +381,13 @@ class Api(ApiTemplate): | @@ -381,13 +381,13 @@ class Api(ApiTemplate): | ||
381 | def add_common_table(self,data_session,sys_session,database_guid,real_common_tables_name,origin_common_tables_name,this_time,db_tuple): | 381 | def add_common_table(self,data_session,sys_session,database_guid,real_common_tables_name,origin_common_tables_name,this_time,db_tuple): |
382 | for table_name in real_common_tables_name: | 382 | for table_name in real_common_tables_name: |
383 | if table_name not in origin_common_tables_name: | 383 | if table_name not in origin_common_tables_name: |
384 | - StructurePrint.print("{}非空间表增加!".format(table_name)) | 384 | + StructurePrint().print("{}非空间表增加!".format(table_name)) |
385 | table_guid = uuid.uuid1().__str__() | 385 | table_guid = uuid.uuid1().__str__() |
386 | 386 | ||
387 | 387 | ||
388 | # 没有权限的表跳过 | 388 | # 没有权限的表跳过 |
389 | if not SQLUtil.check_table_privilege(table_name, "SELECT", db_tuple[0], data_session): | 389 | if not SQLUtil.check_table_privilege(table_name, "SELECT", db_tuple[0], data_session): |
390 | - StructurePrint.print("用户{}对表{}没有select权限!".format(db_tuple[0], table_name), "warn") | 390 | + StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], table_name), "warn") |
391 | continue | 391 | continue |
392 | 392 | ||
393 | count = data_session.execute('select count(*) from "{}"'.format(table_name)).fetchone()[0] | 393 | count = data_session.execute('select count(*) from "{}"'.format(table_name)).fetchone()[0] |
@@ -435,14 +435,14 @@ class Api(ApiTemplate): | @@ -435,14 +435,14 @@ class Api(ApiTemplate): | ||
435 | tables = sys_session.query(Table).filter_by(name=table_name).filter_by(database_guid=database_guid).all() | 435 | tables = sys_session.query(Table).filter_by(name=table_name).filter_by(database_guid=database_guid).all() |
436 | for table in tables: | 436 | for table in tables: |
437 | if table_name not in real_common_tables_name: | 437 | if table_name not in real_common_tables_name: |
438 | - StructurePrint.print("{}非空间表减少!".format(table_name)) | 438 | + StructurePrint().print("{}非空间表减少!".format(table_name)) |
439 | sys_session.delete(table) | 439 | sys_session.delete(table) |
440 | # 修改表 | 440 | # 修改表 |
441 | else: | 441 | else: |
442 | 442 | ||
443 | # 没有权限的表删除 | 443 | # 没有权限的表删除 |
444 | if not SQLUtil.check_table_privilege(table_name, "SELECT", db_tuple[0], data_session): | 444 | if not SQLUtil.check_table_privilege(table_name, "SELECT", db_tuple[0], data_session): |
445 | - StructurePrint.print("用户{}对表{}没有select权限!".format(db_tuple[0], table_name), "warn") | 445 | + StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], table_name), "warn") |
446 | sys_session.delete(table) | 446 | sys_session.delete(table) |
447 | continue | 447 | continue |
448 | 448 | ||
@@ -471,7 +471,7 @@ class Api(ApiTemplate): | @@ -471,7 +471,7 @@ class Api(ApiTemplate): | ||
471 | # 属性增加 | 471 | # 属性增加 |
472 | for col in real_cols_name: | 472 | for col in real_cols_name: |
473 | if col not in columns_names: | 473 | if col not in columns_names: |
474 | - StructurePrint.print("{}表要素属性增加!".format(table_name)) | 474 | + StructurePrint().print("{}表要素属性增加!".format(table_name)) |
475 | column = Columns(guid=uuid.uuid1().__str__(), table_guid=table.guid, | 475 | column = Columns(guid=uuid.uuid1().__str__(), table_guid=table.guid, |
476 | name=col, create_time=this_time, update_time=this_time) | 476 | name=col, create_time=this_time, update_time=this_time) |
477 | sys_session.add(column) | 477 | sys_session.add(column) |
@@ -479,7 +479,7 @@ class Api(ApiTemplate): | @@ -479,7 +479,7 @@ class Api(ApiTemplate): | ||
479 | # 属性减少 | 479 | # 属性减少 |
480 | for column in columns: | 480 | for column in columns: |
481 | if column.name not in real_cols_name: | 481 | if column.name not in real_cols_name: |
482 | - StructurePrint.print("{}表要素属性减少!".format(table_name)) | 482 | + StructurePrint().print("{}表要素属性减少!".format(table_name)) |
483 | sys_session.delete(column) | 483 | sys_session.delete(column) |
484 | 484 | ||
485 | # 修改要素量 | 485 | # 修改要素量 |
@@ -489,7 +489,7 @@ class Api(ApiTemplate): | @@ -489,7 +489,7 @@ class Api(ApiTemplate): | ||
489 | count = SQLUtil.get_table_count(table_name,data_session) | 489 | count = SQLUtil.get_table_count(table_name,data_session) |
490 | 490 | ||
491 | if not table.feature_count.__eq__(count): | 491 | if not table.feature_count.__eq__(count): |
492 | - StructurePrint.print("{}表要素变化!".format(table_name)) | 492 | + StructurePrint().print("{}表要素变化!".format(table_name)) |
493 | sys_session.query(Table).filter_by(guid=table.guid).update({"feature_count": count}) | 493 | sys_session.query(Table).filter_by(guid=table.guid).update({"feature_count": count}) |
494 | 494 | ||
495 | 495 |
@@ -126,7 +126,7 @@ class Api(ApiTemplate): | @@ -126,7 +126,7 @@ class Api(ApiTemplate): | ||
126 | # try: | 126 | # try: |
127 | # pg_ds.DeleteLayer(tv.name) | 127 | # pg_ds.DeleteLayer(tv.name) |
128 | # except Exception as e : | 128 | # except Exception as e : |
129 | - # StructurePrint.print("抽稀图层不存在!","warn") | 129 | + # StructurePrint().print("抽稀图层不存在!","warn") |
130 | 130 | ||
131 | # 创建抽稀过程 | 131 | # 创建抽稀过程 |
132 | options = ["OVERWRITE=yes", "GEOMETRY_NAME={}".format(PGUtil.get_geo_column(table.name,pg_session)), | 132 | options = ["OVERWRITE=yes", "GEOMETRY_NAME={}".format(PGUtil.get_geo_column(table.name,pg_session)), |
@@ -257,7 +257,7 @@ class VacuateProcess: | @@ -257,7 +257,7 @@ class VacuateProcess: | ||
257 | p_x = (extent[1]-extent[0])/10.0 | 257 | p_x = (extent[1]-extent[0])/10.0 |
258 | p_y = (extent[3] - extent[2]) / 10.0 | 258 | p_y = (extent[3] - extent[2]) / 10.0 |
259 | fill_precent=0 | 259 | fill_precent=0 |
260 | - StructurePrint.print("判断疏密") | 260 | + StructurePrint().print("判断疏密") |
261 | for ix in range(10): | 261 | for ix in range(10): |
262 | for iy in range(10): | 262 | for iy in range(10): |
263 | grid_extent = [extent[0]+ix*p_x,extent[0]+ix*p_x+p_x,extent[2]+iy*p_y,extent[2]+iy*p_y+p_y] | 263 | grid_extent = [extent[0]+ix*p_x,extent[0]+ix*p_x+p_x,extent[2]+iy*p_y,extent[2]+iy*p_y+p_y] |
@@ -270,7 +270,7 @@ class VacuateProcess: | @@ -270,7 +270,7 @@ class VacuateProcess: | ||
270 | fill_precent += 1 | 270 | fill_precent += 1 |
271 | 271 | ||
272 | print(fill_precent) | 272 | print(fill_precent) |
273 | - StructurePrint.print("判断疏密结束") | 273 | + StructurePrint().print("判断疏密结束") |
274 | 274 | ||
275 | layer.SetSpatialFilter(None) | 275 | layer.SetSpatialFilter(None) |
276 | layer.ResetReading() | 276 | layer.ResetReading() |
@@ -66,7 +66,7 @@ class Api(ApiTemplate): | @@ -66,7 +66,7 @@ class Api(ApiTemplate): | ||
66 | p_x = (extent[1] - extent[0]) / 10.0 | 66 | p_x = (extent[1] - extent[0]) / 10.0 |
67 | p_y = (extent[3] - extent[2]) / 10.0 | 67 | p_y = (extent[3] - extent[2]) / 10.0 |
68 | fill_precent = 0 | 68 | fill_precent = 0 |
69 | - StructurePrint.print("判断疏密") | 69 | + StructurePrint().print("判断疏密") |
70 | for ix in range(10): | 70 | for ix in range(10): |
71 | for iy in range(10): | 71 | for iy in range(10): |
72 | grid_extent = [extent[0] + ix * p_x, extent[0] + ix * p_x + p_x, extent[2] + iy * p_y, | 72 | grid_extent = [extent[0] + ix * p_x, extent[0] + ix * p_x + p_x, extent[2] + iy * p_y, |
@@ -80,7 +80,7 @@ class Api(ApiTemplate): | @@ -80,7 +80,7 @@ class Api(ApiTemplate): | ||
80 | fill_precent += 1 | 80 | fill_precent += 1 |
81 | 81 | ||
82 | print(fill_precent) | 82 | print(fill_precent) |
83 | - StructurePrint.print("判断疏密结束") | 83 | + StructurePrint().print("判断疏密结束") |
84 | 84 | ||
85 | layer.SetSpatialFilter(None) | 85 | layer.SetSpatialFilter(None) |
86 | layer.ResetReading() | 86 | layer.ResetReading() |
@@ -8,6 +8,7 @@ from flask import current_app as app | @@ -8,6 +8,7 @@ from flask import current_app as app | ||
8 | import socket | 8 | import socket |
9 | import configure | 9 | import configure |
10 | 10 | ||
11 | + | ||
11 | from app.util.component.ApiTemplate import ApiTemplate | 12 | from app.util.component.ApiTemplate import ApiTemplate |
12 | class Api(ApiTemplate): | 13 | class Api(ApiTemplate): |
13 | 14 |
@@ -6,10 +6,13 @@ import hashlib | @@ -6,10 +6,13 @@ import hashlib | ||
6 | from flask import current_app as app | 6 | from flask import current_app as app |
7 | import socket | 7 | import socket |
8 | 8 | ||
9 | + | ||
9 | from app.util.component.ApiTemplate import ApiTemplate | 10 | from app.util.component.ApiTemplate import ApiTemplate |
11 | +from app.util.component.StructuredPrint import StructurePrint | ||
10 | class Api(ApiTemplate): | 12 | class Api(ApiTemplate): |
11 | 13 | ||
12 | def process(self): | 14 | def process(self): |
15 | + StructurePrint().print("test") | ||
13 | return {"Name":socket.gethostname(),"Type":"DMapDMS"} | 16 | return {"Name":socket.gethostname(),"Type":"DMapDMS"} |
14 | 17 | ||
15 | api_doc={ | 18 | api_doc={ |
@@ -10,12 +10,6 @@ from . import service_register | @@ -10,12 +10,6 @@ from . import service_register | ||
10 | from . import service_type | 10 | from . import service_type |
11 | from . import service_list | 11 | from . import service_list |
12 | from . import service_delete | 12 | from . import service_delete |
13 | -from . import catalog_create | ||
14 | -from . import catalog_delete | ||
15 | -from . import catalog_edit | ||
16 | -from . import catalog_tree | ||
17 | -from . import catalog_next | ||
18 | -from . import catalog_real_tree | ||
19 | import os | 13 | import os |
20 | from flask import send_from_directory | 14 | from flask import send_from_directory |
21 | 15 | ||
@@ -61,69 +55,6 @@ class DataManager(BlueprintApi): | @@ -61,69 +55,6 @@ class DataManager(BlueprintApi): | ||
61 | """ | 55 | """ |
62 | return service_delete.Api().result | 56 | return service_delete.Api().result |
63 | 57 | ||
64 | - @staticmethod | ||
65 | - @bp.route('/CatalogCreate', methods=['POST']) | ||
66 | - @swag_from(catalog_create.Api.api_doc) | ||
67 | - def api_catalog_create(): | ||
68 | - """ | ||
69 | - 创建服务目录 | ||
70 | - """ | ||
71 | - return catalog_create.Api().result | ||
72 | - | ||
73 | - @staticmethod | ||
74 | - @bp.route('/CatalogDelete', methods=['POST']) | ||
75 | - @swag_from(catalog_delete.Api.api_doc) | ||
76 | - def api_catalog_delete(): | ||
77 | - """ | ||
78 | - 删除服务目录 | ||
79 | - """ | ||
80 | - return catalog_delete.Api().result | ||
81 | - | ||
82 | - @staticmethod | ||
83 | - @bp.route('/CatalogEdit', methods=['POST']) | ||
84 | - @swag_from(catalog_edit.Api.api_doc) | ||
85 | - def api_catalog_edit(): | ||
86 | - """ | ||
87 | - 修改服务目录 | ||
88 | - """ | ||
89 | - return catalog_edit.Api().result | ||
90 | - | ||
91 | - @staticmethod | ||
92 | - @bp.route('/CatalogEdit', methods=['POST']) | ||
93 | - @swag_from(catalog_edit.Api.api_doc) | ||
94 | - def api_catalog_edit(): | ||
95 | - """ | ||
96 | - 修改服务目录 | ||
97 | - """ | ||
98 | - return catalog_edit.Api().result | ||
99 | - | ||
100 | - @staticmethod | ||
101 | - @bp.route('/CatalogNext', methods=['POST']) | ||
102 | - @swag_from(catalog_next.Api.api_doc) | ||
103 | - def api_catalog_next(): | ||
104 | - """ | ||
105 | - 下一级服务目录 | ||
106 | - """ | ||
107 | - return catalog_next.Api().result | ||
108 | - | ||
109 | - @staticmethod | ||
110 | - @bp.route('/CatalogTree', methods=['POST']) | ||
111 | - @swag_from(catalog_tree.Api.api_doc) | ||
112 | - def api_catalog_tree(): | ||
113 | - """ | ||
114 | - 服务目录树 | ||
115 | - """ | ||
116 | - return catalog_tree.Api().result | ||
117 | - | ||
118 | - @staticmethod | ||
119 | - @bp.route('/CatalogRealTree', methods=['POST']) | ||
120 | - @swag_from(catalog_real_tree.Api.api_doc) | ||
121 | - def api_catalog_real_tree(): | ||
122 | - """ | ||
123 | - 服务目录树 | ||
124 | - """ | ||
125 | - return catalog_real_tree.Api().result | ||
126 | - | ||
127 | 58 | ||
128 | @staticmethod | 59 | @staticmethod |
129 | @bp.route('/Overview/<file>', methods=['GET']) | 60 | @bp.route('/Overview/<file>', methods=['GET']) |
app/modules/service/catalog/__init__.py
0 → 100644
1 | +# coding=utf-8 | ||
2 | +#author: 4N | ||
3 | +#createtime: 2021/9/22 | ||
4 | +#email: nheweijun@sina.com | ||
5 | + | ||
6 | + | ||
7 | + | ||
8 | +# coding=utf-8 | ||
9 | +#author: 4N | ||
10 | +#createtime: 2021/9/14 | ||
11 | +#email: nheweijun@sina.com | ||
12 | + | ||
13 | +from flasgger import swag_from | ||
14 | +from flask import Blueprint | ||
15 | +from app.util import BlueprintApi | ||
16 | +from . import catalog_edit, catalog_tree, catalog_delete, catalog_create, catalog_next,catalog_real_tree | ||
17 | + | ||
18 | + | ||
19 | +class DataManager(BlueprintApi): | ||
20 | + | ||
21 | + bp = Blueprint("ServiceCatalog", __name__, url_prefix="/API/Service/Catalog") | ||
22 | + | ||
23 | + | ||
24 | + @staticmethod | ||
25 | + @bp.route('/Create', methods=['POST']) | ||
26 | + @swag_from(catalog_create.Api.api_doc) | ||
27 | + def api_catalog_create(): | ||
28 | + """ | ||
29 | + 创建服务目录 | ||
30 | + """ | ||
31 | + return catalog_create.Api().result | ||
32 | + | ||
33 | + @staticmethod | ||
34 | + @bp.route('/Delete', methods=['POST']) | ||
35 | + @swag_from(catalog_delete.Api.api_doc) | ||
36 | + def api_catalog_delete(): | ||
37 | + """ | ||
38 | + 删除服务目录 | ||
39 | + """ | ||
40 | + return catalog_delete.Api().result | ||
41 | + | ||
42 | + @staticmethod | ||
43 | + @bp.route('/Edit', methods=['POST']) | ||
44 | + @swag_from(catalog_edit.Api.api_doc) | ||
45 | + def api_catalog_edit(): | ||
46 | + """ | ||
47 | + 修改服务目录 | ||
48 | + """ | ||
49 | + return catalog_edit.Api().result | ||
50 | + | ||
51 | + | ||
52 | + @staticmethod | ||
53 | + @bp.route('/Next', methods=['POST']) | ||
54 | + @swag_from(catalog_next.Api.api_doc) | ||
55 | + def api_catalog_next(): | ||
56 | + """ | ||
57 | + 下一级服务目录 | ||
58 | + """ | ||
59 | + return catalog_next.Api().result | ||
60 | + | ||
61 | + @staticmethod | ||
62 | + @bp.route('/Tree', methods=['POST']) | ||
63 | + @swag_from(catalog_tree.Api.api_doc) | ||
64 | + def api_catalog_tree(): | ||
65 | + """ | ||
66 | + 服务目录树 | ||
67 | + """ | ||
68 | + return catalog_tree.Api().result | ||
69 | + | ||
70 | + @staticmethod | ||
71 | + @bp.route('/RealTree', methods=['POST']) | ||
72 | + @swag_from(catalog_real_tree.Api.api_doc) | ||
73 | + def api_catalog_real_tree(): | ||
74 | + """ | ||
75 | + 服务目录树 | ||
76 | + """ | ||
77 | + return catalog_real_tree.Api().result | ||
78 | + |
@@ -32,7 +32,7 @@ class Api(ApiTemplate): | @@ -32,7 +32,7 @@ class Api(ApiTemplate): | ||
32 | 32 | ||
33 | api_doc={ | 33 | api_doc={ |
34 | 34 | ||
35 | - "tags":["服务接口"], | 35 | + "tags":["服务目录接口"], |
36 | "parameters":[ | 36 | "parameters":[ |
37 | {"name": "catalog_guid", | 37 | {"name": "catalog_guid", |
38 | "in": "formData", | 38 | "in": "formData", |
@@ -50,7 +50,7 @@ class Api(ApiTemplate): | @@ -50,7 +50,7 @@ class Api(ApiTemplate): | ||
50 | 50 | ||
51 | api_doc={ | 51 | api_doc={ |
52 | 52 | ||
53 | - "tags":["服务接口"], | 53 | + "tags":["服务目录接口"], |
54 | "parameters":[ | 54 | "parameters":[ |
55 | {"name": "database_guid", | 55 | {"name": "database_guid", |
56 | "in": "formData", | 56 | "in": "formData", |
@@ -39,7 +39,7 @@ class Api(ApiTemplate): | @@ -39,7 +39,7 @@ class Api(ApiTemplate): | ||
39 | 39 | ||
40 | api_doc={ | 40 | api_doc={ |
41 | 41 | ||
42 | - "tags":["服务接口"], | 42 | + "tags":["服务目录接口"], |
43 | "parameters":[ | 43 | "parameters":[ |
44 | {"name": "database_guid", | 44 | {"name": "database_guid", |
45 | "in": "formData", | 45 | "in": "formData", |
@@ -9,14 +9,14 @@ from flask import Blueprint | @@ -9,14 +9,14 @@ from flask import Blueprint | ||
9 | from app.util import BlueprintApi | 9 | from app.util import BlueprintApi |
10 | from . import image_register | 10 | from . import image_register |
11 | from . import image_service_register | 11 | from . import image_service_register |
12 | -from . import image_service_list | ||
13 | from . import image_server_list | 12 | from . import image_server_list |
14 | from . import data_list | 13 | from . import data_list |
15 | from . import capabilities | 14 | from . import capabilities |
16 | from . import image_list | 15 | from . import image_list |
17 | from . import image_tile | 16 | from . import image_tile |
18 | from . import image_wms | 17 | from . import image_wms |
19 | - | 18 | +from . import image_overview |
19 | +from . import image_service_list | ||
20 | 20 | ||
21 | 21 | ||
22 | class DataManager(BlueprintApi): | 22 | class DataManager(BlueprintApi): |
@@ -33,6 +33,16 @@ class DataManager(BlueprintApi): | @@ -33,6 +33,16 @@ class DataManager(BlueprintApi): | ||
33 | """ | 33 | """ |
34 | return image_register.Api().result | 34 | return image_register.Api().result |
35 | 35 | ||
36 | + | ||
37 | + @staticmethod | ||
38 | + @bp.route('/Overview', methods=['POST']) | ||
39 | + @swag_from(image_overview.Api.api_doc) | ||
40 | + def api_image_overview(): | ||
41 | + """ | ||
42 | + 影像缩略图 | ||
43 | + """ | ||
44 | + return image_overview.Api().result | ||
45 | + | ||
36 | @staticmethod | 46 | @staticmethod |
37 | @bp.route('/ServiceRegister', methods=['POST']) | 47 | @bp.route('/ServiceRegister', methods=['POST']) |
38 | @swag_from(image_service_register.Api.api_doc) | 48 | @swag_from(image_service_register.Api.api_doc) |
@@ -43,6 +53,15 @@ class DataManager(BlueprintApi): | @@ -43,6 +53,15 @@ class DataManager(BlueprintApi): | ||
43 | return image_service_register.Api().result | 53 | return image_service_register.Api().result |
44 | 54 | ||
45 | @staticmethod | 55 | @staticmethod |
56 | + @bp.route('/ServiceList', methods=['GET']) | ||
57 | + @swag_from(image_service_list.Api.api_doc) | ||
58 | + def api_image_service_list(): | ||
59 | + """ | ||
60 | + 服务列表 | ||
61 | + """ | ||
62 | + return image_service_list.Api().result | ||
63 | + | ||
64 | + @staticmethod | ||
46 | @bp.route('/ServerList', methods=['GET']) | 65 | @bp.route('/ServerList', methods=['GET']) |
47 | @swag_from(image_server_list.Api.api_doc) | 66 | @swag_from(image_server_list.Api.api_doc) |
48 | def image_server_list(): | 67 | def image_server_list(): |
@@ -79,14 +98,6 @@ class DataManager(BlueprintApi): | @@ -79,14 +98,6 @@ class DataManager(BlueprintApi): | ||
79 | """ | 98 | """ |
80 | return image_list.Api().result | 99 | return image_list.Api().result |
81 | 100 | ||
82 | - @staticmethod | ||
83 | - @bp.route('/ImageServiceList', methods=['POST']) | ||
84 | - @swag_from(image_service_list.Api.api_doc) | ||
85 | - def image_service_list(): | ||
86 | - """ | ||
87 | - 影像服务列表 | ||
88 | - """ | ||
89 | - return image_service_list.Api().result | ||
90 | 101 | ||
91 | @staticmethod | 102 | @staticmethod |
92 | @bp.route('/Tile/<guid>/<l>/<y>/<z>', methods=['GET']) | 103 | @bp.route('/Tile/<guid>/<l>/<y>/<z>', methods=['GET']) |
不能预览此文件类型
不能预览此文件类型
不能预览此文件类型
不能预览此文件类型
不能预览此文件类型
@@ -2,3 +2,52 @@ | @@ -2,3 +2,52 @@ | ||
2 | #author: 4N | 2 | #author: 4N |
3 | #createtime: 2021/9/8 | 3 | #createtime: 2021/9/8 |
4 | #email: nheweijun@sina.com | 4 | #email: nheweijun@sina.com |
5 | + | ||
6 | + | ||
7 | + | ||
8 | +from app.util.component.ApiTemplate import ApiTemplate | ||
9 | +from app.util.component.ModelVisitor import ModelVisitor | ||
10 | + | ||
11 | +from app.modules.service.image.models import Image,db | ||
12 | +from sqlalchemy import or_,and_ | ||
13 | +import datetime | ||
14 | +class Api(ApiTemplate): | ||
15 | + | ||
16 | + api_name = "影像数据List" | ||
17 | + | ||
18 | + def process(self): | ||
19 | + | ||
20 | + # 返回结果 | ||
21 | + res = {} | ||
22 | + try: | ||
23 | + para = self.para | ||
24 | + guid = self.para.get("guid") | ||
25 | + image = Image.query.filter_by(guid=guid).one_or_none() | ||
26 | + del para["guid"] | ||
27 | + para["update_time"] = datetime.datetime.now() | ||
28 | + image.update(para) | ||
29 | + db.session.commit() | ||
30 | + | ||
31 | + res["result"] = True | ||
32 | + except Exception as e: | ||
33 | + raise e | ||
34 | + | ||
35 | + return res | ||
36 | + | ||
37 | + | ||
38 | + api_doc = { | ||
39 | + "tags": ["影像接口"], | ||
40 | + "parameters": [ | ||
41 | + {"name": "alias", | ||
42 | + "in": "formData", | ||
43 | + "type": "string"}, | ||
44 | + ], | ||
45 | + "responses": { | ||
46 | + 200: { | ||
47 | + "schema": { | ||
48 | + "properties": { | ||
49 | + } | ||
50 | + } | ||
51 | + } | ||
52 | + } | ||
53 | + } |
@@ -5,30 +5,90 @@ | @@ -5,30 +5,90 @@ | ||
5 | 5 | ||
6 | 6 | ||
7 | from app.util.component.ApiTemplate import ApiTemplate | 7 | from app.util.component.ApiTemplate import ApiTemplate |
8 | -from app.util.component.ModelVisitor import ModelVisitor | 8 | +from app.util.component.StructuredPrint import StructurePrint |
9 | 9 | ||
10 | from app.modules.service.image.models import Image | 10 | from app.modules.service.image.models import Image |
11 | -from sqlalchemy import or_,and_ | 11 | +from sqlalchemy import or_ |
12 | +import random | ||
13 | +from .image_wms import Api as WMSApi | ||
14 | +import numpy | ||
15 | +import json | ||
16 | +from flask import Response | ||
17 | +from kazoo.client import KazooClient | ||
18 | +import configure | ||
19 | +import traceback | ||
20 | + | ||
21 | + | ||
12 | class Api(ApiTemplate): | 22 | class Api(ApiTemplate): |
13 | 23 | ||
14 | api_name = "影像数据预览功能" | 24 | api_name = "影像数据预览功能" |
15 | 25 | ||
16 | def process(self): | 26 | def process(self): |
27 | + from app import GLOBAL_DIC | ||
17 | 28 | ||
18 | # 返回结果 | 29 | # 返回结果 |
19 | res = {} | 30 | res = {} |
31 | + | ||
20 | try: | 32 | try: |
33 | + | ||
34 | + #获取 | ||
35 | + zoo = GLOBAL_DIC.get("zookeeper") | ||
36 | + if zoo is None: | ||
37 | + zoo :KazooClient = KazooClient(hosts=configure.zookeeper, timeout=100) | ||
38 | + zoo.start() | ||
39 | + GLOBAL_DIC["zookeeper"] = zoo | ||
40 | + StructurePrint().print("连接zoo") | ||
41 | + else : | ||
42 | + if not zoo.connected: | ||
43 | + zoo.start() | ||
21 | 44 | ||
22 | - res["result"] = True | ||
23 | - except Exception as e: | ||
24 | - raise e | ||
25 | 45 | ||
26 | - return res | 46 | + guid = self.para.get("guid") |
47 | + image = Image.query.filter_by(guid=guid).one_or_none() | ||
48 | + # 该影像的服务器,随机选取一个 | ||
49 | + image_servers = image.server.split(",") | ||
50 | + indx = int(random.random() * len(image_servers)) | ||
51 | + image_server = image_servers[indx] | ||
52 | + wms_api = WMSApi() | ||
53 | + | ||
54 | + bands = [1,2,3] if image.band_count>=3 else [1,1,1] | ||
55 | + | ||
56 | + #计算查询范围,保持正常比例 | ||
57 | + query_extent = json.loads(image.extent) | ||
58 | + if query_extent[2]-query_extent[0] > query_extent[3]-query_extent[1]: | ||
59 | + offset = ((query_extent[2]-query_extent[0]) - (query_extent[3]-query_extent[1])) / 2.0 | ||
60 | + query_extent = [query_extent[0],query_extent[1] - offset ,query_extent[2],query_extent[3] + offset] | ||
61 | + else: | ||
62 | + offset = ((query_extent[3] - query_extent[1]) - (query_extent[2] - query_extent[0])) / 2.0 | ||
63 | + query_extent = [query_extent[0] - offset, query_extent[1], query_extent[2] + offset, query_extent[3]] | ||
64 | + | ||
65 | + | ||
66 | + pixel_array_t = wms_api.get_data(zoo, image_server, image, query_extent, bands, 256, 256) | ||
67 | + | ||
68 | + | ||
69 | + pixel_array = numpy.zeros((256, 256, 3), dtype=int) | ||
70 | + for ii in [0, 1, 2]: | ||
71 | + # opencv 颜色排序为GBR | ||
72 | + pixel_array[:, :, 2 - ii] = pixel_array_t[:, :, ii] | ||
73 | + | ||
74 | + # 将图片生成在内存中,然后直接返回response | ||
75 | + im_data = wms_api.create_by_opencv("image/jpeg", pixel_array, 30) | ||
76 | + | ||
77 | + return Response(im_data, mimetype="image/jpeg") | ||
78 | + | ||
79 | + except Exception as e: | ||
80 | + StructurePrint().print(traceback.format_exc()) | ||
81 | + res["state"] = -1 | ||
82 | + res["message"] = e.__str__() | ||
83 | + return res | ||
27 | 84 | ||
28 | 85 | ||
29 | api_doc = { | 86 | api_doc = { |
30 | "tags": ["影像接口"], | 87 | "tags": ["影像接口"], |
31 | "parameters": [ | 88 | "parameters": [ |
89 | + {"name": "guid", | ||
90 | + "in": "formData", | ||
91 | + "type": "string"}, | ||
32 | ], | 92 | ], |
33 | "responses": { | 93 | "responses": { |
34 | 200: { | 94 | 200: { |
@@ -117,7 +117,7 @@ class Api(ApiTemplate): | @@ -117,7 +117,7 @@ class Api(ApiTemplate): | ||
117 | cell_x_size = info.get("cell_x_size"), | 117 | cell_x_size = info.get("cell_x_size"), |
118 | cell_y_size = abs(info.get("cell_y_size")), | 118 | cell_y_size = abs(info.get("cell_y_size")), |
119 | name=os.path.basename(info.get("path")), | 119 | name=os.path.basename(info.get("path")), |
120 | - origin_extent=json.dumps(info["origin_extent"]), | 120 | + extent=json.dumps(info["origin_extent"]), |
121 | # geo_origin_extent = json.dumps(info["geo_origin_extent"]), | 121 | # geo_origin_extent = json.dumps(info["geo_origin_extent"]), |
122 | null_value=info.get("null_value"), | 122 | null_value=info.get("null_value"), |
123 | server=data_server, | 123 | server=data_server, |
@@ -132,6 +132,9 @@ class Api(ApiTemplate): | @@ -132,6 +132,9 @@ class Api(ApiTemplate): | ||
132 | db.session.add(image) | 132 | db.session.add(image) |
133 | db.session.commit() | 133 | db.session.commit() |
134 | # res["data"] = guid | 134 | # res["data"] = guid |
135 | + | ||
136 | + | ||
137 | + | ||
135 | res["result"] = True | 138 | res["result"] = True |
136 | 139 | ||
137 | except Exception as e: | 140 | except Exception as e: |
@@ -4,7 +4,7 @@ | @@ -4,7 +4,7 @@ | ||
4 | #email: nheweijun@sina.com | 4 | #email: nheweijun@sina.com |
5 | 5 | ||
6 | from app.util.component.ApiTemplate import ApiTemplate | 6 | from app.util.component.ApiTemplate import ApiTemplate |
7 | -from app import GLOBAL_DIC | 7 | + |
8 | from kazoo.client import KazooClient | 8 | from kazoo.client import KazooClient |
9 | import configure | 9 | import configure |
10 | class Api(ApiTemplate): | 10 | class Api(ApiTemplate): |
@@ -12,6 +12,7 @@ class Api(ApiTemplate): | @@ -12,6 +12,7 @@ class Api(ApiTemplate): | ||
12 | api_name = "获取数据服务器列表" | 12 | api_name = "获取数据服务器列表" |
13 | 13 | ||
14 | def process(self): | 14 | def process(self): |
15 | + from app import GLOBAL_DIC | ||
15 | 16 | ||
16 | # 返回结果 | 17 | # 返回结果 |
17 | res = {} | 18 | res = {} |
@@ -6,25 +6,39 @@ | @@ -6,25 +6,39 @@ | ||
6 | from app.modules.service.image.models import ImageService,Image | 6 | from app.modules.service.image.models import ImageService,Image |
7 | from app.models import db | 7 | from app.models import db |
8 | from app.util.component.ApiTemplate import ApiTemplate | 8 | from app.util.component.ApiTemplate import ApiTemplate |
9 | -import uuid | ||
10 | -from app.util.component.SliceScheme import SliceScheme | ||
11 | -from app.util.component.FileProcess import FileProcess | ||
12 | -import os | ||
13 | -import json | 9 | +from app.models import Service |
14 | import datetime | 10 | import datetime |
15 | class Api(ApiTemplate): | 11 | class Api(ApiTemplate): |
16 | 12 | ||
17 | - api_name = "注册影像服务" | 13 | + api_name = "修改影像服务" |
18 | 14 | ||
19 | def process(self): | 15 | def process(self): |
20 | 16 | ||
21 | - | ||
22 | - | ||
23 | # 返回结果 | 17 | # 返回结果 |
24 | res = {} | 18 | res = {} |
25 | 19 | ||
26 | try: | 20 | try: |
27 | 21 | ||
22 | + guid = self.para.get("guid") | ||
23 | + service = Service.query.filter_by(guid=guid).one_or_none() | ||
24 | + this_time = datetime.datetime.now() | ||
25 | + | ||
26 | + | ||
27 | + service_update = {"upate_time":this_time} | ||
28 | + image_service = {"upate_time":this_time} | ||
29 | + for key in self.para.keys(): | ||
30 | + if key in ["name","alias","state","description","catalog_guid"]: | ||
31 | + service_update[key] = self.para.get(key) | ||
32 | + if key in ["name","scheme_guid"]: | ||
33 | + image_service[key] = self.para.get(key) | ||
34 | + | ||
35 | + image_service = ImageService.query.filter_by(guid=service.service_guid).one_or_none() | ||
36 | + | ||
37 | + service.update(service_update) | ||
38 | + image_service.update(image_service) | ||
39 | + | ||
40 | + db.session.commit() | ||
41 | + | ||
28 | res["result"] = True | 42 | res["result"] = True |
29 | except Exception as e: | 43 | except Exception as e: |
30 | raise e | 44 | raise e |
@@ -34,14 +48,12 @@ class Api(ApiTemplate): | @@ -34,14 +48,12 @@ class Api(ApiTemplate): | ||
34 | api_doc = { | 48 | api_doc = { |
35 | "tags": ["影像接口"], | 49 | "tags": ["影像接口"], |
36 | "parameters": [ | 50 | "parameters": [ |
37 | - {"name": "guids", | 51 | + {"name": "guid", |
38 | "in": "formData", | 52 | "in": "formData", |
39 | - "type": "string", | ||
40 | - "description": "影像guids,以英文逗号相隔"}, | ||
41 | - {"name": "file", | 53 | + "type": "string"}, |
54 | + {"name": "name", | ||
42 | "in": "formData", | 55 | "in": "formData", |
43 | - "type": "file", | ||
44 | - "description": "切片方案"}, | 56 | + "type": "string"}, |
45 | ], | 57 | ], |
46 | "responses": { | 58 | "responses": { |
47 | 200: { | 59 | 200: { |
1 | +# coding=utf-8 | ||
2 | +#author: 4N | ||
3 | +#createtime: 2021/7/19 | ||
4 | +#email: nheweijun@sina.com | ||
5 | + | ||
6 | +from app.modules.service.image.models import ImageService,Image | ||
7 | + | ||
8 | +from app.util.component.ApiTemplate import ApiTemplate | ||
9 | +from app.util.component.ModelVisitor import ModelVisitor | ||
10 | +from app.models import Service | ||
11 | +from sqlalchemy import or_ | ||
12 | +class Api(ApiTemplate): | ||
13 | + | ||
14 | + api_name = "影像服务List" | ||
15 | + | ||
16 | + def process(self): | ||
17 | + | ||
18 | + # 返回结果 | ||
19 | + res = {} | ||
20 | + | ||
21 | + try: | ||
22 | + page_index = int(self.para.get("page_index", "0")) | ||
23 | + page_size = int(self.para.get("page_size", "10")) | ||
24 | + | ||
25 | + alias = self.para.get("alias") | ||
26 | + name = self.para.get("name") | ||
27 | + type = self.para.get("type") | ||
28 | + | ||
29 | + services = ImageService.query | ||
30 | + if type: | ||
31 | + services = services.filter_by(type=type) | ||
32 | + # 并集 | ||
33 | + if alias and name: | ||
34 | + services = services.filter( | ||
35 | + or_(ImageService.alias.like("%" + alias + "%"), ImageService.name.like("%" + name + "%"))) | ||
36 | + else: | ||
37 | + if alias: | ||
38 | + services = services.filter(ImageService.alias.like("%" + alias + "%")) | ||
39 | + if name: | ||
40 | + services = services.filter(ImageService.name.like("%" + name + "%")) | ||
41 | + | ||
42 | + services = services.limit(page_size).offset(page_index).all() | ||
43 | + | ||
44 | + res["data"] = ModelVisitor.objects_to_jsonarray(services) | ||
45 | + res["result"] = True | ||
46 | + except Exception as e: | ||
47 | + raise e | ||
48 | + | ||
49 | + return res | ||
50 | + | ||
51 | + api_doc = { | ||
52 | + "tags": ["影像接口"], | ||
53 | + "parameters": [ | ||
54 | + {"name": "page_index", | ||
55 | + "in": "formData", | ||
56 | + "type": "int", | ||
57 | + "description": "页"}, | ||
58 | + {"name": "page_size", | ||
59 | + "in": "formData", | ||
60 | + "type": "int", | ||
61 | + "description": "页大小"}, | ||
62 | + {"name": "alias", | ||
63 | + "in": "formData", | ||
64 | + "type": "string", | ||
65 | + "description": "服务别名"}, | ||
66 | + {"name": "name", | ||
67 | + "in": "formData", | ||
68 | + "type": "string", | ||
69 | + "description": "服务名"}, | ||
70 | + ], | ||
71 | + "responses": { | ||
72 | + 200: { | ||
73 | + "schema": { | ||
74 | + "properties": { | ||
75 | + } | ||
76 | + } | ||
77 | + } | ||
78 | + } | ||
79 | + } |
@@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
3 | #createtime: 2021/7/19 | 3 | #createtime: 2021/7/19 |
4 | #email: nheweijun@sina.com | 4 | #email: nheweijun@sina.com |
5 | 5 | ||
6 | -from app.modules.service.image.models import ImageService,Image | 6 | +from .models import ImageService,Image |
7 | from app.models import db,Service | 7 | from app.models import db,Service |
8 | from app.util.component.ApiTemplate import ApiTemplate | 8 | from app.util.component.ApiTemplate import ApiTemplate |
9 | import uuid | 9 | import uuid |
@@ -12,6 +12,10 @@ from app.util.component.FileProcess import FileProcess | @@ -12,6 +12,10 @@ from app.util.component.FileProcess import FileProcess | ||
12 | import os | 12 | import os |
13 | import json | 13 | import json |
14 | import datetime | 14 | import datetime |
15 | +from .image_wms import Api as Api2 | ||
16 | +import cv2 | ||
17 | +import configure | ||
18 | + | ||
15 | class Api(ApiTemplate): | 19 | class Api(ApiTemplate): |
16 | 20 | ||
17 | api_name = "注册影像服务" | 21 | api_name = "注册影像服务" |
@@ -26,55 +30,133 @@ class Api(ApiTemplate): | @@ -26,55 +30,133 @@ class Api(ApiTemplate): | ||
26 | try: | 30 | try: |
27 | guids = self.para.get("guids").split(",") | 31 | guids = self.para.get("guids").split(",") |
28 | name = self.para.get("name") | 32 | name = self.para.get("name") |
29 | - catalog_guid = self.para.get("catalog_guid") | ||
30 | - | ||
31 | - service_guid = uuid.uuid1().__str__() | ||
32 | 33 | ||
34 | + image_service_guid = uuid.uuid1().__str__() | ||
33 | 35 | ||
34 | - parent = os.path.dirname(os.path.realpath(__file__)) | ||
35 | - dir_path, store_file = FileProcess.save(parent) | ||
36 | - scheme = SliceScheme(store_file).parameter | ||
37 | - | ||
38 | - service = ImageService(guid=service_guid, name=name, | ||
39 | - create_time=datetime.datetime.now()) | ||
40 | - service_exetent = [] | 36 | + this_time = datetime.datetime.now() |
37 | + service_guid = uuid.uuid1().__str__() | ||
38 | + image_service = ImageService(guid=image_service_guid, | ||
39 | + name=name, | ||
40 | + create_time=this_time, | ||
41 | + scheme_guid=self.para.get("scheme_guid"), | ||
42 | + crs = self.para.get("crs"), | ||
43 | + service_guid=service_guid) | ||
44 | + image_service_exetent = [] | ||
41 | 45 | ||
42 | for g in guids: | 46 | for g in guids: |
43 | image = Image.query.filter_by(guid=g).one_or_none() | 47 | image = Image.query.filter_by(guid=g).one_or_none() |
44 | if image: | 48 | if image: |
45 | - image_extent = json.loads(image.origin_extent) | ||
46 | - if not service_exetent: | ||
47 | - service_exetent = image_extent | 49 | + image_extent = json.loads(image.extent) |
50 | + if not image_service_exetent: | ||
51 | + image_service_exetent = image_extent | ||
48 | else: | 52 | else: |
49 | - service_exetent[0] = min(image_extent[0],service_exetent[0]) | ||
50 | - service_exetent[1] = min(image_extent[1], service_exetent[1]) | ||
51 | - service_exetent[2] = max(image_extent[2], service_exetent[2]) | ||
52 | - service_exetent[3] = max(image_extent[3], service_exetent[3]) | ||
53 | - service.images.append(image) | ||
54 | - service.extent = json.dumps(service_exetent) | 53 | + image_service_exetent[0] = min(image_extent[0],image_service_exetent[0]) |
54 | + image_service_exetent[1] = min(image_extent[1], image_service_exetent[1]) | ||
55 | + image_service_exetent[2] = max(image_extent[2], image_service_exetent[2]) | ||
56 | + image_service_exetent[3] = max(image_extent[3], image_service_exetent[3]) | ||
57 | + image_service.images.append(image) | ||
58 | + image_service.extent = json.dumps(image_service_exetent) | ||
59 | + | ||
60 | + | ||
61 | + | ||
62 | + service = Service( | ||
63 | + guid = service_guid, | ||
64 | + name = self.para.get("name"), | ||
65 | + alias = self.para.get("alias"), | ||
66 | + state = 1, | ||
67 | + create_time = this_time, | ||
68 | + update_time = this_time, | ||
69 | + description = self.para.get("description"), | ||
70 | + #node = Column(Integer), | ||
71 | + type = self.para.get("type"), | ||
72 | + service_guid = image_service_guid, | ||
73 | + catalog_guid = self.para.get("catalog_guid") | ||
74 | + ) | ||
75 | + | ||
55 | db.session.add(service) | 76 | db.session.add(service) |
56 | - db.session.commit() | 77 | + db.session.add(image_service) |
78 | + | ||
57 | 79 | ||
58 | #获得overview | 80 | #获得overview |
81 | + overview_file = self.get_overview(service,image_service) | ||
82 | + service.overview="http://{}/API/Service/Overview/{}".format( | ||
83 | + configure.deploy_ip_host,overview_file) | ||
84 | + db.session.commit() | ||
59 | 85 | ||
60 | - res["data"] = service_guid | 86 | + res["data"] = image_service_guid |
61 | res["result"] = True | 87 | res["result"] = True |
62 | except Exception as e: | 88 | except Exception as e: |
89 | + db.session.rollback() | ||
63 | raise e | 90 | raise e |
64 | 91 | ||
65 | return res | 92 | return res |
66 | 93 | ||
94 | + def get_overview(self,service,image_service): | ||
95 | + | ||
96 | + api = Api2() | ||
97 | + | ||
98 | + | ||
99 | + query_extent = json.loads(image_service.extent) | ||
100 | + if query_extent[2] - query_extent[0] > query_extent[3] - query_extent[1]: | ||
101 | + offset = ((query_extent[2] - query_extent[0]) - (query_extent[3] - query_extent[1])) / 2.0 | ||
102 | + query_extent = [query_extent[0], query_extent[1] - offset, query_extent[2], query_extent[3] + offset] | ||
103 | + else: | ||
104 | + offset = ((query_extent[3] - query_extent[1]) - (query_extent[2] - query_extent[0])) / 2.0 | ||
105 | + query_extent = [query_extent[0] - offset, query_extent[1], query_extent[2] + offset, query_extent[3]] | ||
106 | + | ||
107 | + bbox = ",".join([str(x) for x in query_extent]) | ||
108 | + | ||
109 | + api.para = {"guid":image_service.guid,"bbox":bbox,"overview":1} | ||
110 | + res = api.process() | ||
111 | + dir_path = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "overview") | ||
112 | + gid = uuid.uuid1().__str__() | ||
113 | + store_file = os.path.join(dir_path, "{}.jpg".format(gid)) | ||
114 | + cv2.imwrite(store_file, res, [cv2.IMWRITE_JPEG_QUALITY, 30]) | ||
115 | + | ||
116 | + return "{}.jpg".format(gid) | ||
117 | + | ||
118 | + | ||
119 | + | ||
120 | + | ||
67 | api_doc = { | 121 | api_doc = { |
68 | "tags": ["影像接口"], | 122 | "tags": ["影像接口"], |
69 | "parameters": [ | 123 | "parameters": [ |
124 | + | ||
125 | + # 通用参数 | ||
126 | + {"name": "name", | ||
127 | + "in": "formData", | ||
128 | + "type": "string", | ||
129 | + "required": "true", | ||
130 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
131 | + {"name": "alias", | ||
132 | + "in": "formData", | ||
133 | + "type": "string", | ||
134 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
135 | + {"name": "description", | ||
136 | + "in": "formData", | ||
137 | + "type": "string", | ||
138 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
139 | + {"name": "type", | ||
140 | + "in": "formData", | ||
141 | + "type": "string", | ||
142 | + "enum": ["WMS", "WMTS", "影像WMS", "影像WMTS"], | ||
143 | + "required": "true", | ||
144 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
145 | + {"name": "catalog_guid", | ||
146 | + "in": "formData", | ||
147 | + "type": "string", | ||
148 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
149 | + | ||
150 | + # 影像参数 | ||
70 | {"name": "guids", | 151 | {"name": "guids", |
71 | "in": "formData", | 152 | "in": "formData", |
72 | "type": "string", | 153 | "type": "string", |
73 | - "description": "影像guids,以英文逗号相隔"}, | ||
74 | - {"name": "file", | 154 | + "description": "[影像WMS,影像WMTS]影像guids,以英文逗号相隔"}, |
155 | + {"name": "scheme_guid", | ||
75 | "in": "formData", | 156 | "in": "formData", |
76 | - "type": "file", | ||
77 | - "description": "切片方案"}, | 157 | + "type": "string", |
158 | + "description": "[WMTS,影像WMTS]切片方案"}, | ||
159 | + | ||
78 | ], | 160 | ], |
79 | "responses": { | 161 | "responses": { |
80 | 200: { | 162 | 200: { |
@@ -84,4 +166,7 @@ class Api(ApiTemplate): | @@ -84,4 +166,7 @@ class Api(ApiTemplate): | ||
84 | } | 166 | } |
85 | } | 167 | } |
86 | } | 168 | } |
87 | - } | ||
169 | + } | ||
170 | + | ||
171 | +if __name__ == '__main__': | ||
172 | + pass |
1 | +# coding=utf-8 | ||
2 | +#author: 4N | ||
3 | +#createtime: 2021/9/8 | ||
4 | +#email: nheweijun@sina.com | ||
5 | + | ||
6 | + | ||
7 | +from app.util.component.ApiTemplate import ApiTemplate | ||
8 | +from app.util.component.ModelVisitor import ModelVisitor | ||
9 | +from kazoo.client import KazooClient | ||
10 | +import configure | ||
11 | +from .models import ImageTag | ||
12 | +import uuid | ||
13 | +from app.models import db | ||
14 | +class Api(ApiTemplate): | ||
15 | + | ||
16 | + api_name = "create tag" | ||
17 | + | ||
18 | + def process(self): | ||
19 | + | ||
20 | + # 返回结果 | ||
21 | + res = {} | ||
22 | + try: | ||
23 | + tag_guid = uuid.uuid1().__str__() | ||
24 | + | ||
25 | + image_tag = ImageTag(guid=tag_guid,name=self.para.get("name")) | ||
26 | + db.session.add(image_tag) | ||
27 | + db.session.commit() | ||
28 | + res["data"] = tag_guid | ||
29 | + res["result"] = True | ||
30 | + except Exception as e: | ||
31 | + raise e | ||
32 | + return res | ||
33 | + | ||
34 | + api_doc = { | ||
35 | + "tags": ["影像接口"], | ||
36 | + "parameters": [ | ||
37 | + {"name": "name", | ||
38 | + "in": "formData", | ||
39 | + "type": "string"}, | ||
40 | + ], | ||
41 | + "responses": { | ||
42 | + 200: { | ||
43 | + "schema": { | ||
44 | + "properties": { | ||
45 | + } | ||
46 | + } | ||
47 | + } | ||
48 | + } | ||
49 | + } |
1 | +# coding=utf-8 | ||
2 | +#author: 4N | ||
3 | +#createtime: 2021/9/8 | ||
4 | +#email: nheweijun@sina.com | ||
5 | + | ||
6 | + | ||
7 | +from app.util.component.ApiTemplate import ApiTemplate | ||
8 | +from app.models import db | ||
9 | +from .models import ImageTag | ||
10 | +class Api(ApiTemplate): | ||
11 | + | ||
12 | + api_name = "delete tag" | ||
13 | + | ||
14 | + def process(self): | ||
15 | + | ||
16 | + # 返回结果 | ||
17 | + res = {} | ||
18 | + try: | ||
19 | + image_tag = ImageTag.query.filter_by(guid=self.para.get("guid")).one_or_none() | ||
20 | + if image_tag: | ||
21 | + db.session.delete(image_tag) | ||
22 | + db.session.commit() | ||
23 | + res["result"] = True | ||
24 | + except Exception as e: | ||
25 | + raise e | ||
26 | + return res | ||
27 | + | ||
28 | + api_doc = { | ||
29 | + "tags": ["影像接口"], | ||
30 | + "parameters": [ | ||
31 | + {"name": "guid", | ||
32 | + "in": "formData", | ||
33 | + "type": "string"}, | ||
34 | + ], | ||
35 | + "responses": { | ||
36 | + 200: { | ||
37 | + "schema": { | ||
38 | + "properties": { | ||
39 | + } | ||
40 | + } | ||
41 | + } | ||
42 | + } | ||
43 | + } |
@@ -2,3 +2,39 @@ | @@ -2,3 +2,39 @@ | ||
2 | #author: 4N | 2 | #author: 4N |
3 | #createtime: 2021/9/8 | 3 | #createtime: 2021/9/8 |
4 | #email: nheweijun@sina.com | 4 | #email: nheweijun@sina.com |
5 | + | ||
6 | + | ||
7 | +from app.util.component.ApiTemplate import ApiTemplate | ||
8 | +from app.util.component.ModelVisitor import ModelVisitor | ||
9 | +from kazoo.client import KazooClient | ||
10 | +import configure | ||
11 | +from .models import ImageTag | ||
12 | +class Api(ApiTemplate): | ||
13 | + | ||
14 | + api_name = "获取tag列表" | ||
15 | + | ||
16 | + def process(self): | ||
17 | + | ||
18 | + # 返回结果 | ||
19 | + res = {} | ||
20 | + try: | ||
21 | + image_tags = ImageTag.query.all() | ||
22 | + res["data"] = ModelVisitor.objects_to_jsonarray(image_tags) | ||
23 | + res["result"] = True | ||
24 | + except Exception as e: | ||
25 | + raise e | ||
26 | + return res | ||
27 | + | ||
28 | + api_doc = { | ||
29 | + "tags": ["影像接口"], | ||
30 | + "parameters": [ | ||
31 | + ], | ||
32 | + "responses": { | ||
33 | + 200: { | ||
34 | + "schema": { | ||
35 | + "properties": { | ||
36 | + } | ||
37 | + } | ||
38 | + } | ||
39 | + } | ||
40 | + } |
@@ -17,7 +17,7 @@ from PIL import Image | @@ -17,7 +17,7 @@ from PIL import Image | ||
17 | import time | 17 | import time |
18 | import cv2 | 18 | import cv2 |
19 | from app.modules.service.image.models import ImageService,Image | 19 | from app.modules.service.image.models import ImageService,Image |
20 | -from app.models import db | 20 | +from app.models import db,TileScheme |
21 | from app.util.component.ApiTemplate import ApiTemplate | 21 | from app.util.component.ApiTemplate import ApiTemplate |
22 | import uuid | 22 | import uuid |
23 | from app.util.component.SliceScheme import SliceScheme | 23 | from app.util.component.SliceScheme import SliceScheme |
@@ -27,7 +27,7 @@ from app.util.component.GeometryAdapter import GeometryAdapter | @@ -27,7 +27,7 @@ from app.util.component.GeometryAdapter import GeometryAdapter | ||
27 | import os | 27 | import os |
28 | import json | 28 | import json |
29 | from kazoo.client import KazooClient | 29 | from kazoo.client import KazooClient |
30 | -from app import GLOBAL_DIC | 30 | + |
31 | from threading import Thread | 31 | from threading import Thread |
32 | 32 | ||
33 | from app.modules.service.image.util.ThriftConnect import ThriftConnect | 33 | from app.modules.service.image.util.ThriftConnect import ThriftConnect |
@@ -46,7 +46,7 @@ class Api(ApiTemplate): | @@ -46,7 +46,7 @@ class Api(ApiTemplate): | ||
46 | self.col = col | 46 | self.col = col |
47 | 47 | ||
48 | def process(self): | 48 | def process(self): |
49 | - | 49 | + from app import GLOBAL_DIC |
50 | result = {} | 50 | result = {} |
51 | parameter: dict = self.para | 51 | parameter: dict = self.para |
52 | 52 | ||
@@ -54,8 +54,16 @@ class Api(ApiTemplate): | @@ -54,8 +54,16 @@ class Api(ApiTemplate): | ||
54 | if parameter.get("guid"): | 54 | if parameter.get("guid"): |
55 | self.guid = parameter.get("guid") | 55 | self.guid = parameter.get("guid") |
56 | 56 | ||
57 | - image_service = ImageService.query.filter_by(guid = self.guid).one_or_none() | ||
58 | - images = image_service.images.all() | 57 | + #缓存服务信息 |
58 | + image_service_info = GLOBAL_DIC.get(self.guid) | ||
59 | + if image_service_info is None: | ||
60 | + image_service:ImageService = ImageService.query.filter_by(guid = self.guid).one_or_none() | ||
61 | + images = image_service.images.all() | ||
62 | + scheme:TileScheme = TileScheme.query.filter_by(guid=image_service.scheme_guid).one_or_none() | ||
63 | + GLOBAL_DIC[self.guid] = {"service":image_service,"images":images,"scheme":json.loads(scheme.parameter)} | ||
64 | + image_service_info = GLOBAL_DIC[self.guid] | ||
65 | + else: | ||
66 | + image_service_info = GLOBAL_DIC[self.guid] | ||
59 | 67 | ||
60 | zoo = GLOBAL_DIC.get("zookeeper") | 68 | zoo = GLOBAL_DIC.get("zookeeper") |
61 | if zoo is None: | 69 | if zoo is None: |
@@ -85,14 +93,15 @@ class Api(ApiTemplate): | @@ -85,14 +93,15 @@ class Api(ApiTemplate): | ||
85 | 93 | ||
86 | image_type = parameter.get("format") if parameter.get("format") else "image/png" | 94 | image_type = parameter.get("format") if parameter.get("format") else "image/png" |
87 | quality = int(parameter.get("quality")) if parameter.get("quality") else 30 | 95 | quality = int(parameter.get("quality")) if parameter.get("quality") else 30 |
88 | - slice_para = json.loads(image_service.slice_scheme) | 96 | + slice_para = image_service_info["scheme"] |
89 | extent = SliceScheme.get_polygon(slice_para, self.level, self.row, self.col) | 97 | extent = SliceScheme.get_polygon(slice_para, self.level, self.row, self.col) |
90 | 98 | ||
99 | + | ||
91 | height, width = 256,256 | 100 | height, width = 256,256 |
92 | 101 | ||
93 | # 多线程获取分布式数据 | 102 | # 多线程获取分布式数据 |
94 | 103 | ||
95 | - intersect_image = [im for im in images if self.determin_intersect(json.loads(im.origin_extent),extent)] | 104 | + intersect_image = [im for im in image_service_info["images"] if self.determin_intersect(json.loads(im.extent),extent)] |
96 | 105 | ||
97 | if len(intersect_image) > 1: | 106 | if len(intersect_image) > 1: |
98 | 107 | ||
@@ -109,7 +118,6 @@ class Api(ApiTemplate): | @@ -109,7 +118,6 @@ class Api(ApiTemplate): | ||
109 | image_servers = image.server.split(",") | 118 | image_servers = image.server.split(",") |
110 | indx = int(random.random() * len(image_servers)) | 119 | indx = int(random.random() * len(image_servers)) |
111 | image_server = image_servers[indx] | 120 | image_server = image_servers[indx] |
112 | - | ||
113 | thread: MyThread = MyThread(self.get_data, | 121 | thread: MyThread = MyThread(self.get_data, |
114 | args=(zoo, image_server, image, extent, bands, height, width)) | 122 | args=(zoo, image_server, image, extent, bands, height, width)) |
115 | thread.start() | 123 | thread.start() |
@@ -141,7 +149,9 @@ class Api(ApiTemplate): | @@ -141,7 +149,9 @@ class Api(ApiTemplate): | ||
141 | image = intersect_image[0] | 149 | image = intersect_image[0] |
142 | image_servers = image.server.split(",") | 150 | image_servers = image.server.split(",") |
143 | indx = int(random.random() * len(image_servers)) | 151 | indx = int(random.random() * len(image_servers)) |
152 | + | ||
144 | image_server = image_servers[indx] | 153 | image_server = image_servers[indx] |
154 | + | ||
145 | pixel_array_t = self.get_data(zoo, image_server, image, extent, bands, height, width) | 155 | pixel_array_t = self.get_data(zoo, image_server, image, extent, bands, height, width) |
146 | pixel_array = numpy.zeros((height, width, 3), dtype=int) | 156 | pixel_array = numpy.zeros((height, width, 3), dtype=int) |
147 | for ii in [0, 1, 2]: | 157 | for ii in [0, 1, 2]: |
@@ -205,13 +215,13 @@ class Api(ApiTemplate): | @@ -205,13 +215,13 @@ class Api(ApiTemplate): | ||
205 | else: | 215 | else: |
206 | ser = image_server | 216 | ser = image_server |
207 | if zoo.exists("/rpc/{}".format(ser)): | 217 | if zoo.exists("/rpc/{}".format(ser)): |
208 | - data = self.get_remote_wms_data(image, extent, bands, height, width) | 218 | + data = self.get_remote_wms_data(ser,image, extent, bands, height, width) |
209 | else: | 219 | else: |
210 | data = numpy.zeros((height, width, 3), dtype=int) + 65536 | 220 | data = numpy.zeros((height, width, 3), dtype=int) + 65536 |
211 | 221 | ||
212 | return data | 222 | return data |
213 | 223 | ||
214 | - def get_remote_wms_data(self, image, extent, bands, height, width): | 224 | + def get_remote_wms_data(self, image_server,image, extent, bands, height, width): |
215 | ''' | 225 | ''' |
216 | 通过RPC获取远程数据 | 226 | 通过RPC获取远程数据 |
217 | :param image: | 227 | :param image: |
@@ -219,14 +229,19 @@ class Api(ApiTemplate): | @@ -219,14 +229,19 @@ class Api(ApiTemplate): | ||
219 | :param bands: | 229 | :param bands: |
220 | :return: | 230 | :return: |
221 | ''' | 231 | ''' |
222 | - thrift_connect = ThriftConnect(image.server) | 232 | + |
233 | + | ||
234 | + #需要做thrift连接的缓存,连接池 | ||
235 | + | ||
236 | + thrift_connect = ThriftConnect(image_server) | ||
223 | t1 = time.time() | 237 | t1 = time.time() |
224 | - image_extent = image.origin_extent if abs(extent[0]) > 180 else image.geo_origin_extent | 238 | + image_extent = image.extent |
225 | 239 | ||
226 | data = thrift_connect.client.getData(image.path, extent, json.loads(image_extent), bands, width, height) | 240 | data = thrift_connect.client.getData(image.path, extent, json.loads(image_extent), bands, width, height) |
227 | 241 | ||
228 | thrift_connect.close() | 242 | thrift_connect.close() |
229 | - current_app.logger.info("time {}".format(time.time() - t1)) | 243 | + |
244 | + # current_app.logger.info("time {}".format(time.time() - t1)) | ||
230 | data = gzip.decompress(data) | 245 | data = gzip.decompress(data) |
231 | data = numpy.frombuffer(data, dtype='int64') | 246 | data = numpy.frombuffer(data, dtype='int64') |
232 | data = data.reshape((height, width, 3)) | 247 | data = data.reshape((height, width, 3)) |
@@ -250,7 +265,7 @@ class Api(ApiTemplate): | @@ -250,7 +265,7 @@ class Api(ApiTemplate): | ||
250 | # 自决定金字塔等级 | 265 | # 自决定金字塔等级 |
251 | xysize = [img.RasterXSize, img.RasterYSize] | 266 | xysize = [img.RasterXSize, img.RasterYSize] |
252 | 267 | ||
253 | - origin_extent = image.origin_extent if abs(extent[0]) > 180 else image.geo_origin_extent | 268 | + origin_extent = image.extent |
254 | band_data: Band = img.GetRasterBand(band) | 269 | band_data: Band = img.GetRasterBand(band) |
255 | 270 | ||
256 | max_level = band_data.GetOverviewCount() | 271 | max_level = band_data.GetOverviewCount() |
@@ -337,8 +352,8 @@ class Api(ApiTemplate): | @@ -337,8 +352,8 @@ class Api(ApiTemplate): | ||
337 | return pixel_array | 352 | return pixel_array |
338 | 353 | ||
339 | def determin_intersect(self, extent1, extent2): | 354 | def determin_intersect(self, extent1, extent2): |
340 | - g1 = GeometryAdapter.envelop_2_polygon(extent1) | ||
341 | - g2 = GeometryAdapter.envelop_2_polygon(extent2) | 355 | + g1 = GeometryAdapter.bbox_2_polygon(extent1) |
356 | + g2 = GeometryAdapter.bbox_2_polygon(extent2) | ||
342 | return g1.Intersect(g2) | 357 | return g1.Intersect(g2) |
343 | 358 | ||
344 | api_doc = { | 359 | api_doc = { |
@@ -20,7 +20,7 @@ from app.modules.service.image.util.ThriftConnect import ThriftConnect | @@ -20,7 +20,7 @@ from app.modules.service.image.util.ThriftConnect import ThriftConnect | ||
20 | from app.util.component.ParameterUtil import ParameterUtil | 20 | from app.util.component.ParameterUtil import ParameterUtil |
21 | import json | 21 | import json |
22 | from kazoo.client import KazooClient | 22 | from kazoo.client import KazooClient |
23 | -from app import GLOBAL_DIC | 23 | + |
24 | from threading import Thread | 24 | from threading import Thread |
25 | from flask import current_app | 25 | from flask import current_app |
26 | import gzip | 26 | import gzip |
@@ -30,6 +30,7 @@ class Api(ApiTemplate): | @@ -30,6 +30,7 @@ class Api(ApiTemplate): | ||
30 | api_name = "WMS" | 30 | api_name = "WMS" |
31 | 31 | ||
32 | def process(self): | 32 | def process(self): |
33 | + from app import GLOBAL_DIC | ||
33 | 34 | ||
34 | result = {} | 35 | result = {} |
35 | parameter: dict = self.para | 36 | parameter: dict = self.para |
@@ -45,16 +46,22 @@ class Api(ApiTemplate): | @@ -45,16 +46,22 @@ class Api(ApiTemplate): | ||
45 | quality = int(parameter.get("quality")) if parameter.get("quality") else 30 | 46 | quality = int(parameter.get("quality")) if parameter.get("quality") else 30 |
46 | 47 | ||
47 | 48 | ||
48 | - | ||
49 | - | ||
50 | #缓存起来 | 49 | #缓存起来 |
51 | - image_service = ImageService.query.filter_by(guid = guid).one_or_none() | ||
52 | - images = image_service.images.all() | 50 | + #缓存服务信息 |
51 | + image_service_info = GLOBAL_DIC.get(guid) | ||
52 | + if image_service_info is None: | ||
53 | + image_service:ImageService = ImageService.query.filter_by(guid=guid).one_or_none() | ||
54 | + images = image_service.images.all() | ||
55 | + GLOBAL_DIC[guid] = {"service":image_service,"images":images} | ||
56 | + image_service_info = GLOBAL_DIC[guid] | ||
57 | + else: | ||
58 | + image_service_info = GLOBAL_DIC[guid] | ||
59 | + | ||
53 | 60 | ||
54 | re = parameter.get("request") | 61 | re = parameter.get("request") |
55 | 62 | ||
56 | if re and re.__eq__("GetCapabilities"): | 63 | if re and re.__eq__("GetCapabilities"): |
57 | - return self.get_capabilities(image_service) | 64 | + return self.get_capabilities(image_service_info["service"]) |
58 | 65 | ||
59 | zoo = GLOBAL_DIC.get("zookeeper") | 66 | zoo = GLOBAL_DIC.get("zookeeper") |
60 | if zoo is None: | 67 | if zoo is None: |
@@ -66,11 +73,10 @@ class Api(ApiTemplate): | @@ -66,11 +73,10 @@ class Api(ApiTemplate): | ||
66 | zoo.start() | 73 | zoo.start() |
67 | 74 | ||
68 | bands = [1, 2, 3] | 75 | bands = [1, 2, 3] |
69 | - extent = [float(x) for x in bbox.split(",")] | ||
70 | - # extent = [extent[1],extent[0],extent[3],extent[2]] | ||
71 | 76 | ||
77 | + extent = [float(x) for x in bbox.split(",")] | ||
72 | 78 | ||
73 | - intersect_image = [im for im in images if self.determin_intersect(json.loads(im.origin_extent),extent)] | 79 | + intersect_image = [im for im in image_service_info["images"] if self.determin_intersect(json.loads(im.extent),extent)] |
74 | 80 | ||
75 | if len(intersect_image)>1: | 81 | if len(intersect_image)>1: |
76 | 82 | ||
@@ -131,6 +137,9 @@ class Api(ApiTemplate): | @@ -131,6 +137,9 @@ class Api(ApiTemplate): | ||
131 | 137 | ||
132 | # 将图片生成在内存中,然后直接返回response | 138 | # 将图片生成在内存中,然后直接返回response |
133 | im_data = self.create_by_opencv(image_type, pixel_array, quality) | 139 | im_data = self.create_by_opencv(image_type, pixel_array, quality) |
140 | + | ||
141 | + if self.para.get("overview"): | ||
142 | + return pixel_array | ||
134 | return Response(im_data, mimetype=image_type.lower()) | 143 | return Response(im_data, mimetype=image_type.lower()) |
135 | 144 | ||
136 | except Exception as e: | 145 | except Exception as e: |
@@ -180,7 +189,7 @@ class Api(ApiTemplate): | @@ -180,7 +189,7 @@ class Api(ApiTemplate): | ||
180 | else: | 189 | else: |
181 | ser = image_server | 190 | ser = image_server |
182 | if zoo.exists("/rpc/{}".format(ser)): | 191 | if zoo.exists("/rpc/{}".format(ser)): |
183 | - data = self.get_remote_wms_data(image, extent, bands, height, width) | 192 | + data = self.get_remote_wms_data(image_server,image, extent, bands, height, width) |
184 | else: | 193 | else: |
185 | data = numpy.zeros((height, width, 3), dtype=int) + 65536 | 194 | data = numpy.zeros((height, width, 3), dtype=int) + 65536 |
186 | 195 | ||
@@ -188,7 +197,7 @@ class Api(ApiTemplate): | @@ -188,7 +197,7 @@ class Api(ApiTemplate): | ||
188 | 197 | ||
189 | 198 | ||
190 | 199 | ||
191 | - def get_remote_wms_data(self,image,extent,bands,height,width): | 200 | + def get_remote_wms_data(self,image_server,image,extent,bands,height,width): |
192 | ''' | 201 | ''' |
193 | 通过RPC获取远程数据 | 202 | 通过RPC获取远程数据 |
194 | :param image: | 203 | :param image: |
@@ -196,14 +205,14 @@ class Api(ApiTemplate): | @@ -196,14 +205,14 @@ class Api(ApiTemplate): | ||
196 | :param bands: | 205 | :param bands: |
197 | :return: | 206 | :return: |
198 | ''' | 207 | ''' |
199 | - thrift_connect = ThriftConnect(image.server) | 208 | + thrift_connect = ThriftConnect(image_server) |
200 | t1 = time.time() | 209 | t1 = time.time() |
201 | - image_extent = image.origin_extent | 210 | + image_extent = image.extent |
202 | 211 | ||
203 | data = thrift_connect.client.getData(image.path, extent, json.loads(image_extent), bands,width,height) | 212 | data = thrift_connect.client.getData(image.path, extent, json.loads(image_extent), bands,width,height) |
204 | 213 | ||
205 | thrift_connect.close() | 214 | thrift_connect.close() |
206 | - current_app.logger.info("time {}".format(time.time() - t1)) | 215 | + # current_app.logger.info("time {}".format(time.time() - t1)) |
207 | data = gzip.decompress(data) | 216 | data = gzip.decompress(data) |
208 | data = numpy.frombuffer(data, dtype='int64') | 217 | data = numpy.frombuffer(data, dtype='int64') |
209 | data = data.reshape((height,width, 3)) | 218 | data = data.reshape((height,width, 3)) |
@@ -227,9 +236,11 @@ class Api(ApiTemplate): | @@ -227,9 +236,11 @@ class Api(ApiTemplate): | ||
227 | # 自决定金字塔等级 | 236 | # 自决定金字塔等级 |
228 | xysize = [img.RasterXSize, img.RasterYSize] | 237 | xysize = [img.RasterXSize, img.RasterYSize] |
229 | 238 | ||
230 | - origin_extent = image.origin_extent if abs(extent[0]) > 180 else image.geo_origin_extent | 239 | + origin_extent = image.extent |
231 | band_data: Band = img.GetRasterBand(band) | 240 | band_data: Band = img.GetRasterBand(band) |
232 | 241 | ||
242 | + | ||
243 | + | ||
233 | max_level = band_data.GetOverviewCount() | 244 | max_level = band_data.GetOverviewCount() |
234 | 245 | ||
235 | # 超出空间范围 | 246 | # 超出空间范围 |
@@ -314,8 +325,8 @@ class Api(ApiTemplate): | @@ -314,8 +325,8 @@ class Api(ApiTemplate): | ||
314 | return pixel_array | 325 | return pixel_array |
315 | 326 | ||
316 | def determin_intersect(self,extent1,extent2): | 327 | def determin_intersect(self,extent1,extent2): |
317 | - g1 = GeometryAdapter.envelop_2_polygon(extent1) | ||
318 | - g2 = GeometryAdapter.envelop_2_polygon(extent2) | 328 | + g1 = GeometryAdapter.bbox_2_polygon(extent1) |
329 | + g2 = GeometryAdapter.bbox_2_polygon(extent2) | ||
319 | return g1.Intersect(g2) | 330 | return g1.Intersect(g2) |
320 | 331 | ||
321 | def get_capabilities(self,image_service:ImageService): | 332 | def get_capabilities(self,image_service:ImageService): |
@@ -417,7 +428,7 @@ class Api(ApiTemplate): | @@ -417,7 +428,7 @@ class Api(ApiTemplate): | ||
417 | extent = json.loads(image_service.extent) | 428 | extent = json.loads(image_service.extent) |
418 | xml = xml.format(service_title=image_service.name, | 429 | xml = xml.format(service_title=image_service.name, |
419 | service_name=image_service.name, | 430 | service_name=image_service.name, |
420 | - abstract=image_service.description if image_service.description else "None" , | 431 | + abstract= "None" , |
421 | crs="ESPG:4326", | 432 | crs="ESPG:4326", |
422 | layer_name=image_service.name, | 433 | layer_name=image_service.name, |
423 | layer_title=image_service.name, | 434 | layer_title=image_service.name, |
@@ -54,15 +54,17 @@ class ImageService(db.Model): | @@ -54,15 +54,17 @@ class ImageService(db.Model): | ||
54 | ''' | 54 | ''' |
55 | __tablename__ = 'dmap_image_service' | 55 | __tablename__ = 'dmap_image_service' |
56 | guid = Column(String(256), primary_key=True) | 56 | guid = Column(String(256), primary_key=True) |
57 | - | ||
58 | - scheme_guid = Column(Text) | 57 | + name = Column(String) |
58 | + scheme_guid = Column(String) | ||
59 | extent = Column(String(256)) | 59 | extent = Column(String(256)) |
60 | # node = Column(Integer) | 60 | # node = Column(Integer) |
61 | #可视范围geojson | 61 | #可视范围geojson |
62 | visual_region = Column(Text) | 62 | visual_region = Column(Text) |
63 | crs = Column(String(256)) | 63 | crs = Column(String(256)) |
64 | + create_time = Column(DateTime) | ||
65 | + # service_guid = Column(String, ForeignKey('dmap_service.guid')) | ||
64 | 66 | ||
65 | - service_guid = Column(String, ForeignKey('dmap_service.guid')) | 67 | + service_guid = Column(String) |
66 | 68 | ||
67 | images = db.relationship('Image', | 69 | images = db.relationship('Image', |
68 | secondary=dmap_image_rel, | 70 | secondary=dmap_image_rel, |
app/modules/service/image/testrpc.py
0 → 100644
1 | +# coding=utf-8 | ||
2 | +#author: 4N | ||
3 | +#createtime: 2021/9/26 | ||
4 | +#email: nheweijun@sina.com | ||
5 | + | ||
6 | +from app.modules.service.image.tutorial.ttypes import RasterData | ||
7 | + | ||
8 | +from thrift.transport import TSocket | ||
9 | +from thrift.transport import TTransport | ||
10 | +from thrift.protocol import TBinaryProtocol | ||
11 | +from app.modules.service.image.ImageDataService import ImageDataService | ||
12 | +from app.modules.service.image.tutorial import Calculator | ||
13 | + | ||
14 | +from struct import Struct | ||
15 | + | ||
16 | +host = "192.168.184.246" | ||
17 | +port = 9090 | ||
18 | +transport: TSocket = TSocket.TSocket(host, port) | ||
19 | +transport = TTransport.TBufferedTransport(transport) | ||
20 | +protocol = TBinaryProtocol.TBinaryProtocol(transport) | ||
21 | + | ||
22 | +client = Calculator.Client(protocol) | ||
23 | + | ||
24 | + | ||
25 | +transport.open() | ||
26 | + | ||
27 | +test = client.getData("江南_01.tif",[1340.27, -1911.31, 4351.79, 5410.6],[1340.27, -1911.31, 4351.79, 5410.6],[3,2,1],768,768) | ||
28 | +print(type(test)) | ||
29 | + | ||
30 | + | ||
31 | + |
1 | +#!/usr/bin/env python | ||
2 | +# | ||
3 | +# Autogenerated by Thrift Compiler (0.14.2) | ||
4 | +# | ||
5 | +# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING | ||
6 | +# | ||
7 | +# options string: py | ||
8 | +# | ||
9 | + | ||
10 | +import sys | ||
11 | +import pprint | ||
12 | +if sys.version_info[0] > 2: | ||
13 | + from urllib.parse import urlparse | ||
14 | +else: | ||
15 | + from urlparse import urlparse | ||
16 | +from thrift.transport import TTransport, TSocket, TSSLSocket, THttpClient | ||
17 | +from thrift.protocol.TBinaryProtocol import TBinaryProtocol | ||
18 | + | ||
19 | +from . import Calculator | ||
20 | +from .ttypes import * | ||
21 | + | ||
22 | +if len(sys.argv) <= 1 or sys.argv[1] == '--help': | ||
23 | + print('') | ||
24 | + print('Usage: ' + sys.argv[0] + ' [-h host[:port]] [-u url] [-f[ramed]] [-s[sl]] [-novalidate] [-ca_certs certs] [-keyfile keyfile] [-certfile certfile] function [arg1 [arg2...]]') | ||
25 | + print('') | ||
26 | + print('Functions:') | ||
27 | + print(' RasterData getData(string path, queryRange, originRange, bands, i32 width, i32 height)') | ||
28 | + print(' Raster getInfo(string path)') | ||
29 | + print(' bool buildOverview(string path)') | ||
30 | + print(' getImageList(string path)') | ||
31 | + print('') | ||
32 | + sys.exit(0) | ||
33 | + | ||
34 | +pp = pprint.PrettyPrinter(indent=2) | ||
35 | +host = 'localhost' | ||
36 | +port = 9090 | ||
37 | +uri = '' | ||
38 | +framed = False | ||
39 | +ssl = False | ||
40 | +validate = True | ||
41 | +ca_certs = None | ||
42 | +keyfile = None | ||
43 | +certfile = None | ||
44 | +http = False | ||
45 | +argi = 1 | ||
46 | + | ||
47 | +if sys.argv[argi] == '-h': | ||
48 | + parts = sys.argv[argi + 1].split(':') | ||
49 | + host = parts[0] | ||
50 | + if len(parts) > 1: | ||
51 | + port = int(parts[1]) | ||
52 | + argi += 2 | ||
53 | + | ||
54 | +if sys.argv[argi] == '-u': | ||
55 | + url = urlparse(sys.argv[argi + 1]) | ||
56 | + parts = url[1].split(':') | ||
57 | + host = parts[0] | ||
58 | + if len(parts) > 1: | ||
59 | + port = int(parts[1]) | ||
60 | + else: | ||
61 | + port = 80 | ||
62 | + uri = url[2] | ||
63 | + if url[4]: | ||
64 | + uri += '?%s' % url[4] | ||
65 | + http = True | ||
66 | + argi += 2 | ||
67 | + | ||
68 | +if sys.argv[argi] == '-f' or sys.argv[argi] == '-framed': | ||
69 | + framed = True | ||
70 | + argi += 1 | ||
71 | + | ||
72 | +if sys.argv[argi] == '-s' or sys.argv[argi] == '-ssl': | ||
73 | + ssl = True | ||
74 | + argi += 1 | ||
75 | + | ||
76 | +if sys.argv[argi] == '-novalidate': | ||
77 | + validate = False | ||
78 | + argi += 1 | ||
79 | + | ||
80 | +if sys.argv[argi] == '-ca_certs': | ||
81 | + ca_certs = sys.argv[argi+1] | ||
82 | + argi += 2 | ||
83 | + | ||
84 | +if sys.argv[argi] == '-keyfile': | ||
85 | + keyfile = sys.argv[argi+1] | ||
86 | + argi += 2 | ||
87 | + | ||
88 | +if sys.argv[argi] == '-certfile': | ||
89 | + certfile = sys.argv[argi+1] | ||
90 | + argi += 2 | ||
91 | + | ||
92 | +cmd = sys.argv[argi] | ||
93 | +args = sys.argv[argi + 1:] | ||
94 | + | ||
95 | +if http: | ||
96 | + transport = THttpClient.THttpClient(host, port, uri) | ||
97 | +else: | ||
98 | + if ssl: | ||
99 | + socket = TSSLSocket.TSSLSocket(host, port, validate=validate, ca_certs=ca_certs, keyfile=keyfile, certfile=certfile) | ||
100 | + else: | ||
101 | + socket = TSocket.TSocket(host, port) | ||
102 | + if framed: | ||
103 | + transport = TTransport.TFramedTransport(socket) | ||
104 | + else: | ||
105 | + transport = TTransport.TBufferedTransport(socket) | ||
106 | +protocol = TBinaryProtocol(transport) | ||
107 | +client = Calculator.Client(protocol) | ||
108 | +transport.open() | ||
109 | + | ||
110 | +if cmd == 'getData': | ||
111 | + if len(args) != 6: | ||
112 | + print('getData requires 6 args') | ||
113 | + sys.exit(1) | ||
114 | + pp.pprint(client.getData(args[0], eval(args[1]), eval(args[2]), eval(args[3]), eval(args[4]), eval(args[5]),)) | ||
115 | + | ||
116 | +elif cmd == 'getInfo': | ||
117 | + if len(args) != 1: | ||
118 | + print('getInfo requires 1 args') | ||
119 | + sys.exit(1) | ||
120 | + pp.pprint(client.getInfo(args[0],)) | ||
121 | + | ||
122 | +elif cmd == 'buildOverview': | ||
123 | + if len(args) != 1: | ||
124 | + print('buildOverview requires 1 args') | ||
125 | + sys.exit(1) | ||
126 | + pp.pprint(client.buildOverview(args[0],)) | ||
127 | + | ||
128 | +elif cmd == 'getImageList': | ||
129 | + if len(args) != 1: | ||
130 | + print('getImageList requires 1 args') | ||
131 | + sys.exit(1) | ||
132 | + pp.pprint(client.getImageList(args[0],)) | ||
133 | + | ||
134 | +else: | ||
135 | + print('Unrecognized method %s' % cmd) | ||
136 | + sys.exit(1) | ||
137 | + | ||
138 | +transport.close() |
1 | +# | ||
2 | +# Autogenerated by Thrift Compiler (0.14.2) | ||
3 | +# | ||
4 | +# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING | ||
5 | +# | ||
6 | +# options string: py | ||
7 | +# | ||
8 | + | ||
9 | +from thrift.Thrift import TType, TMessageType, TFrozenDict, TException, TApplicationException | ||
10 | +from thrift.protocol.TProtocol import TProtocolException | ||
11 | +from thrift.TRecursive import fix_spec | ||
12 | + | ||
13 | +import sys | ||
14 | +import logging | ||
15 | +from .ttypes import * | ||
16 | +from thrift.Thrift import TProcessor | ||
17 | +from thrift.transport import TTransport | ||
18 | +all_structs = [] | ||
19 | + | ||
20 | + | ||
21 | +class Iface(object): | ||
22 | + """ | ||
23 | + Ahh, now onto the cool part, defining a service. Services just need a name | ||
24 | + and can optionally inherit from another service using the extends keyword. | ||
25 | + | ||
26 | + """ | ||
27 | + def getData(self, path, queryRange, originRange, bands, width, height): | ||
28 | + """ | ||
29 | + Parameters: | ||
30 | + - path | ||
31 | + - queryRange | ||
32 | + - originRange | ||
33 | + - bands | ||
34 | + - width | ||
35 | + - height | ||
36 | + | ||
37 | + """ | ||
38 | + pass | ||
39 | + | ||
40 | + def getInfo(self, path): | ||
41 | + """ | ||
42 | + Parameters: | ||
43 | + - path | ||
44 | + | ||
45 | + """ | ||
46 | + pass | ||
47 | + | ||
48 | + def buildOverview(self, path): | ||
49 | + """ | ||
50 | + Parameters: | ||
51 | + - path | ||
52 | + | ||
53 | + """ | ||
54 | + pass | ||
55 | + | ||
56 | + def getImageList(self, path): | ||
57 | + """ | ||
58 | + Parameters: | ||
59 | + - path | ||
60 | + | ||
61 | + """ | ||
62 | + pass | ||
63 | + | ||
64 | + | ||
65 | +class Client(Iface): | ||
66 | + """ | ||
67 | + Ahh, now onto the cool part, defining a service. Services just need a name | ||
68 | + and can optionally inherit from another service using the extends keyword. | ||
69 | + | ||
70 | + """ | ||
71 | + def __init__(self, iprot, oprot=None): | ||
72 | + self._iprot = self._oprot = iprot | ||
73 | + if oprot is not None: | ||
74 | + self._oprot = oprot | ||
75 | + self._seqid = 0 | ||
76 | + | ||
77 | + def getData(self, path, queryRange, originRange, bands, width, height): | ||
78 | + """ | ||
79 | + Parameters: | ||
80 | + - path | ||
81 | + - queryRange | ||
82 | + - originRange | ||
83 | + - bands | ||
84 | + - width | ||
85 | + - height | ||
86 | + | ||
87 | + """ | ||
88 | + self.send_getData(path, queryRange, originRange, bands, width, height) | ||
89 | + return self.recv_getData() | ||
90 | + | ||
91 | + def send_getData(self, path, queryRange, originRange, bands, width, height): | ||
92 | + self._oprot.writeMessageBegin('getData', TMessageType.CALL, self._seqid) | ||
93 | + args = getData_args() | ||
94 | + args.path = path | ||
95 | + args.queryRange = queryRange | ||
96 | + args.originRange = originRange | ||
97 | + args.bands = bands | ||
98 | + args.width = width | ||
99 | + args.height = height | ||
100 | + args.write(self._oprot) | ||
101 | + self._oprot.writeMessageEnd() | ||
102 | + self._oprot.trans.flush() | ||
103 | + | ||
104 | + def recv_getData(self): | ||
105 | + iprot = self._iprot | ||
106 | + (fname, mtype, rseqid) = iprot.readMessageBegin() | ||
107 | + if mtype == TMessageType.EXCEPTION: | ||
108 | + x = TApplicationException() | ||
109 | + x.read(iprot) | ||
110 | + iprot.readMessageEnd() | ||
111 | + raise x | ||
112 | + result = getData_result() | ||
113 | + result.read(iprot) | ||
114 | + iprot.readMessageEnd() | ||
115 | + if result.success is not None: | ||
116 | + return result.success | ||
117 | + raise TApplicationException(TApplicationException.MISSING_RESULT, "getData failed: unknown result") | ||
118 | + | ||
119 | + def getInfo(self, path): | ||
120 | + """ | ||
121 | + Parameters: | ||
122 | + - path | ||
123 | + | ||
124 | + """ | ||
125 | + self.send_getInfo(path) | ||
126 | + return self.recv_getInfo() | ||
127 | + | ||
128 | + def send_getInfo(self, path): | ||
129 | + self._oprot.writeMessageBegin('getInfo', TMessageType.CALL, self._seqid) | ||
130 | + args = getInfo_args() | ||
131 | + args.path = path | ||
132 | + args.write(self._oprot) | ||
133 | + self._oprot.writeMessageEnd() | ||
134 | + self._oprot.trans.flush() | ||
135 | + | ||
136 | + def recv_getInfo(self): | ||
137 | + iprot = self._iprot | ||
138 | + (fname, mtype, rseqid) = iprot.readMessageBegin() | ||
139 | + if mtype == TMessageType.EXCEPTION: | ||
140 | + x = TApplicationException() | ||
141 | + x.read(iprot) | ||
142 | + iprot.readMessageEnd() | ||
143 | + raise x | ||
144 | + result = getInfo_result() | ||
145 | + result.read(iprot) | ||
146 | + iprot.readMessageEnd() | ||
147 | + if result.success is not None: | ||
148 | + return result.success | ||
149 | + raise TApplicationException(TApplicationException.MISSING_RESULT, "getInfo failed: unknown result") | ||
150 | + | ||
151 | + def buildOverview(self, path): | ||
152 | + """ | ||
153 | + Parameters: | ||
154 | + - path | ||
155 | + | ||
156 | + """ | ||
157 | + self.send_buildOverview(path) | ||
158 | + return self.recv_buildOverview() | ||
159 | + | ||
160 | + def send_buildOverview(self, path): | ||
161 | + self._oprot.writeMessageBegin('buildOverview', TMessageType.CALL, self._seqid) | ||
162 | + args = buildOverview_args() | ||
163 | + args.path = path | ||
164 | + args.write(self._oprot) | ||
165 | + self._oprot.writeMessageEnd() | ||
166 | + self._oprot.trans.flush() | ||
167 | + | ||
168 | + def recv_buildOverview(self): | ||
169 | + iprot = self._iprot | ||
170 | + (fname, mtype, rseqid) = iprot.readMessageBegin() | ||
171 | + if mtype == TMessageType.EXCEPTION: | ||
172 | + x = TApplicationException() | ||
173 | + x.read(iprot) | ||
174 | + iprot.readMessageEnd() | ||
175 | + raise x | ||
176 | + result = buildOverview_result() | ||
177 | + result.read(iprot) | ||
178 | + iprot.readMessageEnd() | ||
179 | + if result.success is not None: | ||
180 | + return result.success | ||
181 | + raise TApplicationException(TApplicationException.MISSING_RESULT, "buildOverview failed: unknown result") | ||
182 | + | ||
183 | + def getImageList(self, path): | ||
184 | + """ | ||
185 | + Parameters: | ||
186 | + - path | ||
187 | + | ||
188 | + """ | ||
189 | + self.send_getImageList(path) | ||
190 | + return self.recv_getImageList() | ||
191 | + | ||
192 | + def send_getImageList(self, path): | ||
193 | + self._oprot.writeMessageBegin('getImageList', TMessageType.CALL, self._seqid) | ||
194 | + args = getImageList_args() | ||
195 | + args.path = path | ||
196 | + args.write(self._oprot) | ||
197 | + self._oprot.writeMessageEnd() | ||
198 | + self._oprot.trans.flush() | ||
199 | + | ||
200 | + def recv_getImageList(self): | ||
201 | + iprot = self._iprot | ||
202 | + (fname, mtype, rseqid) = iprot.readMessageBegin() | ||
203 | + if mtype == TMessageType.EXCEPTION: | ||
204 | + x = TApplicationException() | ||
205 | + x.read(iprot) | ||
206 | + iprot.readMessageEnd() | ||
207 | + raise x | ||
208 | + result = getImageList_result() | ||
209 | + result.read(iprot) | ||
210 | + iprot.readMessageEnd() | ||
211 | + if result.success is not None: | ||
212 | + return result.success | ||
213 | + raise TApplicationException(TApplicationException.MISSING_RESULT, "getImageList failed: unknown result") | ||
214 | + | ||
215 | + | ||
216 | +class Processor(Iface, TProcessor): | ||
217 | + def __init__(self, handler): | ||
218 | + self._handler = handler | ||
219 | + self._processMap = {} | ||
220 | + self._processMap["getData"] = Processor.process_getData | ||
221 | + self._processMap["getInfo"] = Processor.process_getInfo | ||
222 | + self._processMap["buildOverview"] = Processor.process_buildOverview | ||
223 | + self._processMap["getImageList"] = Processor.process_getImageList | ||
224 | + self._on_message_begin = None | ||
225 | + | ||
226 | + def on_message_begin(self, func): | ||
227 | + self._on_message_begin = func | ||
228 | + | ||
229 | + def process(self, iprot, oprot): | ||
230 | + (name, type, seqid) = iprot.readMessageBegin() | ||
231 | + if self._on_message_begin: | ||
232 | + self._on_message_begin(name, type, seqid) | ||
233 | + if name not in self._processMap: | ||
234 | + iprot.skip(TType.STRUCT) | ||
235 | + iprot.readMessageEnd() | ||
236 | + x = TApplicationException(TApplicationException.UNKNOWN_METHOD, 'Unknown function %s' % (name)) | ||
237 | + oprot.writeMessageBegin(name, TMessageType.EXCEPTION, seqid) | ||
238 | + x.write(oprot) | ||
239 | + oprot.writeMessageEnd() | ||
240 | + oprot.trans.flush() | ||
241 | + return | ||
242 | + else: | ||
243 | + self._processMap[name](self, seqid, iprot, oprot) | ||
244 | + return True | ||
245 | + | ||
246 | + def process_getData(self, seqid, iprot, oprot): | ||
247 | + args = getData_args() | ||
248 | + args.read(iprot) | ||
249 | + iprot.readMessageEnd() | ||
250 | + result = getData_result() | ||
251 | + try: | ||
252 | + result.success = self._handler.getData(args.path, args.queryRange, args.originRange, args.bands, args.width, args.height) | ||
253 | + msg_type = TMessageType.REPLY | ||
254 | + except TTransport.TTransportException: | ||
255 | + raise | ||
256 | + except TApplicationException as ex: | ||
257 | + logging.exception('TApplication exception in handler') | ||
258 | + msg_type = TMessageType.EXCEPTION | ||
259 | + result = ex | ||
260 | + except Exception: | ||
261 | + logging.exception('Unexpected exception in handler') | ||
262 | + msg_type = TMessageType.EXCEPTION | ||
263 | + result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error') | ||
264 | + oprot.writeMessageBegin("getData", msg_type, seqid) | ||
265 | + result.write(oprot) | ||
266 | + oprot.writeMessageEnd() | ||
267 | + oprot.trans.flush() | ||
268 | + | ||
269 | + def process_getInfo(self, seqid, iprot, oprot): | ||
270 | + args = getInfo_args() | ||
271 | + args.read(iprot) | ||
272 | + iprot.readMessageEnd() | ||
273 | + result = getInfo_result() | ||
274 | + try: | ||
275 | + result.success = self._handler.getInfo(args.path) | ||
276 | + msg_type = TMessageType.REPLY | ||
277 | + except TTransport.TTransportException: | ||
278 | + raise | ||
279 | + except TApplicationException as ex: | ||
280 | + logging.exception('TApplication exception in handler') | ||
281 | + msg_type = TMessageType.EXCEPTION | ||
282 | + result = ex | ||
283 | + except Exception: | ||
284 | + logging.exception('Unexpected exception in handler') | ||
285 | + msg_type = TMessageType.EXCEPTION | ||
286 | + result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error') | ||
287 | + oprot.writeMessageBegin("getInfo", msg_type, seqid) | ||
288 | + result.write(oprot) | ||
289 | + oprot.writeMessageEnd() | ||
290 | + oprot.trans.flush() | ||
291 | + | ||
292 | + def process_buildOverview(self, seqid, iprot, oprot): | ||
293 | + args = buildOverview_args() | ||
294 | + args.read(iprot) | ||
295 | + iprot.readMessageEnd() | ||
296 | + result = buildOverview_result() | ||
297 | + try: | ||
298 | + result.success = self._handler.buildOverview(args.path) | ||
299 | + msg_type = TMessageType.REPLY | ||
300 | + except TTransport.TTransportException: | ||
301 | + raise | ||
302 | + except TApplicationException as ex: | ||
303 | + logging.exception('TApplication exception in handler') | ||
304 | + msg_type = TMessageType.EXCEPTION | ||
305 | + result = ex | ||
306 | + except Exception: | ||
307 | + logging.exception('Unexpected exception in handler') | ||
308 | + msg_type = TMessageType.EXCEPTION | ||
309 | + result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error') | ||
310 | + oprot.writeMessageBegin("buildOverview", msg_type, seqid) | ||
311 | + result.write(oprot) | ||
312 | + oprot.writeMessageEnd() | ||
313 | + oprot.trans.flush() | ||
314 | + | ||
315 | + def process_getImageList(self, seqid, iprot, oprot): | ||
316 | + args = getImageList_args() | ||
317 | + args.read(iprot) | ||
318 | + iprot.readMessageEnd() | ||
319 | + result = getImageList_result() | ||
320 | + try: | ||
321 | + result.success = self._handler.getImageList(args.path) | ||
322 | + msg_type = TMessageType.REPLY | ||
323 | + except TTransport.TTransportException: | ||
324 | + raise | ||
325 | + except TApplicationException as ex: | ||
326 | + logging.exception('TApplication exception in handler') | ||
327 | + msg_type = TMessageType.EXCEPTION | ||
328 | + result = ex | ||
329 | + except Exception: | ||
330 | + logging.exception('Unexpected exception in handler') | ||
331 | + msg_type = TMessageType.EXCEPTION | ||
332 | + result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error') | ||
333 | + oprot.writeMessageBegin("getImageList", msg_type, seqid) | ||
334 | + result.write(oprot) | ||
335 | + oprot.writeMessageEnd() | ||
336 | + oprot.trans.flush() | ||
337 | + | ||
338 | +# HELPER FUNCTIONS AND STRUCTURES | ||
339 | + | ||
340 | + | ||
341 | +class getData_args(object): | ||
342 | + """ | ||
343 | + Attributes: | ||
344 | + - path | ||
345 | + - queryRange | ||
346 | + - originRange | ||
347 | + - bands | ||
348 | + - width | ||
349 | + - height | ||
350 | + | ||
351 | + """ | ||
352 | + | ||
353 | + | ||
354 | + def __init__(self, path=None, queryRange=None, originRange=None, bands=None, width=None, height=None,): | ||
355 | + self.path = path | ||
356 | + self.queryRange = queryRange | ||
357 | + self.originRange = originRange | ||
358 | + self.bands = bands | ||
359 | + self.width = width | ||
360 | + self.height = height | ||
361 | + | ||
362 | + def read(self, iprot): | ||
363 | + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: | ||
364 | + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) | ||
365 | + return | ||
366 | + iprot.readStructBegin() | ||
367 | + while True: | ||
368 | + (fname, ftype, fid) = iprot.readFieldBegin() | ||
369 | + if ftype == TType.STOP: | ||
370 | + break | ||
371 | + if fid == 1: | ||
372 | + if ftype == TType.STRING: | ||
373 | + self.path = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
374 | + else: | ||
375 | + iprot.skip(ftype) | ||
376 | + elif fid == 2: | ||
377 | + if ftype == TType.LIST: | ||
378 | + self.queryRange = [] | ||
379 | + (_etype38, _size35) = iprot.readListBegin() | ||
380 | + for _i39 in range(_size35): | ||
381 | + _elem40 = iprot.readDouble() | ||
382 | + self.queryRange.append(_elem40) | ||
383 | + iprot.readListEnd() | ||
384 | + else: | ||
385 | + iprot.skip(ftype) | ||
386 | + elif fid == 3: | ||
387 | + if ftype == TType.LIST: | ||
388 | + self.originRange = [] | ||
389 | + (_etype44, _size41) = iprot.readListBegin() | ||
390 | + for _i45 in range(_size41): | ||
391 | + _elem46 = iprot.readDouble() | ||
392 | + self.originRange.append(_elem46) | ||
393 | + iprot.readListEnd() | ||
394 | + else: | ||
395 | + iprot.skip(ftype) | ||
396 | + elif fid == 4: | ||
397 | + if ftype == TType.LIST: | ||
398 | + self.bands = [] | ||
399 | + (_etype50, _size47) = iprot.readListBegin() | ||
400 | + for _i51 in range(_size47): | ||
401 | + _elem52 = iprot.readI32() | ||
402 | + self.bands.append(_elem52) | ||
403 | + iprot.readListEnd() | ||
404 | + else: | ||
405 | + iprot.skip(ftype) | ||
406 | + elif fid == 5: | ||
407 | + if ftype == TType.I32: | ||
408 | + self.width = iprot.readI32() | ||
409 | + else: | ||
410 | + iprot.skip(ftype) | ||
411 | + elif fid == 6: | ||
412 | + if ftype == TType.I32: | ||
413 | + self.height = iprot.readI32() | ||
414 | + else: | ||
415 | + iprot.skip(ftype) | ||
416 | + else: | ||
417 | + iprot.skip(ftype) | ||
418 | + iprot.readFieldEnd() | ||
419 | + iprot.readStructEnd() | ||
420 | + | ||
421 | + def write(self, oprot): | ||
422 | + if oprot._fast_encode is not None and self.thrift_spec is not None: | ||
423 | + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) | ||
424 | + return | ||
425 | + oprot.writeStructBegin('getData_args') | ||
426 | + if self.path is not None: | ||
427 | + oprot.writeFieldBegin('path', TType.STRING, 1) | ||
428 | + oprot.writeString(self.path.encode('utf-8') if sys.version_info[0] == 2 else self.path) | ||
429 | + oprot.writeFieldEnd() | ||
430 | + if self.queryRange is not None: | ||
431 | + oprot.writeFieldBegin('queryRange', TType.LIST, 2) | ||
432 | + oprot.writeListBegin(TType.DOUBLE, len(self.queryRange)) | ||
433 | + for iter53 in self.queryRange: | ||
434 | + oprot.writeDouble(iter53) | ||
435 | + oprot.writeListEnd() | ||
436 | + oprot.writeFieldEnd() | ||
437 | + if self.originRange is not None: | ||
438 | + oprot.writeFieldBegin('originRange', TType.LIST, 3) | ||
439 | + oprot.writeListBegin(TType.DOUBLE, len(self.originRange)) | ||
440 | + for iter54 in self.originRange: | ||
441 | + oprot.writeDouble(iter54) | ||
442 | + oprot.writeListEnd() | ||
443 | + oprot.writeFieldEnd() | ||
444 | + if self.bands is not None: | ||
445 | + oprot.writeFieldBegin('bands', TType.LIST, 4) | ||
446 | + oprot.writeListBegin(TType.I32, len(self.bands)) | ||
447 | + for iter55 in self.bands: | ||
448 | + oprot.writeI32(iter55) | ||
449 | + oprot.writeListEnd() | ||
450 | + oprot.writeFieldEnd() | ||
451 | + if self.width is not None: | ||
452 | + oprot.writeFieldBegin('width', TType.I32, 5) | ||
453 | + oprot.writeI32(self.width) | ||
454 | + oprot.writeFieldEnd() | ||
455 | + if self.height is not None: | ||
456 | + oprot.writeFieldBegin('height', TType.I32, 6) | ||
457 | + oprot.writeI32(self.height) | ||
458 | + oprot.writeFieldEnd() | ||
459 | + oprot.writeFieldStop() | ||
460 | + oprot.writeStructEnd() | ||
461 | + | ||
462 | + def validate(self): | ||
463 | + return | ||
464 | + | ||
465 | + def __repr__(self): | ||
466 | + L = ['%s=%r' % (key, value) | ||
467 | + for key, value in self.__dict__.items()] | ||
468 | + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) | ||
469 | + | ||
470 | + def __eq__(self, other): | ||
471 | + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ | ||
472 | + | ||
473 | + def __ne__(self, other): | ||
474 | + return not (self == other) | ||
475 | +all_structs.append(getData_args) | ||
476 | +getData_args.thrift_spec = ( | ||
477 | + None, # 0 | ||
478 | + (1, TType.STRING, 'path', 'UTF8', None, ), # 1 | ||
479 | + (2, TType.LIST, 'queryRange', (TType.DOUBLE, None, False), None, ), # 2 | ||
480 | + (3, TType.LIST, 'originRange', (TType.DOUBLE, None, False), None, ), # 3 | ||
481 | + (4, TType.LIST, 'bands', (TType.I32, None, False), None, ), # 4 | ||
482 | + (5, TType.I32, 'width', None, None, ), # 5 | ||
483 | + (6, TType.I32, 'height', None, None, ), # 6 | ||
484 | +) | ||
485 | + | ||
486 | + | ||
487 | +class getData_result(object): | ||
488 | + """ | ||
489 | + Attributes: | ||
490 | + - success | ||
491 | + | ||
492 | + """ | ||
493 | + | ||
494 | + | ||
495 | + def __init__(self, success=None,): | ||
496 | + self.success = success | ||
497 | + | ||
498 | + def read(self, iprot): | ||
499 | + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: | ||
500 | + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) | ||
501 | + return | ||
502 | + iprot.readStructBegin() | ||
503 | + while True: | ||
504 | + (fname, ftype, fid) = iprot.readFieldBegin() | ||
505 | + if ftype == TType.STOP: | ||
506 | + break | ||
507 | + if fid == 0: | ||
508 | + if ftype == TType.STRUCT: | ||
509 | + self.success = RasterData() | ||
510 | + self.success.read(iprot) | ||
511 | + else: | ||
512 | + iprot.skip(ftype) | ||
513 | + else: | ||
514 | + iprot.skip(ftype) | ||
515 | + iprot.readFieldEnd() | ||
516 | + iprot.readStructEnd() | ||
517 | + | ||
518 | + def write(self, oprot): | ||
519 | + if oprot._fast_encode is not None and self.thrift_spec is not None: | ||
520 | + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) | ||
521 | + return | ||
522 | + oprot.writeStructBegin('getData_result') | ||
523 | + if self.success is not None: | ||
524 | + oprot.writeFieldBegin('success', TType.STRUCT, 0) | ||
525 | + self.success.write(oprot) | ||
526 | + oprot.writeFieldEnd() | ||
527 | + oprot.writeFieldStop() | ||
528 | + oprot.writeStructEnd() | ||
529 | + | ||
530 | + def validate(self): | ||
531 | + return | ||
532 | + | ||
533 | + def __repr__(self): | ||
534 | + L = ['%s=%r' % (key, value) | ||
535 | + for key, value in self.__dict__.items()] | ||
536 | + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) | ||
537 | + | ||
538 | + def __eq__(self, other): | ||
539 | + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ | ||
540 | + | ||
541 | + def __ne__(self, other): | ||
542 | + return not (self == other) | ||
543 | +all_structs.append(getData_result) | ||
544 | +getData_result.thrift_spec = ( | ||
545 | + (0, TType.STRUCT, 'success', [RasterData, None], None, ), # 0 | ||
546 | +) | ||
547 | + | ||
548 | + | ||
549 | +class getInfo_args(object): | ||
550 | + """ | ||
551 | + Attributes: | ||
552 | + - path | ||
553 | + | ||
554 | + """ | ||
555 | + | ||
556 | + | ||
557 | + def __init__(self, path=None,): | ||
558 | + self.path = path | ||
559 | + | ||
560 | + def read(self, iprot): | ||
561 | + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: | ||
562 | + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) | ||
563 | + return | ||
564 | + iprot.readStructBegin() | ||
565 | + while True: | ||
566 | + (fname, ftype, fid) = iprot.readFieldBegin() | ||
567 | + if ftype == TType.STOP: | ||
568 | + break | ||
569 | + if fid == 1: | ||
570 | + if ftype == TType.STRING: | ||
571 | + self.path = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
572 | + else: | ||
573 | + iprot.skip(ftype) | ||
574 | + else: | ||
575 | + iprot.skip(ftype) | ||
576 | + iprot.readFieldEnd() | ||
577 | + iprot.readStructEnd() | ||
578 | + | ||
579 | + def write(self, oprot): | ||
580 | + if oprot._fast_encode is not None and self.thrift_spec is not None: | ||
581 | + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) | ||
582 | + return | ||
583 | + oprot.writeStructBegin('getInfo_args') | ||
584 | + if self.path is not None: | ||
585 | + oprot.writeFieldBegin('path', TType.STRING, 1) | ||
586 | + oprot.writeString(self.path.encode('utf-8') if sys.version_info[0] == 2 else self.path) | ||
587 | + oprot.writeFieldEnd() | ||
588 | + oprot.writeFieldStop() | ||
589 | + oprot.writeStructEnd() | ||
590 | + | ||
591 | + def validate(self): | ||
592 | + return | ||
593 | + | ||
594 | + def __repr__(self): | ||
595 | + L = ['%s=%r' % (key, value) | ||
596 | + for key, value in self.__dict__.items()] | ||
597 | + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) | ||
598 | + | ||
599 | + def __eq__(self, other): | ||
600 | + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ | ||
601 | + | ||
602 | + def __ne__(self, other): | ||
603 | + return not (self == other) | ||
604 | +all_structs.append(getInfo_args) | ||
605 | +getInfo_args.thrift_spec = ( | ||
606 | + None, # 0 | ||
607 | + (1, TType.STRING, 'path', 'UTF8', None, ), # 1 | ||
608 | +) | ||
609 | + | ||
610 | + | ||
611 | +class getInfo_result(object): | ||
612 | + """ | ||
613 | + Attributes: | ||
614 | + - success | ||
615 | + | ||
616 | + """ | ||
617 | + | ||
618 | + | ||
619 | + def __init__(self, success=None,): | ||
620 | + self.success = success | ||
621 | + | ||
622 | + def read(self, iprot): | ||
623 | + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: | ||
624 | + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) | ||
625 | + return | ||
626 | + iprot.readStructBegin() | ||
627 | + while True: | ||
628 | + (fname, ftype, fid) = iprot.readFieldBegin() | ||
629 | + if ftype == TType.STOP: | ||
630 | + break | ||
631 | + if fid == 0: | ||
632 | + if ftype == TType.STRUCT: | ||
633 | + self.success = Raster() | ||
634 | + self.success.read(iprot) | ||
635 | + else: | ||
636 | + iprot.skip(ftype) | ||
637 | + else: | ||
638 | + iprot.skip(ftype) | ||
639 | + iprot.readFieldEnd() | ||
640 | + iprot.readStructEnd() | ||
641 | + | ||
642 | + def write(self, oprot): | ||
643 | + if oprot._fast_encode is not None and self.thrift_spec is not None: | ||
644 | + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) | ||
645 | + return | ||
646 | + oprot.writeStructBegin('getInfo_result') | ||
647 | + if self.success is not None: | ||
648 | + oprot.writeFieldBegin('success', TType.STRUCT, 0) | ||
649 | + self.success.write(oprot) | ||
650 | + oprot.writeFieldEnd() | ||
651 | + oprot.writeFieldStop() | ||
652 | + oprot.writeStructEnd() | ||
653 | + | ||
654 | + def validate(self): | ||
655 | + return | ||
656 | + | ||
657 | + def __repr__(self): | ||
658 | + L = ['%s=%r' % (key, value) | ||
659 | + for key, value in self.__dict__.items()] | ||
660 | + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) | ||
661 | + | ||
662 | + def __eq__(self, other): | ||
663 | + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ | ||
664 | + | ||
665 | + def __ne__(self, other): | ||
666 | + return not (self == other) | ||
667 | +all_structs.append(getInfo_result) | ||
668 | +getInfo_result.thrift_spec = ( | ||
669 | + (0, TType.STRUCT, 'success', [Raster, None], None, ), # 0 | ||
670 | +) | ||
671 | + | ||
672 | + | ||
673 | +class buildOverview_args(object): | ||
674 | + """ | ||
675 | + Attributes: | ||
676 | + - path | ||
677 | + | ||
678 | + """ | ||
679 | + | ||
680 | + | ||
681 | + def __init__(self, path=None,): | ||
682 | + self.path = path | ||
683 | + | ||
684 | + def read(self, iprot): | ||
685 | + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: | ||
686 | + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) | ||
687 | + return | ||
688 | + iprot.readStructBegin() | ||
689 | + while True: | ||
690 | + (fname, ftype, fid) = iprot.readFieldBegin() | ||
691 | + if ftype == TType.STOP: | ||
692 | + break | ||
693 | + if fid == 1: | ||
694 | + if ftype == TType.STRING: | ||
695 | + self.path = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
696 | + else: | ||
697 | + iprot.skip(ftype) | ||
698 | + else: | ||
699 | + iprot.skip(ftype) | ||
700 | + iprot.readFieldEnd() | ||
701 | + iprot.readStructEnd() | ||
702 | + | ||
703 | + def write(self, oprot): | ||
704 | + if oprot._fast_encode is not None and self.thrift_spec is not None: | ||
705 | + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) | ||
706 | + return | ||
707 | + oprot.writeStructBegin('buildOverview_args') | ||
708 | + if self.path is not None: | ||
709 | + oprot.writeFieldBegin('path', TType.STRING, 1) | ||
710 | + oprot.writeString(self.path.encode('utf-8') if sys.version_info[0] == 2 else self.path) | ||
711 | + oprot.writeFieldEnd() | ||
712 | + oprot.writeFieldStop() | ||
713 | + oprot.writeStructEnd() | ||
714 | + | ||
715 | + def validate(self): | ||
716 | + return | ||
717 | + | ||
718 | + def __repr__(self): | ||
719 | + L = ['%s=%r' % (key, value) | ||
720 | + for key, value in self.__dict__.items()] | ||
721 | + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) | ||
722 | + | ||
723 | + def __eq__(self, other): | ||
724 | + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ | ||
725 | + | ||
726 | + def __ne__(self, other): | ||
727 | + return not (self == other) | ||
728 | +all_structs.append(buildOverview_args) | ||
729 | +buildOverview_args.thrift_spec = ( | ||
730 | + None, # 0 | ||
731 | + (1, TType.STRING, 'path', 'UTF8', None, ), # 1 | ||
732 | +) | ||
733 | + | ||
734 | + | ||
735 | +class buildOverview_result(object): | ||
736 | + """ | ||
737 | + Attributes: | ||
738 | + - success | ||
739 | + | ||
740 | + """ | ||
741 | + | ||
742 | + | ||
743 | + def __init__(self, success=None,): | ||
744 | + self.success = success | ||
745 | + | ||
746 | + def read(self, iprot): | ||
747 | + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: | ||
748 | + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) | ||
749 | + return | ||
750 | + iprot.readStructBegin() | ||
751 | + while True: | ||
752 | + (fname, ftype, fid) = iprot.readFieldBegin() | ||
753 | + if ftype == TType.STOP: | ||
754 | + break | ||
755 | + if fid == 0: | ||
756 | + if ftype == TType.BOOL: | ||
757 | + self.success = iprot.readBool() | ||
758 | + else: | ||
759 | + iprot.skip(ftype) | ||
760 | + else: | ||
761 | + iprot.skip(ftype) | ||
762 | + iprot.readFieldEnd() | ||
763 | + iprot.readStructEnd() | ||
764 | + | ||
765 | + def write(self, oprot): | ||
766 | + if oprot._fast_encode is not None and self.thrift_spec is not None: | ||
767 | + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) | ||
768 | + return | ||
769 | + oprot.writeStructBegin('buildOverview_result') | ||
770 | + if self.success is not None: | ||
771 | + oprot.writeFieldBegin('success', TType.BOOL, 0) | ||
772 | + oprot.writeBool(self.success) | ||
773 | + oprot.writeFieldEnd() | ||
774 | + oprot.writeFieldStop() | ||
775 | + oprot.writeStructEnd() | ||
776 | + | ||
777 | + def validate(self): | ||
778 | + return | ||
779 | + | ||
780 | + def __repr__(self): | ||
781 | + L = ['%s=%r' % (key, value) | ||
782 | + for key, value in self.__dict__.items()] | ||
783 | + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) | ||
784 | + | ||
785 | + def __eq__(self, other): | ||
786 | + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ | ||
787 | + | ||
788 | + def __ne__(self, other): | ||
789 | + return not (self == other) | ||
790 | +all_structs.append(buildOverview_result) | ||
791 | +buildOverview_result.thrift_spec = ( | ||
792 | + (0, TType.BOOL, 'success', None, None, ), # 0 | ||
793 | +) | ||
794 | + | ||
795 | + | ||
796 | +class getImageList_args(object): | ||
797 | + """ | ||
798 | + Attributes: | ||
799 | + - path | ||
800 | + | ||
801 | + """ | ||
802 | + | ||
803 | + | ||
804 | + def __init__(self, path=None,): | ||
805 | + self.path = path | ||
806 | + | ||
807 | + def read(self, iprot): | ||
808 | + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: | ||
809 | + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) | ||
810 | + return | ||
811 | + iprot.readStructBegin() | ||
812 | + while True: | ||
813 | + (fname, ftype, fid) = iprot.readFieldBegin() | ||
814 | + if ftype == TType.STOP: | ||
815 | + break | ||
816 | + if fid == 1: | ||
817 | + if ftype == TType.STRING: | ||
818 | + self.path = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
819 | + else: | ||
820 | + iprot.skip(ftype) | ||
821 | + else: | ||
822 | + iprot.skip(ftype) | ||
823 | + iprot.readFieldEnd() | ||
824 | + iprot.readStructEnd() | ||
825 | + | ||
826 | + def write(self, oprot): | ||
827 | + if oprot._fast_encode is not None and self.thrift_spec is not None: | ||
828 | + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) | ||
829 | + return | ||
830 | + oprot.writeStructBegin('getImageList_args') | ||
831 | + if self.path is not None: | ||
832 | + oprot.writeFieldBegin('path', TType.STRING, 1) | ||
833 | + oprot.writeString(self.path.encode('utf-8') if sys.version_info[0] == 2 else self.path) | ||
834 | + oprot.writeFieldEnd() | ||
835 | + oprot.writeFieldStop() | ||
836 | + oprot.writeStructEnd() | ||
837 | + | ||
838 | + def validate(self): | ||
839 | + return | ||
840 | + | ||
841 | + def __repr__(self): | ||
842 | + L = ['%s=%r' % (key, value) | ||
843 | + for key, value in self.__dict__.items()] | ||
844 | + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) | ||
845 | + | ||
846 | + def __eq__(self, other): | ||
847 | + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ | ||
848 | + | ||
849 | + def __ne__(self, other): | ||
850 | + return not (self == other) | ||
851 | +all_structs.append(getImageList_args) | ||
852 | +getImageList_args.thrift_spec = ( | ||
853 | + None, # 0 | ||
854 | + (1, TType.STRING, 'path', 'UTF8', None, ), # 1 | ||
855 | +) | ||
856 | + | ||
857 | + | ||
858 | +class getImageList_result(object): | ||
859 | + """ | ||
860 | + Attributes: | ||
861 | + - success | ||
862 | + | ||
863 | + """ | ||
864 | + | ||
865 | + | ||
866 | + def __init__(self, success=None,): | ||
867 | + self.success = success | ||
868 | + | ||
869 | + def read(self, iprot): | ||
870 | + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: | ||
871 | + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) | ||
872 | + return | ||
873 | + iprot.readStructBegin() | ||
874 | + while True: | ||
875 | + (fname, ftype, fid) = iprot.readFieldBegin() | ||
876 | + if ftype == TType.STOP: | ||
877 | + break | ||
878 | + if fid == 0: | ||
879 | + if ftype == TType.LIST: | ||
880 | + self.success = [] | ||
881 | + (_etype59, _size56) = iprot.readListBegin() | ||
882 | + for _i60 in range(_size56): | ||
883 | + _elem61 = Image() | ||
884 | + _elem61.read(iprot) | ||
885 | + self.success.append(_elem61) | ||
886 | + iprot.readListEnd() | ||
887 | + else: | ||
888 | + iprot.skip(ftype) | ||
889 | + else: | ||
890 | + iprot.skip(ftype) | ||
891 | + iprot.readFieldEnd() | ||
892 | + iprot.readStructEnd() | ||
893 | + | ||
894 | + def write(self, oprot): | ||
895 | + if oprot._fast_encode is not None and self.thrift_spec is not None: | ||
896 | + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) | ||
897 | + return | ||
898 | + oprot.writeStructBegin('getImageList_result') | ||
899 | + if self.success is not None: | ||
900 | + oprot.writeFieldBegin('success', TType.LIST, 0) | ||
901 | + oprot.writeListBegin(TType.STRUCT, len(self.success)) | ||
902 | + for iter62 in self.success: | ||
903 | + iter62.write(oprot) | ||
904 | + oprot.writeListEnd() | ||
905 | + oprot.writeFieldEnd() | ||
906 | + oprot.writeFieldStop() | ||
907 | + oprot.writeStructEnd() | ||
908 | + | ||
909 | + def validate(self): | ||
910 | + return | ||
911 | + | ||
912 | + def __repr__(self): | ||
913 | + L = ['%s=%r' % (key, value) | ||
914 | + for key, value in self.__dict__.items()] | ||
915 | + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) | ||
916 | + | ||
917 | + def __eq__(self, other): | ||
918 | + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ | ||
919 | + | ||
920 | + def __ne__(self, other): | ||
921 | + return not (self == other) | ||
922 | +all_structs.append(getImageList_result) | ||
923 | +getImageList_result.thrift_spec = ( | ||
924 | + (0, TType.LIST, 'success', (TType.STRUCT, [Image, None], False), None, ), # 0 | ||
925 | +) | ||
926 | +fix_spec(all_structs) | ||
927 | +del all_structs |
1 | +__all__ = ['ttypes', 'constants', 'Calculator'] |
1 | +# | ||
2 | +# Autogenerated by Thrift Compiler (0.14.2) | ||
3 | +# | ||
4 | +# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING | ||
5 | +# | ||
6 | +# options string: py | ||
7 | +# | ||
8 | + | ||
9 | +from thrift.Thrift import TType, TMessageType, TFrozenDict, TException, TApplicationException | ||
10 | +from thrift.protocol.TProtocol import TProtocolException | ||
11 | +from thrift.TRecursive import fix_spec | ||
12 | + | ||
13 | +import sys | ||
14 | +from .ttypes import * |
app/modules/service/image/tutorial/test.py
0 → 100644
1 | +# coding=utf-8 | ||
2 | +#author: 4N | ||
3 | +#createtime: 2021/9/27 | ||
4 | +#email: nheweijun@sina.com | ||
5 | + | ||
6 | + | ||
7 | +# from .ttypes import RasterData | ||
8 | + | ||
9 | +from thrift.transport import TSocket | ||
10 | +from thrift.transport import TTransport | ||
11 | +from thrift.protocol import TBinaryProtocol | ||
12 | +from app.modules.service.image.ImageDataService import ImageDataService | ||
13 | +from . import Calculator | ||
14 | + | ||
15 | +from struct import Struct | ||
16 | + | ||
17 | +host = 1 | ||
18 | +port = 9090 | ||
19 | +transport: TSocket = TSocket.TSocket(host, port) | ||
20 | +transport = TTransport.TBufferedTransport(transport) | ||
21 | +protocol = TBinaryProtocol.TBinaryProtocol(transport) | ||
22 | + | ||
23 | +client = Calculator.Client(protocol) | ||
24 | + | ||
25 | + | ||
26 | +transport.open() | ||
27 | + | ||
28 | +test = client.getData("江南_01.tif",[1340.27, -1911.31, 4351.79, 5410.6],[1340.27, -1911.31, 4351.79, 5410.6],[3,2,1],768,768) | ||
29 | +print(type(test)) |
app/modules/service/image/tutorial/ttypes.py
0 → 100644
1 | +# | ||
2 | +# Autogenerated by Thrift Compiler (0.14.2) | ||
3 | +# | ||
4 | +# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING | ||
5 | +# | ||
6 | +# options string: py | ||
7 | +# | ||
8 | + | ||
9 | +from thrift.Thrift import TType, TMessageType, TFrozenDict, TException, TApplicationException | ||
10 | +from thrift.protocol.TProtocol import TProtocolException | ||
11 | +from thrift.TRecursive import fix_spec | ||
12 | + | ||
13 | +import sys | ||
14 | + | ||
15 | +from thrift.transport import TTransport | ||
16 | +all_structs = [] | ||
17 | + | ||
18 | + | ||
19 | +class Image(object): | ||
20 | + """ | ||
21 | + Structs are the basic complex data structures. They are comprised of fields | ||
22 | + which each have an integer identifier, a type, a symbolic name, and an | ||
23 | + optional default value. | ||
24 | + | ||
25 | + Fields can be declared "optional", which ensures they will not be included | ||
26 | + in the serialized output if they aren't set. Note that this requires some | ||
27 | + manual management in some languages. | ||
28 | + | ||
29 | + Attributes: | ||
30 | + - name | ||
31 | + - path | ||
32 | + - size | ||
33 | + - create_time | ||
34 | + - type | ||
35 | + | ||
36 | + """ | ||
37 | + | ||
38 | + | ||
39 | + def __init__(self, name=None, path=None, size=None, create_time=None, type=None,): | ||
40 | + self.name = name | ||
41 | + self.path = path | ||
42 | + self.size = size | ||
43 | + self.create_time = create_time | ||
44 | + self.type = type | ||
45 | + | ||
46 | + def read(self, iprot): | ||
47 | + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: | ||
48 | + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) | ||
49 | + return | ||
50 | + iprot.readStructBegin() | ||
51 | + while True: | ||
52 | + (fname, ftype, fid) = iprot.readFieldBegin() | ||
53 | + if ftype == TType.STOP: | ||
54 | + break | ||
55 | + if fid == 1: | ||
56 | + if ftype == TType.STRING: | ||
57 | + self.name = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
58 | + else: | ||
59 | + iprot.skip(ftype) | ||
60 | + elif fid == 2: | ||
61 | + if ftype == TType.STRING: | ||
62 | + self.path = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
63 | + else: | ||
64 | + iprot.skip(ftype) | ||
65 | + elif fid == 3: | ||
66 | + if ftype == TType.STRING: | ||
67 | + self.size = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
68 | + else: | ||
69 | + iprot.skip(ftype) | ||
70 | + elif fid == 4: | ||
71 | + if ftype == TType.STRING: | ||
72 | + self.create_time = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
73 | + else: | ||
74 | + iprot.skip(ftype) | ||
75 | + elif fid == 5: | ||
76 | + if ftype == TType.STRING: | ||
77 | + self.type = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
78 | + else: | ||
79 | + iprot.skip(ftype) | ||
80 | + else: | ||
81 | + iprot.skip(ftype) | ||
82 | + iprot.readFieldEnd() | ||
83 | + iprot.readStructEnd() | ||
84 | + | ||
85 | + def write(self, oprot): | ||
86 | + if oprot._fast_encode is not None and self.thrift_spec is not None: | ||
87 | + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) | ||
88 | + return | ||
89 | + oprot.writeStructBegin('Image') | ||
90 | + if self.name is not None: | ||
91 | + oprot.writeFieldBegin('name', TType.STRING, 1) | ||
92 | + oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name) | ||
93 | + oprot.writeFieldEnd() | ||
94 | + if self.path is not None: | ||
95 | + oprot.writeFieldBegin('path', TType.STRING, 2) | ||
96 | + oprot.writeString(self.path.encode('utf-8') if sys.version_info[0] == 2 else self.path) | ||
97 | + oprot.writeFieldEnd() | ||
98 | + if self.size is not None: | ||
99 | + oprot.writeFieldBegin('size', TType.STRING, 3) | ||
100 | + oprot.writeString(self.size.encode('utf-8') if sys.version_info[0] == 2 else self.size) | ||
101 | + oprot.writeFieldEnd() | ||
102 | + if self.create_time is not None: | ||
103 | + oprot.writeFieldBegin('create_time', TType.STRING, 4) | ||
104 | + oprot.writeString(self.create_time.encode('utf-8') if sys.version_info[0] == 2 else self.create_time) | ||
105 | + oprot.writeFieldEnd() | ||
106 | + if self.type is not None: | ||
107 | + oprot.writeFieldBegin('type', TType.STRING, 5) | ||
108 | + oprot.writeString(self.type.encode('utf-8') if sys.version_info[0] == 2 else self.type) | ||
109 | + oprot.writeFieldEnd() | ||
110 | + oprot.writeFieldStop() | ||
111 | + oprot.writeStructEnd() | ||
112 | + | ||
113 | + def validate(self): | ||
114 | + return | ||
115 | + | ||
116 | + def __repr__(self): | ||
117 | + L = ['%s=%r' % (key, value) | ||
118 | + for key, value in self.__dict__.items()] | ||
119 | + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) | ||
120 | + | ||
121 | + def __eq__(self, other): | ||
122 | + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ | ||
123 | + | ||
124 | + def __ne__(self, other): | ||
125 | + return not (self == other) | ||
126 | + | ||
127 | + | ||
128 | +class RasterData(object): | ||
129 | + """ | ||
130 | + Attributes: | ||
131 | + - R | ||
132 | + - G | ||
133 | + - B | ||
134 | + | ||
135 | + """ | ||
136 | + | ||
137 | + | ||
138 | + def __init__(self, R=None, G=None, B=None,): | ||
139 | + self.R = R | ||
140 | + self.G = G | ||
141 | + self.B = B | ||
142 | + | ||
143 | + def read(self, iprot): | ||
144 | + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: | ||
145 | + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) | ||
146 | + return | ||
147 | + iprot.readStructBegin() | ||
148 | + while True: | ||
149 | + (fname, ftype, fid) = iprot.readFieldBegin() | ||
150 | + if ftype == TType.STOP: | ||
151 | + break | ||
152 | + if fid == 1: | ||
153 | + if ftype == TType.LIST: | ||
154 | + self.R = [] | ||
155 | + (_etype3, _size0) = iprot.readListBegin() | ||
156 | + for _i4 in range(_size0): | ||
157 | + _elem5 = iprot.readI16() | ||
158 | + self.R.append(_elem5) | ||
159 | + iprot.readListEnd() | ||
160 | + else: | ||
161 | + iprot.skip(ftype) | ||
162 | + elif fid == 2: | ||
163 | + if ftype == TType.LIST: | ||
164 | + self.G = [] | ||
165 | + (_etype9, _size6) = iprot.readListBegin() | ||
166 | + for _i10 in range(_size6): | ||
167 | + _elem11 = iprot.readI16() | ||
168 | + self.G.append(_elem11) | ||
169 | + iprot.readListEnd() | ||
170 | + else: | ||
171 | + iprot.skip(ftype) | ||
172 | + elif fid == 3: | ||
173 | + if ftype == TType.LIST: | ||
174 | + self.B = [] | ||
175 | + (_etype15, _size12) = iprot.readListBegin() | ||
176 | + for _i16 in range(_size12): | ||
177 | + _elem17 = iprot.readI16() | ||
178 | + self.B.append(_elem17) | ||
179 | + iprot.readListEnd() | ||
180 | + else: | ||
181 | + iprot.skip(ftype) | ||
182 | + else: | ||
183 | + iprot.skip(ftype) | ||
184 | + iprot.readFieldEnd() | ||
185 | + iprot.readStructEnd() | ||
186 | + | ||
187 | + def write(self, oprot): | ||
188 | + if oprot._fast_encode is not None and self.thrift_spec is not None: | ||
189 | + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) | ||
190 | + return | ||
191 | + oprot.writeStructBegin('RasterData') | ||
192 | + if self.R is not None: | ||
193 | + oprot.writeFieldBegin('R', TType.LIST, 1) | ||
194 | + oprot.writeListBegin(TType.I16, len(self.R)) | ||
195 | + for iter18 in self.R: | ||
196 | + oprot.writeI16(iter18) | ||
197 | + oprot.writeListEnd() | ||
198 | + oprot.writeFieldEnd() | ||
199 | + if self.G is not None: | ||
200 | + oprot.writeFieldBegin('G', TType.LIST, 2) | ||
201 | + oprot.writeListBegin(TType.I16, len(self.G)) | ||
202 | + for iter19 in self.G: | ||
203 | + oprot.writeI16(iter19) | ||
204 | + oprot.writeListEnd() | ||
205 | + oprot.writeFieldEnd() | ||
206 | + if self.B is not None: | ||
207 | + oprot.writeFieldBegin('B', TType.LIST, 3) | ||
208 | + oprot.writeListBegin(TType.I16, len(self.B)) | ||
209 | + for iter20 in self.B: | ||
210 | + oprot.writeI16(iter20) | ||
211 | + oprot.writeListEnd() | ||
212 | + oprot.writeFieldEnd() | ||
213 | + oprot.writeFieldStop() | ||
214 | + oprot.writeStructEnd() | ||
215 | + | ||
216 | + def validate(self): | ||
217 | + return | ||
218 | + | ||
219 | + def __repr__(self): | ||
220 | + L = ['%s=%r' % (key, value) | ||
221 | + for key, value in self.__dict__.items()] | ||
222 | + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) | ||
223 | + | ||
224 | + def __eq__(self, other): | ||
225 | + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ | ||
226 | + | ||
227 | + def __ne__(self, other): | ||
228 | + return not (self == other) | ||
229 | + | ||
230 | + | ||
231 | +class Raster(object): | ||
232 | + """ | ||
233 | + Attributes: | ||
234 | + - band_count | ||
235 | + - overview_count | ||
236 | + - xy_size | ||
237 | + - origin_extent | ||
238 | + - null_value | ||
239 | + - sr_wkt | ||
240 | + - epsg | ||
241 | + - sr_proj4 | ||
242 | + - size | ||
243 | + - path | ||
244 | + - cell_x_size | ||
245 | + - cell_y_size | ||
246 | + | ||
247 | + """ | ||
248 | + | ||
249 | + | ||
250 | + def __init__(self, band_count=None, overview_count=None, xy_size=None, origin_extent=None, null_value=None, sr_wkt=None, epsg=None, sr_proj4=None, size=None, path=None, cell_x_size=None, cell_y_size=None,): | ||
251 | + self.band_count = band_count | ||
252 | + self.overview_count = overview_count | ||
253 | + self.xy_size = xy_size | ||
254 | + self.origin_extent = origin_extent | ||
255 | + self.null_value = null_value | ||
256 | + self.sr_wkt = sr_wkt | ||
257 | + self.epsg = epsg | ||
258 | + self.sr_proj4 = sr_proj4 | ||
259 | + self.size = size | ||
260 | + self.path = path | ||
261 | + self.cell_x_size = cell_x_size | ||
262 | + self.cell_y_size = cell_y_size | ||
263 | + | ||
264 | + def read(self, iprot): | ||
265 | + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None: | ||
266 | + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) | ||
267 | + return | ||
268 | + iprot.readStructBegin() | ||
269 | + while True: | ||
270 | + (fname, ftype, fid) = iprot.readFieldBegin() | ||
271 | + if ftype == TType.STOP: | ||
272 | + break | ||
273 | + if fid == 1: | ||
274 | + if ftype == TType.I32: | ||
275 | + self.band_count = iprot.readI32() | ||
276 | + else: | ||
277 | + iprot.skip(ftype) | ||
278 | + elif fid == 2: | ||
279 | + if ftype == TType.I32: | ||
280 | + self.overview_count = iprot.readI32() | ||
281 | + else: | ||
282 | + iprot.skip(ftype) | ||
283 | + elif fid == 3: | ||
284 | + if ftype == TType.LIST: | ||
285 | + self.xy_size = [] | ||
286 | + (_etype24, _size21) = iprot.readListBegin() | ||
287 | + for _i25 in range(_size21): | ||
288 | + _elem26 = iprot.readI32() | ||
289 | + self.xy_size.append(_elem26) | ||
290 | + iprot.readListEnd() | ||
291 | + else: | ||
292 | + iprot.skip(ftype) | ||
293 | + elif fid == 4: | ||
294 | + if ftype == TType.LIST: | ||
295 | + self.origin_extent = [] | ||
296 | + (_etype30, _size27) = iprot.readListBegin() | ||
297 | + for _i31 in range(_size27): | ||
298 | + _elem32 = iprot.readDouble() | ||
299 | + self.origin_extent.append(_elem32) | ||
300 | + iprot.readListEnd() | ||
301 | + else: | ||
302 | + iprot.skip(ftype) | ||
303 | + elif fid == 5: | ||
304 | + if ftype == TType.DOUBLE: | ||
305 | + self.null_value = iprot.readDouble() | ||
306 | + else: | ||
307 | + iprot.skip(ftype) | ||
308 | + elif fid == 6: | ||
309 | + if ftype == TType.STRING: | ||
310 | + self.sr_wkt = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
311 | + else: | ||
312 | + iprot.skip(ftype) | ||
313 | + elif fid == 7: | ||
314 | + if ftype == TType.STRING: | ||
315 | + self.epsg = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
316 | + else: | ||
317 | + iprot.skip(ftype) | ||
318 | + elif fid == 8: | ||
319 | + if ftype == TType.STRING: | ||
320 | + self.sr_proj4 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
321 | + else: | ||
322 | + iprot.skip(ftype) | ||
323 | + elif fid == 9: | ||
324 | + if ftype == TType.I32: | ||
325 | + self.size = iprot.readI32() | ||
326 | + else: | ||
327 | + iprot.skip(ftype) | ||
328 | + elif fid == 10: | ||
329 | + if ftype == TType.STRING: | ||
330 | + self.path = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
331 | + else: | ||
332 | + iprot.skip(ftype) | ||
333 | + elif fid == 11: | ||
334 | + if ftype == TType.DOUBLE: | ||
335 | + self.cell_x_size = iprot.readDouble() | ||
336 | + else: | ||
337 | + iprot.skip(ftype) | ||
338 | + elif fid == 12: | ||
339 | + if ftype == TType.DOUBLE: | ||
340 | + self.cell_y_size = iprot.readDouble() | ||
341 | + else: | ||
342 | + iprot.skip(ftype) | ||
343 | + else: | ||
344 | + iprot.skip(ftype) | ||
345 | + iprot.readFieldEnd() | ||
346 | + iprot.readStructEnd() | ||
347 | + | ||
348 | + def write(self, oprot): | ||
349 | + if oprot._fast_encode is not None and self.thrift_spec is not None: | ||
350 | + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) | ||
351 | + return | ||
352 | + oprot.writeStructBegin('Raster') | ||
353 | + if self.band_count is not None: | ||
354 | + oprot.writeFieldBegin('band_count', TType.I32, 1) | ||
355 | + oprot.writeI32(self.band_count) | ||
356 | + oprot.writeFieldEnd() | ||
357 | + if self.overview_count is not None: | ||
358 | + oprot.writeFieldBegin('overview_count', TType.I32, 2) | ||
359 | + oprot.writeI32(self.overview_count) | ||
360 | + oprot.writeFieldEnd() | ||
361 | + if self.xy_size is not None: | ||
362 | + oprot.writeFieldBegin('xy_size', TType.LIST, 3) | ||
363 | + oprot.writeListBegin(TType.I32, len(self.xy_size)) | ||
364 | + for iter33 in self.xy_size: | ||
365 | + oprot.writeI32(iter33) | ||
366 | + oprot.writeListEnd() | ||
367 | + oprot.writeFieldEnd() | ||
368 | + if self.origin_extent is not None: | ||
369 | + oprot.writeFieldBegin('origin_extent', TType.LIST, 4) | ||
370 | + oprot.writeListBegin(TType.DOUBLE, len(self.origin_extent)) | ||
371 | + for iter34 in self.origin_extent: | ||
372 | + oprot.writeDouble(iter34) | ||
373 | + oprot.writeListEnd() | ||
374 | + oprot.writeFieldEnd() | ||
375 | + if self.null_value is not None: | ||
376 | + oprot.writeFieldBegin('null_value', TType.DOUBLE, 5) | ||
377 | + oprot.writeDouble(self.null_value) | ||
378 | + oprot.writeFieldEnd() | ||
379 | + if self.sr_wkt is not None: | ||
380 | + oprot.writeFieldBegin('sr_wkt', TType.STRING, 6) | ||
381 | + oprot.writeString(self.sr_wkt.encode('utf-8') if sys.version_info[0] == 2 else self.sr_wkt) | ||
382 | + oprot.writeFieldEnd() | ||
383 | + if self.epsg is not None: | ||
384 | + oprot.writeFieldBegin('epsg', TType.STRING, 7) | ||
385 | + oprot.writeString(self.epsg.encode('utf-8') if sys.version_info[0] == 2 else self.epsg) | ||
386 | + oprot.writeFieldEnd() | ||
387 | + if self.sr_proj4 is not None: | ||
388 | + oprot.writeFieldBegin('sr_proj4', TType.STRING, 8) | ||
389 | + oprot.writeString(self.sr_proj4.encode('utf-8') if sys.version_info[0] == 2 else self.sr_proj4) | ||
390 | + oprot.writeFieldEnd() | ||
391 | + if self.size is not None: | ||
392 | + oprot.writeFieldBegin('size', TType.I32, 9) | ||
393 | + oprot.writeI32(self.size) | ||
394 | + oprot.writeFieldEnd() | ||
395 | + if self.path is not None: | ||
396 | + oprot.writeFieldBegin('path', TType.STRING, 10) | ||
397 | + oprot.writeString(self.path.encode('utf-8') if sys.version_info[0] == 2 else self.path) | ||
398 | + oprot.writeFieldEnd() | ||
399 | + if self.cell_x_size is not None: | ||
400 | + oprot.writeFieldBegin('cell_x_size', TType.DOUBLE, 11) | ||
401 | + oprot.writeDouble(self.cell_x_size) | ||
402 | + oprot.writeFieldEnd() | ||
403 | + if self.cell_y_size is not None: | ||
404 | + oprot.writeFieldBegin('cell_y_size', TType.DOUBLE, 12) | ||
405 | + oprot.writeDouble(self.cell_y_size) | ||
406 | + oprot.writeFieldEnd() | ||
407 | + oprot.writeFieldStop() | ||
408 | + oprot.writeStructEnd() | ||
409 | + | ||
410 | + def validate(self): | ||
411 | + return | ||
412 | + | ||
413 | + def __repr__(self): | ||
414 | + L = ['%s=%r' % (key, value) | ||
415 | + for key, value in self.__dict__.items()] | ||
416 | + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) | ||
417 | + | ||
418 | + def __eq__(self, other): | ||
419 | + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ | ||
420 | + | ||
421 | + def __ne__(self, other): | ||
422 | + return not (self == other) | ||
423 | + | ||
424 | + | ||
425 | +class InvalidOperation(TException): | ||
426 | + """ | ||
427 | + Structs can also be exceptions, if they are nasty. | ||
428 | + | ||
429 | + Attributes: | ||
430 | + - whatOp | ||
431 | + - why | ||
432 | + | ||
433 | + """ | ||
434 | + | ||
435 | + | ||
436 | + def __init__(self, whatOp=None, why=None,): | ||
437 | + super(InvalidOperation, self).__setattr__('whatOp', whatOp) | ||
438 | + super(InvalidOperation, self).__setattr__('why', why) | ||
439 | + | ||
440 | + def __setattr__(self, *args): | ||
441 | + raise TypeError("can't modify immutable instance") | ||
442 | + | ||
443 | + def __delattr__(self, *args): | ||
444 | + raise TypeError("can't modify immutable instance") | ||
445 | + | ||
446 | + def __hash__(self): | ||
447 | + return hash(self.__class__) ^ hash((self.whatOp, self.why, )) | ||
448 | + | ||
449 | + @classmethod | ||
450 | + def read(cls, iprot): | ||
451 | + if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and cls.thrift_spec is not None: | ||
452 | + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) | ||
453 | + iprot.readStructBegin() | ||
454 | + whatOp = None | ||
455 | + why = None | ||
456 | + while True: | ||
457 | + (fname, ftype, fid) = iprot.readFieldBegin() | ||
458 | + if ftype == TType.STOP: | ||
459 | + break | ||
460 | + if fid == 1: | ||
461 | + if ftype == TType.I32: | ||
462 | + whatOp = iprot.readI32() | ||
463 | + else: | ||
464 | + iprot.skip(ftype) | ||
465 | + elif fid == 2: | ||
466 | + if ftype == TType.STRING: | ||
467 | + why = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString() | ||
468 | + else: | ||
469 | + iprot.skip(ftype) | ||
470 | + else: | ||
471 | + iprot.skip(ftype) | ||
472 | + iprot.readFieldEnd() | ||
473 | + iprot.readStructEnd() | ||
474 | + return cls( | ||
475 | + whatOp=whatOp, | ||
476 | + why=why, | ||
477 | + ) | ||
478 | + | ||
479 | + def write(self, oprot): | ||
480 | + if oprot._fast_encode is not None and self.thrift_spec is not None: | ||
481 | + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) | ||
482 | + return | ||
483 | + oprot.writeStructBegin('InvalidOperation') | ||
484 | + if self.whatOp is not None: | ||
485 | + oprot.writeFieldBegin('whatOp', TType.I32, 1) | ||
486 | + oprot.writeI32(self.whatOp) | ||
487 | + oprot.writeFieldEnd() | ||
488 | + if self.why is not None: | ||
489 | + oprot.writeFieldBegin('why', TType.STRING, 2) | ||
490 | + oprot.writeString(self.why.encode('utf-8') if sys.version_info[0] == 2 else self.why) | ||
491 | + oprot.writeFieldEnd() | ||
492 | + oprot.writeFieldStop() | ||
493 | + oprot.writeStructEnd() | ||
494 | + | ||
495 | + def validate(self): | ||
496 | + return | ||
497 | + | ||
498 | + def __str__(self): | ||
499 | + return repr(self) | ||
500 | + | ||
501 | + def __repr__(self): | ||
502 | + L = ['%s=%r' % (key, value) | ||
503 | + for key, value in self.__dict__.items()] | ||
504 | + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) | ||
505 | + | ||
506 | + def __eq__(self, other): | ||
507 | + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ | ||
508 | + | ||
509 | + def __ne__(self, other): | ||
510 | + return not (self == other) | ||
511 | +all_structs.append(Image) | ||
512 | +Image.thrift_spec = ( | ||
513 | + None, # 0 | ||
514 | + (1, TType.STRING, 'name', 'UTF8', None, ), # 1 | ||
515 | + (2, TType.STRING, 'path', 'UTF8', None, ), # 2 | ||
516 | + (3, TType.STRING, 'size', 'UTF8', None, ), # 3 | ||
517 | + (4, TType.STRING, 'create_time', 'UTF8', None, ), # 4 | ||
518 | + (5, TType.STRING, 'type', 'UTF8', None, ), # 5 | ||
519 | +) | ||
520 | +all_structs.append(RasterData) | ||
521 | +RasterData.thrift_spec = ( | ||
522 | + None, # 0 | ||
523 | + (1, TType.LIST, 'R', (TType.I16, None, False), None, ), # 1 | ||
524 | + (2, TType.LIST, 'G', (TType.I16, None, False), None, ), # 2 | ||
525 | + (3, TType.LIST, 'B', (TType.I16, None, False), None, ), # 3 | ||
526 | +) | ||
527 | +all_structs.append(Raster) | ||
528 | +Raster.thrift_spec = ( | ||
529 | + None, # 0 | ||
530 | + (1, TType.I32, 'band_count', None, None, ), # 1 | ||
531 | + (2, TType.I32, 'overview_count', None, None, ), # 2 | ||
532 | + (3, TType.LIST, 'xy_size', (TType.I32, None, False), None, ), # 3 | ||
533 | + (4, TType.LIST, 'origin_extent', (TType.DOUBLE, None, False), None, ), # 4 | ||
534 | + (5, TType.DOUBLE, 'null_value', None, None, ), # 5 | ||
535 | + (6, TType.STRING, 'sr_wkt', 'UTF8', None, ), # 6 | ||
536 | + (7, TType.STRING, 'epsg', 'UTF8', None, ), # 7 | ||
537 | + (8, TType.STRING, 'sr_proj4', 'UTF8', None, ), # 8 | ||
538 | + (9, TType.I32, 'size', None, None, ), # 9 | ||
539 | + (10, TType.STRING, 'path', 'UTF8', None, ), # 10 | ||
540 | + (11, TType.DOUBLE, 'cell_x_size', None, None, ), # 11 | ||
541 | + (12, TType.DOUBLE, 'cell_y_size', None, None, ), # 12 | ||
542 | +) | ||
543 | +all_structs.append(InvalidOperation) | ||
544 | +InvalidOperation.thrift_spec = ( | ||
545 | + None, # 0 | ||
546 | + (1, TType.I32, 'whatOp', None, None, ), # 1 | ||
547 | + (2, TType.STRING, 'why', 'UTF8', None, ), # 2 | ||
548 | +) | ||
549 | +fix_spec(all_structs) | ||
550 | +del all_structs |

4.5 KB

7.6 KB
@@ -24,6 +24,8 @@ class Api(ApiTemplate): | @@ -24,6 +24,8 @@ class Api(ApiTemplate): | ||
24 | # extent = [float(x) for x in data.get("extent").split(",")] if data.get("extent") else [0,0,0,0] | 24 | # extent = [float(x) for x in data.get("extent").split(",")] if data.get("extent") else [0,0,0,0] |
25 | # top_left = [float(x) for x in data.get("top_left").split(",")] if data.get("top_left") else [0, 0] | 25 | # top_left = [float(x) for x in data.get("top_left").split(",")] if data.get("top_left") else [0, 0] |
26 | 26 | ||
27 | + | ||
28 | + | ||
27 | guid = uuid.uuid1().__str__() | 29 | guid = uuid.uuid1().__str__() |
28 | tile_scheme = TileScheme( | 30 | tile_scheme = TileScheme( |
29 | guid = guid, | 31 | guid = guid, |
@@ -39,11 +41,12 @@ class Api(ApiTemplate): | @@ -39,11 +41,12 @@ class Api(ApiTemplate): | ||
39 | # ymax = extent[3], | 41 | # ymax = extent[3], |
40 | # origin_x = top_left[0], | 42 | # origin_x = top_left[0], |
41 | # origin_y = top_left[1], | 43 | # origin_y = top_left[1], |
42 | - levels = json.dumps(data.get("levels")), | 44 | + levels = json.dumps(json.loads(data.get("levels"))), |
43 | dpi = int(data.get("dpi")), | 45 | dpi = int(data.get("dpi")), |
44 | rows = int(data.get("rows")), | 46 | rows = int(data.get("rows")), |
45 | - cols = int(data.get("clos")), | ||
46 | - update_time = datetime.datetime.now() | 47 | + cols = int(data.get("cols")), |
48 | + update_time = datetime.datetime.now(), | ||
49 | + parameter=json.dumps(json.loads(data.get("parameter"))) | ||
47 | ) | 50 | ) |
48 | 51 | ||
49 | db.session.add(tile_scheme) | 52 | db.session.add(tile_scheme) |
@@ -89,6 +92,9 @@ class Api(ApiTemplate): | @@ -89,6 +92,9 @@ class Api(ApiTemplate): | ||
89 | {"name": "levels", | 92 | {"name": "levels", |
90 | "in": "formData", | 93 | "in": "formData", |
91 | "type": "string"}, | 94 | "type": "string"}, |
95 | + {"name": "parameter", | ||
96 | + "in": "formData", | ||
97 | + "type": "string"}, | ||
92 | 98 | ||
93 | ], | 99 | ], |
94 | "responses": { | 100 | "responses": { |
@@ -10,6 +10,7 @@ from app.util.component.FileProcess import FileProcess | @@ -10,6 +10,7 @@ from app.util.component.FileProcess import FileProcess | ||
10 | from app.util.component.SliceScheme import SliceScheme | 10 | from app.util.component.SliceScheme import SliceScheme |
11 | import shutil | 11 | import shutil |
12 | from app.util.component.StructuredPrint import StructurePrint | 12 | from app.util.component.StructuredPrint import StructurePrint |
13 | +import json | ||
13 | class Api(ApiTemplate): | 14 | class Api(ApiTemplate): |
14 | api_name = "解析方案" | 15 | api_name = "解析方案" |
15 | 16 | ||
@@ -30,7 +31,8 @@ class Api(ApiTemplate): | @@ -30,7 +31,8 @@ class Api(ApiTemplate): | ||
30 | "dpi": scheme.parameter.get("dpi"), | 31 | "dpi": scheme.parameter.get("dpi"), |
31 | "rows": scheme.parameter.get("rows"), | 32 | "rows": scheme.parameter.get("rows"), |
32 | "cols": scheme.parameter.get("cols"), | 33 | "cols": scheme.parameter.get("cols"), |
33 | - "levels": scheme.levels | 34 | + "levels": scheme.levels, |
35 | + "parameter":scheme.parameter | ||
34 | } | 36 | } |
35 | 37 | ||
36 | res["data"] = data | 38 | res["data"] = data |
@@ -47,11 +49,11 @@ class Api(ApiTemplate): | @@ -47,11 +49,11 @@ class Api(ApiTemplate): | ||
47 | i+=1 | 49 | i+=1 |
48 | if i<30: | 50 | if i<30: |
49 | shutil.rmtree(dir_path,True) | 51 | shutil.rmtree(dir_path,True) |
50 | - StructurePrint.print("删除文件成功!") | 52 | + StructurePrint().print("删除文件成功!") |
51 | else: | 53 | else: |
52 | raise Exception("找不到文件!") | 54 | raise Exception("找不到文件!") |
53 | except Exception as e: | 55 | except Exception as e: |
54 | - StructurePrint.print("删除文件失败!","ERROR") | 56 | + StructurePrint().print("删除文件失败!","ERROR") |
55 | return res | 57 | return res |
56 | 58 | ||
57 | api_doc = { | 59 | api_doc = { |
1 | +<?xml version="1.0" encoding="utf-8" ?> | ||
2 | +<TileCacheInfo xmlns:typens="http://www.esri.com/schemas/ArcGIS/10.1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="typens:TileCacheInfo"> | ||
3 | + <SpatialReference xsi:type="typens:GeographicCoordinateSystem"> | ||
4 | + <WKT>GEOGCS["GCS_China_Geodetic_Coordinate_System_2000",DATUM["D_China_2000",SPHEROID["CGCS2000",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433],AUTHORITY["EPSG",4490]]</WKT> | ||
5 | + <XOrigin>-400</XOrigin> | ||
6 | + <YOrigin>-400</YOrigin> | ||
7 | + <XYScale>11258999068426.24</XYScale> | ||
8 | + <ZOrigin>0</ZOrigin> | ||
9 | + <ZScale>1</ZScale> | ||
10 | + <MOrigin>-100000</MOrigin> | ||
11 | + <MScale>10000</MScale> | ||
12 | + <XYTolerance>8.98315284119521e-009</XYTolerance> | ||
13 | + <ZTolerance>2</ZTolerance> | ||
14 | + <MTolerance>0.001</MTolerance> | ||
15 | + <HighPrecision>true</HighPrecision> | ||
16 | + <LeftLongitude>-180</LeftLongitude> | ||
17 | + <WKID>4490</WKID> | ||
18 | + <LatestWKID>4490</LatestWKID> | ||
19 | + </SpatialReference> | ||
20 | + <TileOrigin xsi:type="typens:PointN"> | ||
21 | + <X>-180</X> | ||
22 | + <Y>90</Y> | ||
23 | + </TileOrigin> | ||
24 | + <TileCols>256</TileCols> | ||
25 | + <TileRows>256</TileRows> | ||
26 | + <DPI>96</DPI> | ||
27 | + <PreciseDPI>96</PreciseDPI> | ||
28 | + <LODInfos xsi:type="typens:ArrayOfLODInfo"> | ||
29 | + <LODInfo xsi:type="typens:LODInfo"> | ||
30 | + <LevelID>0</LevelID> | ||
31 | + <Scale>295497593.05875003</Scale> | ||
32 | + <Resolution>0.70312500000000022</Resolution> | ||
33 | + </LODInfo> | ||
34 | + <LODInfo xsi:type="typens:LODInfo"> | ||
35 | + <LevelID>1</LevelID> | ||
36 | + <Scale>147748796.52937502</Scale> | ||
37 | + <Resolution>0.35156250000000011</Resolution> | ||
38 | + </LODInfo> | ||
39 | + <LODInfo xsi:type="typens:LODInfo"> | ||
40 | + <LevelID>2</LevelID> | ||
41 | + <Scale>73874398.264687508</Scale> | ||
42 | + <Resolution>0.17578125000000006</Resolution> | ||
43 | + </LODInfo> | ||
44 | + <LODInfo xsi:type="typens:LODInfo"> | ||
45 | + <LevelID>3</LevelID> | ||
46 | + <Scale>36937199.132343754</Scale> | ||
47 | + <Resolution>0.087890625000000028</Resolution> | ||
48 | + </LODInfo> | ||
49 | + <LODInfo xsi:type="typens:LODInfo"> | ||
50 | + <LevelID>4</LevelID> | ||
51 | + <Scale>18468599.566171877</Scale> | ||
52 | + <Resolution>0.043945312500000014</Resolution> | ||
53 | + </LODInfo> | ||
54 | + <LODInfo xsi:type="typens:LODInfo"> | ||
55 | + <LevelID>5</LevelID> | ||
56 | + <Scale>9234299.7830859385</Scale> | ||
57 | + <Resolution>0.021972656250000007</Resolution> | ||
58 | + </LODInfo> | ||
59 | + <LODInfo xsi:type="typens:LODInfo"> | ||
60 | + <LevelID>6</LevelID> | ||
61 | + <Scale>4617149.8915429693</Scale> | ||
62 | + <Resolution>0.010986328125000003</Resolution> | ||
63 | + </LODInfo> | ||
64 | + <LODInfo xsi:type="typens:LODInfo"> | ||
65 | + <LevelID>7</LevelID> | ||
66 | + <Scale>2308574.9457714846</Scale> | ||
67 | + <Resolution>0.0054931640625000017</Resolution> | ||
68 | + </LODInfo> | ||
69 | + <LODInfo xsi:type="typens:LODInfo"> | ||
70 | + <LevelID>8</LevelID> | ||
71 | + <Scale>1154287.4728857423</Scale> | ||
72 | + <Resolution>0.0027465820312500009</Resolution> | ||
73 | + </LODInfo> | ||
74 | + <LODInfo xsi:type="typens:LODInfo"> | ||
75 | + <LevelID>9</LevelID> | ||
76 | + <Scale>577143.73644287116</Scale> | ||
77 | + <Resolution>0.0013732910156250004</Resolution> | ||
78 | + </LODInfo> | ||
79 | + <LODInfo xsi:type="typens:LODInfo"> | ||
80 | + <LevelID>10</LevelID> | ||
81 | + <Scale>288571.86822143558</Scale> | ||
82 | + <Resolution>0.00068664550781250022</Resolution> | ||
83 | + </LODInfo> | ||
84 | + <LODInfo xsi:type="typens:LODInfo"> | ||
85 | + <LevelID>11</LevelID> | ||
86 | + <Scale>144285.93411071779</Scale> | ||
87 | + <Resolution>0.00034332275390625011</Resolution> | ||
88 | + </LODInfo> | ||
89 | + <LODInfo xsi:type="typens:LODInfo"> | ||
90 | + <LevelID>12</LevelID> | ||
91 | + <Scale>72142.967055358895</Scale> | ||
92 | + <Resolution>0.00017166137695312505</Resolution> | ||
93 | + </LODInfo> | ||
94 | + <LODInfo xsi:type="typens:LODInfo"> | ||
95 | + <LevelID>13</LevelID> | ||
96 | + <Scale>36071.483527679447</Scale> | ||
97 | + <Resolution>8.5830688476562527e-005</Resolution> | ||
98 | + </LODInfo> | ||
99 | + <LODInfo xsi:type="typens:LODInfo"> | ||
100 | + <LevelID>14</LevelID> | ||
101 | + <Scale>18035.741763839724</Scale> | ||
102 | + <Resolution>4.2915344238281264e-005</Resolution> | ||
103 | + </LODInfo> | ||
104 | + <LODInfo xsi:type="typens:LODInfo"> | ||
105 | + <LevelID>15</LevelID> | ||
106 | + <Scale>9017.8708819198619</Scale> | ||
107 | + <Resolution>2.1457672119140632e-005</Resolution> | ||
108 | + </LODInfo> | ||
109 | + <LODInfo xsi:type="typens:LODInfo"> | ||
110 | + <LevelID>16</LevelID> | ||
111 | + <Scale>4508.9354409599309</Scale> | ||
112 | + <Resolution>1.0728836059570316e-005</Resolution> | ||
113 | + </LODInfo> | ||
114 | + <LODInfo xsi:type="typens:LODInfo"> | ||
115 | + <LevelID>17</LevelID> | ||
116 | + <Scale>2254.4677204799655</Scale> | ||
117 | + <Resolution>5.3644180297851579e-006</Resolution> | ||
118 | + </LODInfo> | ||
119 | + <LODInfo xsi:type="typens:LODInfo"> | ||
120 | + <LevelID>18</LevelID> | ||
121 | + <Scale>1127.2338602399827</Scale> | ||
122 | + <Resolution>2.682209014892579e-006</Resolution> | ||
123 | + </LODInfo> | ||
124 | + <LODInfo xsi:type="typens:LODInfo"> | ||
125 | + <LevelID>19</LevelID> | ||
126 | + <Scale>563.61693011999137</Scale> | ||
127 | + <Resolution>1.3411045074462895e-006</Resolution> | ||
128 | + </LODInfo> | ||
129 | + </LODInfos> | ||
130 | +</TileCacheInfo> |
1 | +<?xml version="1.0" encoding="utf-8" ?> | ||
2 | +<TileCacheInfo xmlns:typens="http://www.esri.com/schemas/ArcGIS/10.1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="typens:TileCacheInfo"> | ||
3 | + <SpatialReference xsi:type="typens:GeographicCoordinateSystem"> | ||
4 | + <WKT>GEOGCS["GCS_China_Geodetic_Coordinate_System_2000",DATUM["D_China_2000",SPHEROID["CGCS2000",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433],AUTHORITY["EPSG",4490]]</WKT> | ||
5 | + <XOrigin>-400</XOrigin> | ||
6 | + <YOrigin>-400</YOrigin> | ||
7 | + <XYScale>11258999068426.24</XYScale> | ||
8 | + <ZOrigin>0</ZOrigin> | ||
9 | + <ZScale>1</ZScale> | ||
10 | + <MOrigin>-100000</MOrigin> | ||
11 | + <MScale>10000</MScale> | ||
12 | + <XYTolerance>8.98315284119521e-009</XYTolerance> | ||
13 | + <ZTolerance>2</ZTolerance> | ||
14 | + <MTolerance>0.001</MTolerance> | ||
15 | + <HighPrecision>true</HighPrecision> | ||
16 | + <LeftLongitude>-180</LeftLongitude> | ||
17 | + <WKID>4490</WKID> | ||
18 | + <LatestWKID>4490</LatestWKID> | ||
19 | + </SpatialReference> | ||
20 | + <TileOrigin xsi:type="typens:PointN"> | ||
21 | + <X>-180</X> | ||
22 | + <Y>90</Y> | ||
23 | + </TileOrigin> | ||
24 | + <TileCols>256</TileCols> | ||
25 | + <TileRows>256</TileRows> | ||
26 | + <DPI>96</DPI> | ||
27 | + <PreciseDPI>96</PreciseDPI> | ||
28 | + <LODInfos xsi:type="typens:ArrayOfLODInfo"> | ||
29 | + <LODInfo xsi:type="typens:LODInfo"> | ||
30 | + <LevelID>0</LevelID> | ||
31 | + <Scale>590995186.11750006</Scale> | ||
32 | + <Resolution>1.4062500000000004</Resolution> | ||
33 | + </LODInfo> | ||
34 | + <LODInfo xsi:type="typens:LODInfo"> | ||
35 | + <LevelID>1</LevelID> | ||
36 | + <Scale>295497593.05875003</Scale> | ||
37 | + <Resolution>0.70312500000000022</Resolution> | ||
38 | + </LODInfo> | ||
39 | + <LODInfo xsi:type="typens:LODInfo"> | ||
40 | + <LevelID>2</LevelID> | ||
41 | + <Scale>147748796.52937502</Scale> | ||
42 | + <Resolution>0.35156250000000011</Resolution> | ||
43 | + </LODInfo> | ||
44 | + <LODInfo xsi:type="typens:LODInfo"> | ||
45 | + <LevelID>3</LevelID> | ||
46 | + <Scale>73874398.264687508</Scale> | ||
47 | + <Resolution>0.17578125000000006</Resolution> | ||
48 | + </LODInfo> | ||
49 | + <LODInfo xsi:type="typens:LODInfo"> | ||
50 | + <LevelID>4</LevelID> | ||
51 | + <Scale>36937199.132343754</Scale> | ||
52 | + <Resolution>0.087890625000000028</Resolution> | ||
53 | + </LODInfo> | ||
54 | + <LODInfo xsi:type="typens:LODInfo"> | ||
55 | + <LevelID>5</LevelID> | ||
56 | + <Scale>18468599.566171877</Scale> | ||
57 | + <Resolution>0.043945312500000014</Resolution> | ||
58 | + </LODInfo> | ||
59 | + <LODInfo xsi:type="typens:LODInfo"> | ||
60 | + <LevelID>6</LevelID> | ||
61 | + <Scale>9234299.7830859385</Scale> | ||
62 | + <Resolution>0.021972656250000007</Resolution> | ||
63 | + </LODInfo> | ||
64 | + <LODInfo xsi:type="typens:LODInfo"> | ||
65 | + <LevelID>7</LevelID> | ||
66 | + <Scale>4617149.8915429693</Scale> | ||
67 | + <Resolution>0.010986328125000003</Resolution> | ||
68 | + </LODInfo> | ||
69 | + <LODInfo xsi:type="typens:LODInfo"> | ||
70 | + <LevelID>8</LevelID> | ||
71 | + <Scale>2308574.9457714846</Scale> | ||
72 | + <Resolution>0.0054931640625000017</Resolution> | ||
73 | + </LODInfo> | ||
74 | + <LODInfo xsi:type="typens:LODInfo"> | ||
75 | + <LevelID>9</LevelID> | ||
76 | + <Scale>1154287.4728857423</Scale> | ||
77 | + <Resolution>0.0027465820312500009</Resolution> | ||
78 | + </LODInfo> | ||
79 | + <LODInfo xsi:type="typens:LODInfo"> | ||
80 | + <LevelID>10</LevelID> | ||
81 | + <Scale>577143.73644287116</Scale> | ||
82 | + <Resolution>0.0013732910156250004</Resolution> | ||
83 | + </LODInfo> | ||
84 | + <LODInfo xsi:type="typens:LODInfo"> | ||
85 | + <LevelID>11</LevelID> | ||
86 | + <Scale>288571.86822143558</Scale> | ||
87 | + <Resolution>0.00068664550781250022</Resolution> | ||
88 | + </LODInfo> | ||
89 | + <LODInfo xsi:type="typens:LODInfo"> | ||
90 | + <LevelID>12</LevelID> | ||
91 | + <Scale>144285.93411071779</Scale> | ||
92 | + <Resolution>0.00034332275390625011</Resolution> | ||
93 | + </LODInfo> | ||
94 | + <LODInfo xsi:type="typens:LODInfo"> | ||
95 | + <LevelID>13</LevelID> | ||
96 | + <Scale>72142.967055358895</Scale> | ||
97 | + <Resolution>0.00017166137695312505</Resolution> | ||
98 | + </LODInfo> | ||
99 | + <LODInfo xsi:type="typens:LODInfo"> | ||
100 | + <LevelID>14</LevelID> | ||
101 | + <Scale>36071.483527679447</Scale> | ||
102 | + <Resolution>8.5830688476562527e-005</Resolution> | ||
103 | + </LODInfo> | ||
104 | + <LODInfo xsi:type="typens:LODInfo"> | ||
105 | + <LevelID>15</LevelID> | ||
106 | + <Scale>18035.741763839724</Scale> | ||
107 | + <Resolution>4.2915344238281264e-005</Resolution> | ||
108 | + </LODInfo> | ||
109 | + <LODInfo xsi:type="typens:LODInfo"> | ||
110 | + <LevelID>16</LevelID> | ||
111 | + <Scale>9017.8708819198619</Scale> | ||
112 | + <Resolution>2.1457672119140632e-005</Resolution> | ||
113 | + </LODInfo> | ||
114 | + <LODInfo xsi:type="typens:LODInfo"> | ||
115 | + <LevelID>17</LevelID> | ||
116 | + <Scale>4508.9354409599309</Scale> | ||
117 | + <Resolution>1.0728836059570316e-005</Resolution> | ||
118 | + </LODInfo> | ||
119 | + <LODInfo xsi:type="typens:LODInfo"> | ||
120 | + <LevelID>18</LevelID> | ||
121 | + <Scale>2254.4677204799655</Scale> | ||
122 | + <Resolution>5.3644180297851579e-006</Resolution> | ||
123 | + </LODInfo> | ||
124 | + <LODInfo xsi:type="typens:LODInfo"> | ||
125 | + <LevelID>19</LevelID> | ||
126 | + <Scale>1127.2338602399827</Scale> | ||
127 | + <Resolution>2.682209014892579e-006</Resolution> | ||
128 | + </LODInfo> | ||
129 | + <LODInfo xsi:type="typens:LODInfo"> | ||
130 | + <LevelID>20</LevelID> | ||
131 | + <Scale>563.61693011999137</Scale> | ||
132 | + <Resolution>1.3411045074462895e-006</Resolution> | ||
133 | + </LODInfo> | ||
134 | + </LODInfos> | ||
135 | +</TileCacheInfo> |
@@ -19,7 +19,7 @@ class Api(ApiTemplate): | @@ -19,7 +19,7 @@ class Api(ApiTemplate): | ||
19 | try: | 19 | try: |
20 | guid = self.para.get("guid") | 20 | guid = self.para.get("guid") |
21 | service = Service.query.filter_by(guid=guid).one_or_none() | 21 | service = Service.query.filter_by(guid=guid).one_or_none() |
22 | - db.session.remove(service) | 22 | + db.session.delete(service) |
23 | db.session.commit() | 23 | db.session.commit() |
24 | res["result"] = True | 24 | res["result"] = True |
25 | except Exception as e: | 25 | except Exception as e: |
@@ -13,17 +13,16 @@ class Api(ApiTemplate): | @@ -13,17 +13,16 @@ class Api(ApiTemplate): | ||
13 | def process(self): | 13 | def process(self): |
14 | res = {} | 14 | res = {} |
15 | try: | 15 | try: |
16 | - if self.para.get("type").__eq__("影像WMS"): | ||
17 | - from app.modules.service.image.image_service_edit import Api | ||
18 | - elif self.para.get("type").__eq__("影像WMTS"): | ||
19 | - from app.modules.service.image.image_service_edit import Api | ||
20 | - elif self.para.get("type").__eq__("WMS"): | ||
21 | - from app.modules.service.wms.wms_edit import Api | ||
22 | - elif self.para.get("type").__eq__("WMTS"): | ||
23 | - from app.modules.service.wmts.wmts_edit import Api | 16 | + |
17 | + if self.para.get("type")in ["ImageWMTS","ImageWMS"]: | ||
18 | + from app.modules.service.image.image_service_edit import Api as Api2 | ||
19 | + elif self.para.get("type").__eq__("WMS/WFS"): | ||
20 | + from app.modules.service.wms.wms_edit import Api as Api2 | ||
21 | + elif self.para.get("type") in ["WMTS","MTS"]: | ||
22 | + from app.modules.service.wmts.wmts_edit import Api as Api2 | ||
24 | else: | 23 | else: |
25 | return res | 24 | return res |
26 | - api = Api() | 25 | + api = Api2() |
27 | api.para = self.para | 26 | api.para = self.para |
28 | res = api.process() | 27 | res = api.process() |
29 | 28 |
app/modules/service/service_info.py
0 → 100644
1 | +# coding=utf-8 | ||
2 | +#author: 4N | ||
3 | +#createtime: 2021/9/22 | ||
4 | +#email: nheweijun@sina.com | ||
5 | + | ||
6 | + | ||
7 | +from app.util.component.ApiTemplate import ApiTemplate | ||
8 | +from app.util.component.ModelVisitor import ModelVisitor | ||
9 | +from app.models import Service | ||
10 | + | ||
11 | +class Api(ApiTemplate): | ||
12 | + api_name = "服务Info" | ||
13 | + def process(self): | ||
14 | + res = {} | ||
15 | + try: | ||
16 | + guid = self.para.get("guid") | ||
17 | + service = Service.query.filter_by(guid=guid).one_or_none() | ||
18 | + | ||
19 | + if service.type in ["ImageWMS","ImageWMTS"]: | ||
20 | + from app.modules.service.image.models import ImageService | ||
21 | + speci_service = ImageService.query.filter_by(guid=guid).one_or_none() | ||
22 | + elif service.type.__eq__("WMTS") or service.type.__eq__("MTS"): | ||
23 | + from app.modules.service.wmts.models import WMTS | ||
24 | + speci_service = WMTS.query.filter_by(guid=guid).one_or_none() | ||
25 | + elif service.type.__eq__("WMS/WFS"): | ||
26 | + from app.modules.service.wms.models import WMS | ||
27 | + speci_service = WMS.query.filter_by(guid=guid).one_or_none() | ||
28 | + else: | ||
29 | + speci_service = {} | ||
30 | + res["data"] = ModelVisitor.object_to_json(speci_service) | ||
31 | + except Exception as e: | ||
32 | + raise e | ||
33 | + return res | ||
34 | + | ||
35 | + | ||
36 | + api_doc = { | ||
37 | + "tags": ["服务接口"], | ||
38 | + "parameters": [ | ||
39 | + {"name": "guid", | ||
40 | + "in": "formData", | ||
41 | + "type": "string", | ||
42 | + "description": "guid"}, | ||
43 | + ], | ||
44 | + "responses": { | ||
45 | + 200: { | ||
46 | + "schema": { | ||
47 | + "properties": { | ||
48 | + } | ||
49 | + } | ||
50 | + } | ||
51 | + } | ||
52 | + } |
@@ -4,23 +4,28 @@ | @@ -4,23 +4,28 @@ | ||
4 | #email: nheweijun@sina.com | 4 | #email: nheweijun@sina.com |
5 | 5 | ||
6 | from app.util.component.ApiTemplate import ApiTemplate | 6 | from app.util.component.ApiTemplate import ApiTemplate |
7 | - | 7 | +from app.models import Service |
8 | class Api(ApiTemplate): | 8 | class Api(ApiTemplate): |
9 | api_name = "注册服务" | 9 | api_name = "注册服务" |
10 | def process(self): | 10 | def process(self): |
11 | res = {} | 11 | res = {} |
12 | try: | 12 | try: |
13 | - if self.para.get("type").__eq__("影像WMS"): | ||
14 | - from app.modules.service.image.image_service_register import Api | ||
15 | - elif self.para.get("type").__eq__("影像WMTS"): | ||
16 | - from app.modules.service.image.image_service_register import Api | 13 | + |
14 | + service = Service.query.filter_by(name=self.para.get("name")).one_or_none() | ||
15 | + if service: | ||
16 | + raise Exception("服务已存在!") | ||
17 | + | ||
18 | + if self.para.get("type").__eq__("ImageWMS"): | ||
19 | + from app.modules.service.image.image_service_register import Api as Api2 | ||
20 | + elif self.para.get("type").__eq__("ImageWMTS"): | ||
21 | + from app.modules.service.image.image_service_register import Api as Api2 | ||
17 | elif self.para.get("type").__eq__("WMS"): | 22 | elif self.para.get("type").__eq__("WMS"): |
18 | - from app.modules.service.wms.wms_register import Api | ||
19 | - elif self.para.get("type").__eq__("WMTS"): | ||
20 | - from app.modules.service.wmts.wmts_register import Api | 23 | + from app.modules.service.wms.wms_register import Api as Api2 |
24 | + elif self.para.get("type").__eq__("WMTS") or self.para.get("type").__eq__("MTS"): | ||
25 | + from app.modules.service.wmts.wmts_register import Api as Api2 | ||
21 | else: | 26 | else: |
22 | return res | 27 | return res |
23 | - api = Api() | 28 | + api = Api2() |
24 | api.para = self.para | 29 | api.para = self.para |
25 | res = api.process() | 30 | res = api.process() |
26 | except Exception as e: | 31 | except Exception as e: |
@@ -31,6 +36,134 @@ class Api(ApiTemplate): | @@ -31,6 +36,134 @@ class Api(ApiTemplate): | ||
31 | api_doc = { | 36 | api_doc = { |
32 | "tags": ["服务接口"], | 37 | "tags": ["服务接口"], |
33 | "parameters": [ | 38 | "parameters": [ |
39 | + | ||
40 | + #通用参数 | ||
41 | + {"name": "name", | ||
42 | + "in": "formData", | ||
43 | + "type": "string", | ||
44 | + "required": "true", | ||
45 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
46 | + {"name": "alias", | ||
47 | + "in": "formData", | ||
48 | + "type": "string", | ||
49 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
50 | + {"name": "description", | ||
51 | + "in": "formData", | ||
52 | + "type": "string", | ||
53 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
54 | + {"name": "type", | ||
55 | + "in": "formData", | ||
56 | + "type": "string", | ||
57 | + "enum":["WMS/WFS","WMTS","MTS","ImageWMS","ImageWMTS"], | ||
58 | + "required": "true", | ||
59 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
60 | + {"name": "catalog_guid", | ||
61 | + "in": "formData", | ||
62 | + "type": "string", | ||
63 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
64 | + | ||
65 | + #影像参数 | ||
66 | + {"name": "guids", | ||
67 | + "in": "formData", | ||
68 | + "type": "string", | ||
69 | + "description": "[影像WMS,影像WMTS]影像guids,以英文逗号相隔"}, | ||
70 | + {"name": "scheme_guid", | ||
71 | + "in": "formData", | ||
72 | + "type": "string", | ||
73 | + "description": "[WMTS,影像WMTS]切片方案"}, | ||
74 | + | ||
75 | + # WMTS参数 | ||
76 | + {"name": "overview", | ||
77 | + "in": "formData", | ||
78 | + "type": "string", | ||
79 | + "description": "[WMTS]缩略图"}, | ||
80 | + {"name": "wmts_type", | ||
81 | + "in": "formData", | ||
82 | + "type": "string", | ||
83 | + "description": "[WMTS]wmts_type"}, | ||
84 | + {"name": "vendor", | ||
85 | + "in": "formData", | ||
86 | + "type": "string", | ||
87 | + "description": "[WMTS]厂商"}, | ||
88 | + {"name": "crs", | ||
89 | + "in": "formData", | ||
90 | + "type": "string", | ||
91 | + "description": "[WMTS]坐标系"}, | ||
92 | + {"name": "datasource", | ||
93 | + "in": "formData", | ||
94 | + "type": "string", | ||
95 | + "description": "[WMTS]数据路径"}, | ||
96 | + {"name": "layer_name", | ||
97 | + "in": "formData", | ||
98 | + "type": "string", | ||
99 | + "description": "[WMTS]图层名"}, | ||
100 | + {"name": "layer_alias", | ||
101 | + "in": "formData", | ||
102 | + "type": "string", | ||
103 | + "description": "[WMTS]图层别名"}, | ||
104 | + {"name": "layer_title", | ||
105 | + "in": "formData", | ||
106 | + "type": "string", | ||
107 | + "description": "[WMTS]图层标题"}, | ||
108 | + {"name": "layer_style", | ||
109 | + "in": "formData", | ||
110 | + "type": "string", | ||
111 | + "description": "[WMTS,WMS]图层样式"}, | ||
112 | + {"name": "layer_format", | ||
113 | + "in": "formData", | ||
114 | + "type": "string", | ||
115 | + "description": "[WMTS]图层format"}, | ||
116 | + {"name": "layer_extent", | ||
117 | + "in": "formData", | ||
118 | + "type": "string", | ||
119 | + "description": "[WMTS]图层范围"}, | ||
120 | + {"name": "layer_description", | ||
121 | + "in": "formData", | ||
122 | + "type": "string", | ||
123 | + "description": "[WMTS]图层描述"}, | ||
124 | + | ||
125 | + #WMS参数 | ||
126 | + {"name": "status", | ||
127 | + "in": "formData", | ||
128 | + "type": "string", | ||
129 | + "description": "[WMS]status"}, | ||
130 | + {"name": "username", | ||
131 | + "in": "formData", | ||
132 | + "type": "string", | ||
133 | + "description": "[WMS]username"}, | ||
134 | + {"name": "readonly", | ||
135 | + "in": "formData", | ||
136 | + "type": "string", | ||
137 | + "description": "[WMS]readonly"}, | ||
138 | + {"name": "sid", | ||
139 | + "in": "formData", | ||
140 | + "type": "string", | ||
141 | + "description": "[WMS]sid"}, | ||
142 | + {"name": "stype", | ||
143 | + "in": "formData", | ||
144 | + "type": "string", | ||
145 | + "description": "[WMS]stype"}, | ||
146 | + {"name": "ssupply", | ||
147 | + "in": "formData", | ||
148 | + "type": "string", | ||
149 | + "description": "[WMS]ssupply"}, | ||
150 | + {"name": "sctime", | ||
151 | + "in": "formData", | ||
152 | + "type": "string", | ||
153 | + "description": "[WMS]sctime"}, | ||
154 | + {"name": "company", | ||
155 | + "in": "formData", | ||
156 | + "type": "string", | ||
157 | + "description": "[WMS]company"}, | ||
158 | + {"name": "abstract", | ||
159 | + "in": "formData", | ||
160 | + "type": "string", | ||
161 | + "description": "[WMS]abstract"}, | ||
162 | + {"name": "thumbnail", | ||
163 | + "in": "formData", | ||
164 | + "type": "string", | ||
165 | + "description": "[WMS]thumbnail"}, | ||
166 | + | ||
34 | ], | 167 | ], |
35 | "responses": { | 168 | "responses": { |
36 | 200: { | 169 | 200: { |
@@ -36,4 +36,5 @@ class WMS(db.Model): | @@ -36,4 +36,5 @@ class WMS(db.Model): | ||
36 | 36 | ||
37 | layer_style = Column(Text) | 37 | layer_style = Column(Text) |
38 | 38 | ||
39 | - service_guid = Column(String,ForeignKey('dmdms_service.guid')) | ||
39 | + # service_guid = Column(String,ForeignKey('dmdms_service.guid')) | ||
40 | + service_guid = Column(String) |
@@ -2,3 +2,67 @@ | @@ -2,3 +2,67 @@ | ||
2 | #author: 4N | 2 | #author: 4N |
3 | #createtime: 2021/9/17 | 3 | #createtime: 2021/9/17 |
4 | #email: nheweijun@sina.com | 4 | #email: nheweijun@sina.com |
5 | + | ||
6 | + | ||
7 | +from app.util.component.ApiTemplate import ApiTemplate | ||
8 | +import uuid | ||
9 | +from .models import WMS | ||
10 | +from app.models import Service,db | ||
11 | + | ||
12 | +import datetime | ||
13 | +class Api(ApiTemplate): | ||
14 | + | ||
15 | + api_name = "修改WMTS服务" | ||
16 | + | ||
17 | + def process(self): | ||
18 | + | ||
19 | + | ||
20 | + | ||
21 | + # 返回结果 | ||
22 | + res = {} | ||
23 | + | ||
24 | + try: | ||
25 | + guid = self.para.get("guid") | ||
26 | + service = Service.query.filter_by(guid=guid).one_or_none() | ||
27 | + this_time = datetime.datetime.now() | ||
28 | + | ||
29 | + | ||
30 | + service_update = {"upate_time":this_time} | ||
31 | + wms_update = {"upatetime":this_time} | ||
32 | + for key in self.para.keys(): | ||
33 | + if key in ["name","alias","state","description","overview","catalog_guid"]: | ||
34 | + service_update[key] = self.para.get(key) | ||
35 | + if key in ["status","description","username","readonly", | ||
36 | + "sid","stype","ssupply","sctime","company","abstract","thumbnail","layer_style"]: | ||
37 | + wms_update[key] = self.para.get(key) | ||
38 | + if key.__eq__("name"): | ||
39 | + wms_update["service"] = self.para.get(key) | ||
40 | + | ||
41 | + | ||
42 | + | ||
43 | + wms = WMS.query.filter_by(guid=service.service_guid).one_or_none() | ||
44 | + service.update(service_update) | ||
45 | + wms.update(wms_update) | ||
46 | + | ||
47 | + db.session.commit() | ||
48 | + | ||
49 | + res["result"] = True | ||
50 | + except Exception as e: | ||
51 | + raise e | ||
52 | + | ||
53 | + return res | ||
54 | + | ||
55 | + api_doc = { | ||
56 | + "tags": ["影像接口"], | ||
57 | + "parameters": [ | ||
58 | + | ||
59 | + ], | ||
60 | + "responses": { | ||
61 | + 200: { | ||
62 | + "schema": { | ||
63 | + "properties": { | ||
64 | + } | ||
65 | + } | ||
66 | + } | ||
67 | + } | ||
68 | + } |
@@ -36,15 +36,16 @@ class Api(ApiTemplate): | @@ -36,15 +36,16 @@ class Api(ApiTemplate): | ||
36 | update_time = this_time, | 36 | update_time = this_time, |
37 | description = self.para.get("description"), | 37 | description = self.para.get("description"), |
38 | #node = Column(Integer), | 38 | #node = Column(Integer), |
39 | + node = 1 , | ||
39 | overview = "xxxx", | 40 | overview = "xxxx", |
40 | - type = self.para.get("service_type"), | 41 | + type = self.para.get("type"), |
41 | service_guid = wms_service_guid, | 42 | service_guid = wms_service_guid, |
42 | catalog_guid = self.para.get("catalog_guid") | 43 | catalog_guid = self.para.get("catalog_guid") |
43 | ) | 44 | ) |
44 | 45 | ||
45 | wms = WMS( | 46 | wms = WMS( |
46 | guid = wms_service_guid, | 47 | guid = wms_service_guid, |
47 | - name = self.para.get("name"), | 48 | + service = self.para.get("name"), |
48 | status = self.para.get("status"), | 49 | status = self.para.get("status"), |
49 | description=self.para.get("description"), | 50 | description=self.para.get("description"), |
50 | username = self.para.get("username"), | 51 | username = self.para.get("username"), |
@@ -76,6 +77,80 @@ class Api(ApiTemplate): | @@ -76,6 +77,80 @@ class Api(ApiTemplate): | ||
76 | "tags": ["WMTS接口"], | 77 | "tags": ["WMTS接口"], |
77 | "parameters": [ | 78 | "parameters": [ |
78 | 79 | ||
80 | + {"name": "name", | ||
81 | + "in": "formData", | ||
82 | + "type": "string", | ||
83 | + "required": "true", | ||
84 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
85 | + {"name": "alias", | ||
86 | + "in": "formData", | ||
87 | + "type": "string", | ||
88 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
89 | + {"name": "description", | ||
90 | + "in": "formData", | ||
91 | + "type": "string", | ||
92 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
93 | + {"name": "type", | ||
94 | + "in": "formData", | ||
95 | + "type": "string", | ||
96 | + "enum": ["WMS", "WMTS", "影像WMS", "影像WMTS"], | ||
97 | + "required": "true", | ||
98 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
99 | + {"name": "catalog_guid", | ||
100 | + "in": "formData", | ||
101 | + "type": "string", | ||
102 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
103 | + | ||
104 | + {"name": "catalog_guid", | ||
105 | + "in": "formData", | ||
106 | + "type": "string", | ||
107 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
108 | + | ||
109 | + {"name": "status", | ||
110 | + "in": "formData", | ||
111 | + "type": "string", | ||
112 | + "description": "[WMS]status"}, | ||
113 | + {"name": "username", | ||
114 | + "in": "formData", | ||
115 | + "type": "string", | ||
116 | + "description": "[WMS]username"}, | ||
117 | + {"name": "readonly", | ||
118 | + "in": "formData", | ||
119 | + "type": "string", | ||
120 | + "description": "[WMS]readonly"}, | ||
121 | + {"name": "sid", | ||
122 | + "in": "formData", | ||
123 | + "type": "string", | ||
124 | + "description": "[WMS]sid"}, | ||
125 | + {"name": "stype", | ||
126 | + "in": "formData", | ||
127 | + "type": "string", | ||
128 | + "description": "[WMS]stype"}, | ||
129 | + {"name": "ssupply", | ||
130 | + "in": "formData", | ||
131 | + "type": "string", | ||
132 | + "description": "[WMS]ssupply"}, | ||
133 | + {"name": "sctime", | ||
134 | + "in": "formData", | ||
135 | + "type": "string", | ||
136 | + "description": "[WMS]sctime"}, | ||
137 | + {"name": "company", | ||
138 | + "in": "formData", | ||
139 | + "type": "string", | ||
140 | + "description": "[WMS]company"}, | ||
141 | + {"name": "abstract", | ||
142 | + "in": "formData", | ||
143 | + "type": "string", | ||
144 | + "description": "[WMS]abstract"}, | ||
145 | + {"name": "thumbnail", | ||
146 | + "in": "formData", | ||
147 | + "type": "string", | ||
148 | + "description": "[WMS]thumbnail"}, | ||
149 | + {"name": "layer_style", | ||
150 | + "in": "formData", | ||
151 | + "type": "string", | ||
152 | + "description": "[WMS,WMTS]layer_style"}, | ||
153 | + | ||
79 | ], | 154 | ], |
80 | "responses": { | 155 | "responses": { |
81 | 200: { | 156 | 200: { |
@@ -25,12 +25,3 @@ class DataManager(BlueprintApi): | @@ -25,12 +25,3 @@ class DataManager(BlueprintApi): | ||
25 | 上传缩略图 | 25 | 上传缩略图 |
26 | """ | 26 | """ |
27 | return upload_oview.Api().result | 27 | return upload_oview.Api().result |
28 | - | ||
29 | - @staticmethod | ||
30 | - @bp.route('/UploadOverview', methods=['POST']) | ||
31 | - @swag_from(upload_oview.Api.api_doc) | ||
32 | - def api_upload_oview(): | ||
33 | - """ | ||
34 | - 上传缩略图 | ||
35 | - """ | ||
36 | - return upload_oview.Api().result |
@@ -48,6 +48,9 @@ class WMTS(db.Model): | @@ -48,6 +48,9 @@ class WMTS(db.Model): | ||
48 | #图层描述 | 48 | #图层描述 |
49 | layer_description = Column(String) | 49 | layer_description = Column(String) |
50 | 50 | ||
51 | - scheme_guid = Column(String,ForeignKey('dmap_tile_scheme.guid')) | 51 | + # scheme_guid = Column(String,ForeignKey('dmap_tile_scheme.guid')) |
52 | + # | ||
53 | + # service_guid = Column(String,ForeignKey('dmap_service.guid')) | ||
52 | 54 | ||
53 | - service_guid = Column(String,ForeignKey('dmap_service.guid')) | ||
55 | + scheme_guid = Column(String) | ||
56 | + service_guid = Column(String) |
@@ -10,6 +10,9 @@ from .models import WMTS | @@ -10,6 +10,9 @@ from .models import WMTS | ||
10 | from app.models import Service,db | 10 | from app.models import Service,db |
11 | import datetime | 11 | import datetime |
12 | import configure | 12 | import configure |
13 | +import requests | ||
14 | +from requests import Response | ||
15 | +import json | ||
13 | class Api(ApiTemplate): | 16 | class Api(ApiTemplate): |
14 | 17 | ||
15 | api_name = "注册WMTS服务" | 18 | api_name = "注册WMTS服务" |
@@ -24,25 +27,28 @@ class Api(ApiTemplate): | @@ -24,25 +27,28 @@ class Api(ApiTemplate): | ||
24 | service_guid = uuid.uuid1().__str__() | 27 | service_guid = uuid.uuid1().__str__() |
25 | wmts_service_guid = uuid.uuid1().__str__() | 28 | wmts_service_guid = uuid.uuid1().__str__() |
26 | 29 | ||
27 | - | ||
28 | - | ||
29 | service = Service( | 30 | service = Service( |
30 | guid = service_guid, | 31 | guid = service_guid, |
31 | name = self.para.get("name"), | 32 | name = self.para.get("name"), |
32 | alias = self.para.get("alias"), | 33 | alias = self.para.get("alias"), |
33 | - state = int(self.para.get("state")) if self.para.get("state") else None, | 34 | + state = 1, |
34 | create_time = this_time, | 35 | create_time = this_time, |
35 | update_time = this_time, | 36 | update_time = this_time, |
36 | description = self.para.get("description"), | 37 | description = self.para.get("description"), |
37 | - #node = Column(Integer), | 38 | + node = 1, |
38 | overview = "http://{}/API/Service/Overview/{}".format( | 39 | overview = "http://{}/API/Service/Overview/{}".format( |
39 | configure.deploy_ip_host, | 40 | configure.deploy_ip_host, |
40 | self.para.get("overview") if self.para.get("overview") else "wmts_tb.png"), | 41 | self.para.get("overview") if self.para.get("overview") else "wmts_tb.png"), |
41 | - type = self.para.get("service_type"), | 42 | + type = self.para.get("type"), |
42 | service_guid = wmts_service_guid, | 43 | service_guid = wmts_service_guid, |
43 | catalog_guid = self.para.get("catalog_guid") | 44 | catalog_guid = self.para.get("catalog_guid") |
44 | ) | 45 | ) |
45 | 46 | ||
47 | + #已存在就删除 | ||
48 | + wmts_isexist = WMTS.query.filter_by(name=self.para.get("name")).one_or_none() | ||
49 | + if wmts_isexist: | ||
50 | + db.session.delete(wmts_isexist) | ||
51 | + | ||
46 | wmts = WMTS( | 52 | wmts = WMTS( |
47 | guid = wmts_service_guid, | 53 | guid = wmts_service_guid, |
48 | name = self.para.get("name"), | 54 | name = self.para.get("name"), |
@@ -60,16 +66,25 @@ class Api(ApiTemplate): | @@ -60,16 +66,25 @@ class Api(ApiTemplate): | ||
60 | layer_extent = self.para.get("layer_extent"), | 66 | layer_extent = self.para.get("layer_extent"), |
61 | layer_description = self.para.get("layer_description"), | 67 | layer_description = self.para.get("layer_description"), |
62 | scheme_guid = self.para.get("scheme_guid"), | 68 | scheme_guid = self.para.get("scheme_guid"), |
63 | - service_guid = service_guid | 69 | + service_guid = service_guid, |
70 | + metadata_url="{}/DMap/Services/{}/MapServer/WMTSServer".format(configure.wmts_url,self.para.get("name")) | ||
64 | ) | 71 | ) |
65 | 72 | ||
66 | - | ||
67 | - #调用WMTS的注册服务接口 | ||
68 | - | ||
69 | - | ||
70 | db.session.add(service) | 73 | db.session.add(service) |
71 | db.session.add(wmts) | 74 | db.session.add(wmts) |
72 | db.session.commit() | 75 | db.session.commit() |
76 | + | ||
77 | + # 调用WMTS的注册服务接口 | ||
78 | + try: | ||
79 | + url = "{}/dmap/api/manager/updatecache?servicename={}".format(configure.wmts_url,service.name) | ||
80 | + resp:Response = requests.get(url) | ||
81 | + if not resp.json()["status"].__eq__("true"): | ||
82 | + raise Exception("调用WMTS的注册服务接口失败!") | ||
83 | + except Exception as e: | ||
84 | + db.session.delete(service) | ||
85 | + db.session.delete(wmts) | ||
86 | + db.session.commit() | ||
87 | + raise e | ||
73 | res["data"] = service_guid | 88 | res["data"] = service_guid |
74 | res["result"] = True | 89 | res["result"] = True |
75 | except Exception as e: | 90 | except Exception as e: |
@@ -80,7 +95,78 @@ class Api(ApiTemplate): | @@ -80,7 +95,78 @@ class Api(ApiTemplate): | ||
80 | api_doc = { | 95 | api_doc = { |
81 | "tags": ["WMTS接口"], | 96 | "tags": ["WMTS接口"], |
82 | "parameters": [ | 97 | "parameters": [ |
83 | - | 98 | + {"name": "name", |
99 | + "in": "formData", | ||
100 | + "type": "string", | ||
101 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
102 | + {"name": "alias", | ||
103 | + "in": "formData", | ||
104 | + "type": "string", | ||
105 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
106 | + {"name": "description", | ||
107 | + "in": "formData", | ||
108 | + "type": "string", | ||
109 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
110 | + {"name": "type", | ||
111 | + "in": "formData", | ||
112 | + "type": "string", | ||
113 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
114 | + {"name": "catalog_guid", | ||
115 | + "in": "formData", | ||
116 | + "type": "string", | ||
117 | + "description": "[WMS,WMTS,影像WMS,影像WMTS]"}, | ||
118 | + {"name": "scheme_guid", | ||
119 | + "in": "formData", | ||
120 | + "type": "string", | ||
121 | + "description": "[WMTS,影像WMTS]切片方案"}, | ||
122 | + {"name": "overview", | ||
123 | + "in": "formData", | ||
124 | + "type": "string", | ||
125 | + "description": "[WMTS]缩略图"}, | ||
126 | + {"name": "wmts_type", | ||
127 | + "in": "formData", | ||
128 | + "type": "string", | ||
129 | + "description": "[WMTS]wmts_type"}, | ||
130 | + {"name": "vendor", | ||
131 | + "in": "formData", | ||
132 | + "type": "string", | ||
133 | + "description": "[WMTS]厂商"}, | ||
134 | + {"name": "crs", | ||
135 | + "in": "formData", | ||
136 | + "type": "string", | ||
137 | + "description": "[WMTS]坐标系"}, | ||
138 | + {"name": "datasource", | ||
139 | + "in": "formData", | ||
140 | + "type": "string", | ||
141 | + "description": "[WMTS]数据路径"}, | ||
142 | + {"name": "layer_name", | ||
143 | + "in": "formData", | ||
144 | + "type": "string", | ||
145 | + "description": "[WMTS]图层名"}, | ||
146 | + {"name": "layer_alias", | ||
147 | + "in": "formData", | ||
148 | + "type": "string", | ||
149 | + "description": "[WMTS]图层别名"}, | ||
150 | + {"name": "layer_title", | ||
151 | + "in": "formData", | ||
152 | + "type": "string", | ||
153 | + "description": "[WMTS]图层标题"}, | ||
154 | + {"name": "layer_style", | ||
155 | + "in": "formData", | ||
156 | + "type": "string", | ||
157 | + "description": "[WMTS]图层样式"}, | ||
158 | + {"name": "layer_format", | ||
159 | + "in": "formData", | ||
160 | + "type": "string", | ||
161 | + "description": "[WMTS]图层format"}, | ||
162 | + {"name": "layer_extent", | ||
163 | + "in": "formData", | ||
164 | + "type": "string", | ||
165 | + "description": "[WMTS]图层范围"}, | ||
166 | + {"name": "layer_description", | ||
167 | + "in": "formData", | ||
168 | + "type": "string", | ||
169 | + "description": "[WMTS]图层描述"}, | ||
84 | ], | 170 | ], |
85 | "responses": { | 171 | "responses": { |
86 | 200: { | 172 | 200: { |
@@ -65,7 +65,7 @@ class EntryData: | @@ -65,7 +65,7 @@ class EntryData: | ||
65 | except Exception as e: | 65 | except Exception as e: |
66 | this_task.write_process("{} 任务结束!".format(e.__str__())) | 66 | this_task.write_process("{} 任务结束!".format(e.__str__())) |
67 | this_task.update({"state": -1, "process": "入库失败", "update_time": datetime.datetime.now()}) | 67 | this_task.update({"state": -1, "process": "入库失败", "update_time": datetime.datetime.now()}) |
68 | - StructurePrint.print(e.__str__(),"ERROR") | 68 | + StructurePrint().print(e.__str__(),"ERROR") |
69 | # rollback | 69 | # rollback |
70 | this_task.pg_ds.RollbackTransaction() | 70 | this_task.pg_ds.RollbackTransaction() |
71 | finally: | 71 | finally: |
@@ -79,13 +79,13 @@ class EntryData: | @@ -79,13 +79,13 @@ class EntryData: | ||
79 | i+=1 | 79 | i+=1 |
80 | if i<30: | 80 | if i<30: |
81 | shutil.rmtree(dir_path,True) | 81 | shutil.rmtree(dir_path,True) |
82 | - StructurePrint.print("删除文件成功!") | 82 | + StructurePrint().print("删除文件成功!") |
83 | else: | 83 | else: |
84 | raise Exception("找不到文件!") | 84 | raise Exception("找不到文件!") |
85 | 85 | ||
86 | except Exception as e: | 86 | except Exception as e: |
87 | - StructurePrint.print(e.__str__(), "ERROR") | ||
88 | - StructurePrint.print("删除文件失败!","ERROR") | 87 | + StructurePrint().print(e.__str__(), "ERROR") |
88 | + StructurePrint().print("删除文件失败!","ERROR") | ||
89 | 89 | ||
90 | def entry_shp(self,data_path,this_task): | 90 | def entry_shp(self,data_path,this_task): |
91 | ''' | 91 | ''' |
@@ -186,7 +186,7 @@ class EntryData: | @@ -186,7 +186,7 @@ class EntryData: | ||
186 | for feature in layer: | 186 | for feature in layer: |
187 | count+=1 | 187 | count+=1 |
188 | if count%10000==0: | 188 | if count%10000==0: |
189 | - StructurePrint.print("{}图层已入库{}个对象".format(new_layer_name,count)) | 189 | + StructurePrint().print("{}图层已入库{}个对象".format(new_layer_name,count)) |
190 | # print(time.time()-this_time) | 190 | # print(time.time()-this_time) |
191 | this_time=time.time() | 191 | this_time=time.time() |
192 | geo :Geometry = feature.GetGeometryRef() | 192 | geo :Geometry = feature.GetGeometryRef() |
@@ -194,7 +194,7 @@ class EntryData: | @@ -194,7 +194,7 @@ class EntryData: | ||
194 | if geo is not None: | 194 | if geo is not None: |
195 | if geo.IsEmpty(): | 195 | if geo.IsEmpty(): |
196 | this_task.write_process("FID:{}要素的空间字段为空,跳过该要素!".format(feature.GetFID())) | 196 | this_task.write_process("FID:{}要素的空间字段为空,跳过该要素!".format(feature.GetFID())) |
197 | - StructurePrint.print("FID:{}要素的空间字段为空,跳过该要素!".format(feature.GetFID()),"WARN") | 197 | + StructurePrint().print("FID:{}要素的空间字段为空,跳过该要素!".format(feature.GetFID()),"WARN") |
198 | continue | 198 | continue |
199 | out_feature: Feature = copy.copy(feature) | 199 | out_feature: Feature = copy.copy(feature) |
200 | 200 | ||
@@ -210,7 +210,7 @@ class EntryData: | @@ -210,7 +210,7 @@ class EntryData: | ||
210 | except Exception as e: | 210 | except Exception as e: |
211 | # this_task.pg_ds.RollbackTransaction() | 211 | # this_task.pg_ds.RollbackTransaction() |
212 | this_task.write_process("{}入库失败,数据回滚!原因:{}".format(new_layer_name,e.__str__())) | 212 | this_task.write_process("{}入库失败,数据回滚!原因:{}".format(new_layer_name,e.__str__())) |
213 | - StructurePrint.print("{}入库失败,数据回滚!原因:{}".format(new_layer_name,e.__str__()), "error") | 213 | + StructurePrint().print("{}入库失败,数据回滚!原因:{}".format(new_layer_name,e.__str__()), "error") |
214 | return False,new_layer_name | 214 | return False,new_layer_name |
215 | # finally: | 215 | # finally: |
216 | 216 |
@@ -87,7 +87,7 @@ class EntryDataVacuate: | @@ -87,7 +87,7 @@ class EntryDataVacuate: | ||
87 | except Exception as e: | 87 | except Exception as e: |
88 | this_task.write_process("{} 任务结束!".format(e.__str__())) | 88 | this_task.write_process("{} 任务结束!".format(e.__str__())) |
89 | this_task.update({"state": -1, "process": "入库失败", "update_time": datetime.datetime.now()}) | 89 | this_task.update({"state": -1, "process": "入库失败", "update_time": datetime.datetime.now()}) |
90 | - StructurePrint.print(e.__str__(),"ERROR") | 90 | + StructurePrint().print(e.__str__(),"ERROR") |
91 | # rollback | 91 | # rollback |
92 | this_task.rollback() | 92 | this_task.rollback() |
93 | finally: | 93 | finally: |
@@ -101,13 +101,13 @@ class EntryDataVacuate: | @@ -101,13 +101,13 @@ class EntryDataVacuate: | ||
101 | i+=1 | 101 | i+=1 |
102 | if i<30: | 102 | if i<30: |
103 | shutil.rmtree(dir_path,True) | 103 | shutil.rmtree(dir_path,True) |
104 | - StructurePrint.print("删除文件成功!") | 104 | + StructurePrint().print("删除文件成功!") |
105 | else: | 105 | else: |
106 | raise Exception("找不到文件!") | 106 | raise Exception("找不到文件!") |
107 | 107 | ||
108 | except Exception as e: | 108 | except Exception as e: |
109 | - StructurePrint.print(e.__str__(), "ERROR") | ||
110 | - StructurePrint.print("删除文件失败!","ERROR") | 109 | + StructurePrint().print(e.__str__(), "ERROR") |
110 | + StructurePrint().print("删除文件失败!","ERROR") | ||
111 | 111 | ||
112 | 112 | ||
113 | def entry_shp(self,data_path,this_task,meta): | 113 | def entry_shp(self,data_path,this_task,meta): |
@@ -209,7 +209,7 @@ class EntryDataVacuate: | @@ -209,7 +209,7 @@ class EntryDataVacuate: | ||
209 | for feature in layer: | 209 | for feature in layer: |
210 | count+=1 | 210 | count+=1 |
211 | if count%10000==0: | 211 | if count%10000==0: |
212 | - StructurePrint.print("{}图层已入库{}个对象".format(new_layer_name,count)) | 212 | + StructurePrint().print("{}图层已入库{}个对象".format(new_layer_name,count)) |
213 | # print(time.time()-this_time) | 213 | # print(time.time()-this_time) |
214 | #this_time=time.time() | 214 | #this_time=time.time() |
215 | geo :Geometry = feature.GetGeometryRef() | 215 | geo :Geometry = feature.GetGeometryRef() |
@@ -217,7 +217,7 @@ class EntryDataVacuate: | @@ -217,7 +217,7 @@ class EntryDataVacuate: | ||
217 | if geo is not None: | 217 | if geo is not None: |
218 | if geo.IsEmpty(): | 218 | if geo.IsEmpty(): |
219 | this_task.write_process("FID:{}要素的空间字段为空,跳过该要素!".format(feature.GetFID())) | 219 | this_task.write_process("FID:{}要素的空间字段为空,跳过该要素!".format(feature.GetFID())) |
220 | - StructurePrint.print("FID:{}要素的空间字段为空,跳过该要素!".format(feature.GetFID()),"WARN") | 220 | + StructurePrint().print("FID:{}要素的空间字段为空,跳过该要素!".format(feature.GetFID()),"WARN") |
221 | continue | 221 | continue |
222 | 222 | ||
223 | out_feature: Feature = copy.copy(feature) | 223 | out_feature: Feature = copy.copy(feature) |
@@ -248,7 +248,7 @@ class EntryDataVacuate: | @@ -248,7 +248,7 @@ class EntryDataVacuate: | ||
248 | except Exception as e: | 248 | except Exception as e: |
249 | 249 | ||
250 | this_task.write_process("{}入库失败,数据回滚!原因:{}".format(new_layer_name,e.__str__())) | 250 | this_task.write_process("{}入库失败,数据回滚!原因:{}".format(new_layer_name,e.__str__())) |
251 | - StructurePrint.print("{}入库失败,数据回滚!原因:{}".format(new_layer_name,e.__str__()), "error") | 251 | + StructurePrint().print("{}入库失败,数据回滚!原因:{}".format(new_layer_name,e.__str__()), "error") |
252 | print(traceback.format_exc()) | 252 | print(traceback.format_exc()) |
253 | # 抽稀回滚 | 253 | # 抽稀回滚 |
254 | # vacuate_process.rollback() | 254 | # vacuate_process.rollback() |
@@ -440,7 +440,7 @@ class VacuateProcess: | @@ -440,7 +440,7 @@ class VacuateProcess: | ||
440 | p_x = (extent[1]-extent[0])/10.0 | 440 | p_x = (extent[1]-extent[0])/10.0 |
441 | p_y = (extent[3] - extent[2]) / 10.0 | 441 | p_y = (extent[3] - extent[2]) / 10.0 |
442 | fill_precent=0 | 442 | fill_precent=0 |
443 | - StructurePrint.print("判断疏密") | 443 | + StructurePrint().print("判断疏密") |
444 | for ix in range(10): | 444 | for ix in range(10): |
445 | for iy in range(10): | 445 | for iy in range(10): |
446 | grid_extent = [extent[0]+ix*p_x,extent[0]+ix*p_x+p_x,extent[2]+iy*p_y,extent[2]+iy*p_y+p_y] | 446 | grid_extent = [extent[0]+ix*p_x,extent[0]+ix*p_x+p_x,extent[2]+iy*p_y,extent[2]+iy*p_y+p_y] |
@@ -453,7 +453,7 @@ class VacuateProcess: | @@ -453,7 +453,7 @@ class VacuateProcess: | ||
453 | fill_precent += 1 | 453 | fill_precent += 1 |
454 | 454 | ||
455 | print(fill_precent) | 455 | print(fill_precent) |
456 | - StructurePrint.print("判断疏密结束") | 456 | + StructurePrint().print("判断疏密结束") |
457 | 457 | ||
458 | layer.SetSpatialFilter(None) | 458 | layer.SetSpatialFilter(None) |
459 | layer.ResetReading() | 459 | layer.ResetReading() |
@@ -155,6 +155,19 @@ class GeometryAdapter: | @@ -155,6 +155,19 @@ class GeometryAdapter: | ||
155 | return poly | 155 | return poly |
156 | 156 | ||
157 | @classmethod | 157 | @classmethod |
158 | + def bbox_2_polygon(cls,bbox): | ||
159 | + ring = ogr.Geometry(ogr.wkbLinearRing) | ||
160 | + ring.AddPoint(bbox[0], bbox[1]) | ||
161 | + ring.AddPoint(bbox[0], bbox[3]) | ||
162 | + ring.AddPoint(bbox[2], bbox[3]) | ||
163 | + ring.AddPoint(bbox[2], bbox[1]) | ||
164 | + ring.AddPoint(bbox[0], bbox[1]) | ||
165 | + # Create polygon | ||
166 | + poly = ogr.Geometry(ogr.wkbPolygon) | ||
167 | + poly.AddGeometry(ring) | ||
168 | + return poly | ||
169 | + | ||
170 | + @classmethod | ||
158 | def tuple_2_point(cls,tup): | 171 | def tuple_2_point(cls,tup): |
159 | point = ogr.Geometry(ogr.wkbPoint) | 172 | point = ogr.Geometry(ogr.wkbPoint) |
160 | point.AddPoint(tup[0], tup[1]) | 173 | point.AddPoint(tup[0], tup[1]) |
@@ -51,8 +51,8 @@ class SliceScheme: | @@ -51,8 +51,8 @@ class SliceScheme: | ||
51 | col = int(col) | 51 | col = int(col) |
52 | detaxy = parameter.get(str(level)).get("resolution")* parameter.get("cols") | 52 | detaxy = parameter.get(str(level)).get("resolution")* parameter.get("cols") |
53 | 53 | ||
54 | - minx = detaxy*col + parameter.get("x") | ||
55 | - maxy = -detaxy*row +parameter.get("y") | 54 | + minx = detaxy * col + parameter.get("x") |
55 | + maxy = -detaxy * row + parameter.get("y") | ||
56 | maxx = detaxy + minx | 56 | maxx = detaxy + minx |
57 | miny = -detaxy + maxy | 57 | miny = -detaxy + maxy |
58 | 58 |
@@ -5,15 +5,42 @@ | @@ -5,15 +5,42 @@ | ||
5 | import datetime | 5 | import datetime |
6 | import os | 6 | import os |
7 | 7 | ||
8 | +import logging | ||
9 | + | ||
8 | class StructurePrint: | 10 | class StructurePrint: |
9 | 11 | ||
12 | + # 单例模式作为打印 | ||
13 | + singleton = None | ||
14 | + f = None | ||
15 | + | ||
16 | + | ||
17 | + def __new__(cls, *args, **kwargs): | ||
18 | + if not cls.singleton: | ||
19 | + cls.singleton = super().__new__(cls) | ||
20 | + return cls.singleton | ||
21 | + | ||
10 | log_file = os.path.join(os.path.dirname( | 22 | log_file = os.path.join(os.path.dirname( |
11 | os.path.dirname( | 23 | os.path.dirname( |
12 | os.path.dirname( | 24 | os.path.dirname( |
13 | os.path.dirname( | 25 | os.path.dirname( |
14 | os.path.realpath(__file__))))), "logs", "log.txt") | 26 | os.path.realpath(__file__))))), "logs", "log.txt") |
15 | - @classmethod | ||
16 | - def print(cls,mes, type="info"): | ||
17 | - with open(cls.log_file,"a",encoding="utf-8") as f: | 27 | + |
28 | + def __init__(self): | ||
29 | + if not self.f: | ||
30 | + self.f = open(self.log_file,"a",encoding="utf-8") | ||
31 | + | ||
32 | + | ||
33 | + # def print(self,mes, type="info"): | ||
34 | + # message = "[{}] {} {}\n".format(type.upper(), datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), mes) | ||
35 | + # self.f.write(message) | ||
36 | + # dd =1 | ||
37 | + | ||
38 | + | ||
39 | + def print(self,mes, type="info"): | ||
40 | + with open(self.log_file,"a",encoding="utf-8") as f: | ||
18 | message = "[{}] {} {}\n".format(type.upper(), datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), mes) | 41 | message = "[{}] {} {}\n".format(type.upper(), datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), mes) |
19 | f.write(message) | 42 | f.write(message) |
43 | + | ||
44 | + | ||
45 | + | ||
46 | + |
@@ -4,11 +4,11 @@ | @@ -4,11 +4,11 @@ | ||
4 | deploy_ip_host = "172.26.40.105:8840" | 4 | deploy_ip_host = "172.26.40.105:8840" |
5 | # 系统数据库 | 5 | # 系统数据库 |
6 | 6 | ||
7 | -SQLALCHEMY_DATABASE_URI = "postgresql://postgres:chinadci@172.26.60.100:5432/dmap_manager" | 7 | +SQLALCHEMY_DATABASE_URI = "postgresql://postgres:chinadci@172.26.60.100:5432/dmap_manager_test" |
8 | 8 | ||
9 | # 指定精华表所在位置(必须为空间库),设置为None则存放在各自的实体库中 | 9 | # 指定精华表所在位置(必须为空间库),设置为None则存放在各自的实体库中 |
10 | -VACUATE_DB_URI = None | ||
11 | -# VACUATE_DB_URI = SQLALCHEMY_DATABASE_URI | 10 | +#VACUATE_DB_URI = None |
11 | +VACUATE_DB_URI = SQLALCHEMY_DATABASE_URI | ||
12 | 12 | ||
13 | # 部署模式cluster,standalone | 13 | # 部署模式cluster,standalone |
14 | deployment_mode = "cluster" | 14 | deployment_mode = "cluster" |
@@ -17,6 +17,10 @@ application_name = "master" | @@ -17,6 +17,10 @@ application_name = "master" | ||
17 | 17 | ||
18 | zookeeper = "172.26.99.168:2181" | 18 | zookeeper = "172.26.99.168:2181" |
19 | 19 | ||
20 | +#WMTS服务器 | ||
21 | +wmts_url = "http://172.26.99.160:6080" | ||
22 | + | ||
23 | + | ||
20 | # 固定配置不需要修改 | 24 | # 固定配置不需要修改 |
21 | swagger_configure = {"title": "DMapManager"} | 25 | swagger_configure = {"title": "DMapManager"} |
22 | entry_data_thread = 3 | 26 | entry_data_thread = 3 |
1 | #! /bin/sh | 1 | #! /bin/sh |
2 | - | 2 | +dn="dmapmanager" |
3 | #停止容器 | 3 | #停止容器 |
4 | echo "正在关闭容器..." | 4 | echo "正在关闭容器..." |
5 | -docker stop dmapmanager | ||
6 | -docker rm dmapmanager | 5 | +docker stop $dn |
6 | +docker rm $dn | ||
7 | 7 | ||
8 | curPath=$(readlink -f $(dirname $0)) | 8 | curPath=$(readlink -f $(dirname $0)) |
9 | 9 | ||
@@ -24,7 +24,7 @@ fi | @@ -24,7 +24,7 @@ fi | ||
24 | #启动容器和apache | 24 | #启动容器和apache |
25 | echo "正在启动容器..." | 25 | echo "正在启动容器..." |
26 | set="--privileged=true -e TZ="Asia/Shanghai" --restart=always -e ALLOW_IP_RANGE=0.0.0.0/0" | 26 | set="--privileged=true -e TZ="Asia/Shanghai" --restart=always -e ALLOW_IP_RANGE=0.0.0.0/0" |
27 | -docker run -d --name dmapmanager $set -p $port:80 -v $curPath:/usr/src/app -v $curPath/httpd.conf:/etc/httpd/conf/httpd.conf dci/dmapmanager:4.0 /usr/sbin/init | ||
28 | -docker exec -d dmapmanager systemctl start httpd | 27 | +docker run -d --name $dn $set -p $port:80 -v $curPath:/usr/src/app -v $curPath/httpd.conf:/etc/httpd/conf/httpd.conf dci/dmapmanager:4.0 /usr/sbin/init |
28 | +docker exec -d $dn systemctl start httpd | ||
29 | sleep 5 | 29 | sleep 5 |
30 | curl localhost:$port/release | 30 | curl localhost:$port/release |
1 | #! /bin/bash | 1 | #! /bin/bash |
2 | -docker stop dmapmanager | ||
3 | -docker rm dmapmanager | 2 | +dn="dmapmanager" |
3 | +#停止容器 | ||
4 | +echo "正在关闭容器..." | ||
5 | +docker stop $dn | ||
6 | +docker rm $dn | ||
4 | curPath=$(readlink -f "$(dirname "$0")") | 7 | curPath=$(readlink -f "$(dirname "$0")") |
5 | #设置端口 | 8 | #设置端口 |
6 | port="" | 9 | port="" |
@@ -11,7 +14,7 @@ else | @@ -11,7 +14,7 @@ else | ||
11 | port=$1 | 14 | port=$1 |
12 | echo "端口设置为$1 ..." | 15 | echo "端口设置为$1 ..." |
13 | fi | 16 | fi |
14 | -docker run -d --name dmapmanager -e TZ="Asia/Shanghai" --restart=always -e ALLOW_IP_RANGE=0.0.0.0/0 -p $port:8840 -v $curPath:/usr/src/app -w /usr/src/app dci/dmapdms:4.0 gunicorn -c gun_conf.py run:app | 17 | +docker run -d --name $dn -e TZ="Asia/Shanghai" --restart=always -e ALLOW_IP_RANGE=0.0.0.0/0 -p $port:8840 -v $curPath:/usr/src/app -w /usr/src/app dci/dmapdms:4.0 gunicorn -c gun_conf.py run:app |
15 | # 清除未完成的任务任务 | 18 | # 清除未完成的任务任务 |
16 | sleep 5 | 19 | sleep 5 |
17 | curl localhost:$port/release | 20 | curl localhost:$port/release |
1 | #! /bin/bash | 1 | #! /bin/bash |
2 | -docker stop dmapmanager | ||
3 | -docker rm dmapmanager | 2 | +dn="dmapmanager" |
3 | +#停止容器 | ||
4 | +echo "正在关闭容器..." | ||
5 | +docker stop $dn | ||
6 | +docker rm $dn | ||
7 | + | ||
4 | curPath=$(readlink -f "$(dirname "$0")") | 8 | curPath=$(readlink -f "$(dirname "$0")") |
5 | #设置端口 | 9 | #设置端口 |
6 | port="" | 10 | port="" |
@@ -12,7 +16,7 @@ else | @@ -12,7 +16,7 @@ else | ||
12 | echo "端口设置为$1 ..." | 16 | echo "端口设置为$1 ..." |
13 | fi | 17 | fi |
14 | 18 | ||
15 | -docker run -d --name dmapmanager -e TZ="Asia/Shanghai" --restart=always -e ALLOW_IP_RANGE=0.0.0.0/0 -p $port:8840 -v $curPath:/usr/src/app -w /usr/src/app dci/dmapdms:3.0 python3 ./run.py | 19 | +docker run -d --name $dn -e TZ="Asia/Shanghai" --restart=always -e ALLOW_IP_RANGE=0.0.0.0/0 -p $port:8840 -v $curPath:/usr/src/app -w /usr/src/app dci/dmapdms:3.0 python3 ./run.py |
16 | # 清除未完成的任务任务 | 20 | # 清除未完成的任务任务 |
17 | sleep 5 | 21 | sleep 5 |
18 | curl localhost:$port/release | 22 | curl localhost:$port/release |
请
注册
或
登录
后发表评论