正在显示
10 个修改的文件
包含
467 行增加
和
270 行删除
... | ... | @@ -94,17 +94,21 @@ class Api(ApiTemplate): |
94 | 94 | this_time = datetime.datetime.now() |
95 | 95 | |
96 | 96 | pg_ds: DataSource = PGUtil.open_pg_data_source(1, DES.decode(database.sqlalchemy_uri)) |
97 | + db_session: Session = PGUtil.get_db_session(DES.decode(database.sqlalchemy_uri)) | |
98 | + | |
97 | 99 | db_tuple = PGUtil.get_info_from_sqlachemy_uri(DES.decode(database.sqlalchemy_uri)) |
98 | 100 | |
99 | 101 | # 注册空间表 |
100 | - spatial_table_name,tables = self.register_spatial_table(pg_ds, database, this_time,db_tuple) | |
102 | + spatial_table_name,tables = self.register_spatial_table(pg_ds,db_session, database, this_time,db_tuple) | |
101 | 103 | |
102 | 104 | #注册普通表 |
103 | - self.register_common_table(this_time,database,spatial_table_name,db_tuple) | |
105 | + self.register_common_table(db_session,this_time,database,spatial_table_name,db_tuple) | |
106 | + | |
107 | + db_session.close() | |
104 | 108 | pg_ds.Destroy() |
105 | 109 | |
106 | 110 | |
107 | - def register_spatial_table(self,pg_ds,database,this_time,db_tuple): | |
111 | + def register_spatial_table(self,pg_ds,db_session,database,this_time,db_tuple): | |
108 | 112 | spatial_table_name =[] |
109 | 113 | tables=[] |
110 | 114 | for i in range(pg_ds.GetLayerCount()): |
... | ... | @@ -122,24 +126,46 @@ class Api(ApiTemplate): |
122 | 126 | continue |
123 | 127 | |
124 | 128 | # 没有权限的表跳过 |
125 | - if not PGUtil.check_table_privilege(l_name,"SELECT",db_tuple[0],pg_ds): | |
126 | - StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0],l_name),"warn") | |
129 | + # if not PGUtil.check_table_privilege(l_name,"SELECT",db_tuple[0],pg_ds): | |
130 | + # StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0],l_name),"warn") | |
131 | + # continue | |
132 | + | |
133 | + if not SQLUtil.check_table_privilege(l_name, "SELECT", db_tuple[0], db_session): | |
134 | + StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], l_name), "warn") | |
127 | 135 | continue |
128 | 136 | |
129 | 137 | # 范围统计和数量统计以100w为界限 |
130 | - query_count_layer: Layer = pg_ds.ExecuteSQL( | |
131 | - '''SELECT reltuples::bigint AS ec FROM pg_class WHERE oid = 'public."{}"'::regclass'''.format(l_name)) | |
132 | 138 | |
133 | - feature_count = query_count_layer.GetFeature(0).GetField("ec") | |
139 | + # query_count_layer: Layer = pg_ds.ExecuteSQL( | |
140 | + # '''SELECT reltuples::bigint AS ec FROM pg_class WHERE oid = 'public."{}"'::regclass'''.format(l_name)) | |
141 | + # | |
142 | + # feature_count = query_count_layer.GetFeature(0).GetField("ec") | |
143 | + | |
144 | + query_count_layer = db_session.execute( | |
145 | + '''SELECT reltuples::bigint AS ec FROM pg_class WHERE oid = 'public."{}"'::regclass'''.format( | |
146 | + l_name)).fetchone() | |
147 | + feature_count = query_count_layer[0] | |
148 | + | |
149 | + | |
134 | 150 | # 要素少于100w可以精确统计 |
135 | - if feature_count < 1000000: | |
151 | + if feature_count < 100000: | |
136 | 152 | feature_count = layer.GetFeatureCount() |
137 | 153 | ext = layer.GetExtent() |
138 | 154 | else: |
139 | - query_ext_layer: Layer = pg_ds.ExecuteSQL( | |
140 | - "select geometry(ST_EstimatedExtent('public', '{}','{}'))".format(l_name, | |
141 | - layer.GetGeometryColumn())) | |
142 | - ext = query_ext_layer.GetExtent() | |
155 | + # query_ext_layer: Layer = pg_ds.ExecuteSQL( | |
156 | + # "select geometry(ST_EstimatedExtent('public', '{}','{}'))".format(l_name, | |
157 | + # layer.GetGeometryColumn())) | |
158 | + # ext = query_ext_layer.GetExtent() | |
159 | + | |
160 | + try: | |
161 | + ext = db_session.execute( | |
162 | + "select st_xmin(box3d),st_xmax(box3d),st_ymin(box3d),st_ymax(box3d) from (select box3d(geometry(ST_EstimatedExtent('public', '{}','{}')))) as b".format( | |
163 | + l_name, | |
164 | + layer.GetGeometryColumn())).fetchone() | |
165 | + except: | |
166 | + db_session.rollback() | |
167 | + ext = layer.GetExtent() | |
168 | + | |
143 | 169 | if ext[0] < 360: |
144 | 170 | ext = [round(e, 6) for e in ext] |
145 | 171 | else: |
... | ... | @@ -157,6 +183,7 @@ class Api(ApiTemplate): |
157 | 183 | name=layer.GetName(), create_time=this_time, update_time=this_time, |
158 | 184 | table_type=GeometryAdapter.get_table_type(geom_type), |
159 | 185 | extent=extent, |
186 | + creator=self.para.get("creator"), | |
160 | 187 | feature_count=feature_count |
161 | 188 | ) |
162 | 189 | |
... | ... | @@ -176,14 +203,14 @@ class Api(ApiTemplate): |
176 | 203 | |
177 | 204 | spatial_table_name.append(layer.GetName()) |
178 | 205 | except: |
179 | - StructurePrint().print("表{}注册失败!".format(l_name), "warn") | |
206 | + StructurePrint().print("空间表{}注册失败!".format(l_name), "warn") | |
207 | + db_session.rollback() | |
180 | 208 | continue |
181 | 209 | return spatial_table_name,tables |
182 | 210 | |
183 | 211 | |
184 | - def register_common_table(self,this_time,database,spatial_table_name,db_tuple): | |
212 | + def register_common_table(self,db_session,this_time,database,spatial_table_name,db_tuple): | |
185 | 213 | # 注册普通表 |
186 | - db_session: Session = PGUtil.get_db_session(DES.decode(database.sqlalchemy_uri)) | |
187 | 214 | |
188 | 215 | # 只注册public中的表 |
189 | 216 | result = db_session.execute( |
... | ... | @@ -191,50 +218,56 @@ class Api(ApiTemplate): |
191 | 218 | |
192 | 219 | for re in result: |
193 | 220 | table_name = re[0] |
194 | - if table_name not in spatial_table_name: | |
195 | - | |
196 | - # 没有权限的表跳过 | |
197 | - if not SQLUtil.check_table_privilege(table_name, "SELECT", db_tuple[0], db_session): | |
198 | - StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0],table_name), "warn") | |
199 | - continue | |
200 | - | |
201 | - table_guid = uuid.uuid1().__str__() | |
202 | - | |
203 | - count = SQLUtil.get_table_count(table_name,db_session) | |
204 | - | |
205 | - table = Table(guid=table_guid, | |
206 | - database_guid=database.guid, | |
207 | - # alias=layer.GetName(), | |
208 | - name=table_name, create_time=this_time, update_time=this_time, | |
209 | - table_type=0, | |
210 | - feature_count=count | |
211 | - ) | |
212 | - | |
213 | - db.session.add(table) | |
221 | + try: | |
222 | + if table_name not in spatial_table_name: | |
223 | + | |
224 | + # 没有权限的表跳过 | |
225 | + if not SQLUtil.check_table_privilege(table_name, "SELECT", db_tuple[0], db_session): | |
226 | + StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0],table_name), "warn") | |
227 | + continue | |
228 | + | |
229 | + table_guid = uuid.uuid1().__str__() | |
230 | + | |
231 | + count = SQLUtil.get_table_count(table_name,db_session) | |
232 | + | |
233 | + table = Table(guid=table_guid, | |
234 | + database_guid=database.guid, | |
235 | + # alias=layer.GetName(), | |
236 | + name=table_name, create_time=this_time, update_time=this_time, | |
237 | + table_type=0, | |
238 | + creator=self.para.get("creator"), | |
239 | + feature_count=count | |
240 | + ) | |
241 | + | |
242 | + db.session.add(table) | |
243 | + | |
244 | + sql = ''' | |
245 | + SELECT | |
246 | + a.attnum, | |
247 | + a.attname AS field | |
248 | + FROM | |
249 | + pg_class c, | |
250 | + pg_attribute a, | |
251 | + pg_type t | |
252 | + WHERE | |
253 | + c.relname = '{}' | |
254 | + and a.attnum > 0 | |
255 | + and a.attrelid = c.oid | |
256 | + and a.atttypid = t.oid | |
257 | + ORDER BY a.attnum | |
258 | + '''.format(table_name) | |
259 | + | |
260 | + cols = db_session.execute(sql).fetchall() | |
261 | + for col in cols: | |
262 | + column = Columns(guid=uuid.uuid1().__str__(), table_guid=table_guid, | |
263 | + name=col[1], create_time=this_time, update_time=this_time) | |
264 | + db.session.add(column) | |
265 | + except: | |
266 | + StructurePrint().print("非空间表{}注册失败!".format(table_name), "warn") | |
267 | + db_session.rollback() | |
268 | + continue | |
214 | 269 | |
215 | - sql = ''' | |
216 | - SELECT | |
217 | - a.attnum, | |
218 | - a.attname AS field | |
219 | - FROM | |
220 | - pg_class c, | |
221 | - pg_attribute a, | |
222 | - pg_type t | |
223 | - WHERE | |
224 | - c.relname = '{}' | |
225 | - and a.attnum > 0 | |
226 | - and a.attrelid = c.oid | |
227 | - and a.atttypid = t.oid | |
228 | - ORDER BY a.attnum | |
229 | - '''.format(table_name) | |
230 | - | |
231 | - cols = db_session.execute(sql).fetchall() | |
232 | - for col in cols: | |
233 | - column = Columns(guid=uuid.uuid1().__str__(), table_guid=table_guid, | |
234 | - name=col[1], create_time=this_time, update_time=this_time) | |
235 | - db.session.add(column) | |
236 | 270 | db_session.commit() |
237 | - db_session.close() | |
238 | 271 | |
239 | 272 | |
240 | 273 | def regiser_vacuate_table(self,pg_ds,tables,db_tuple): |
... | ... | @@ -244,8 +277,6 @@ class Api(ApiTemplate): |
244 | 277 | layer:Layer = pg_ds.GetLayer(i) |
245 | 278 | l_name = layer.GetName() |
246 | 279 | |
247 | - | |
248 | - | |
249 | 280 | if l_name.__contains__("_vacuate_"): |
250 | 281 | |
251 | 282 | base_layer_name=l_name.split("_vacuate_")[1] | ... | ... |
... | ... | @@ -5,7 +5,7 @@ |
5 | 5 | from flasgger import swag_from |
6 | 6 | from flask import Blueprint |
7 | 7 | from app.util import BlueprintApi |
8 | - | |
8 | +from app.modules.data.models import Task | |
9 | 9 | from flask import send_from_directory |
10 | 10 | import os |
11 | 11 | from . import data_download_task |
... | ... | @@ -13,9 +13,15 @@ from . import get_meta |
13 | 13 | from . import data_entry_by_meta |
14 | 14 | from . import get_data_list |
15 | 15 | from . import data_entry_simple |
16 | +from . import data_download | |
16 | 17 | import configure |
18 | +from flask import abort | |
17 | 19 | from app.decorators.auth_decorator import auth_decorator |
18 | 20 | import os |
21 | +from app.util.component.ParameterUtil import ParameterUtil | |
22 | +from app.modules.auth.models import OAuth2Token,User,db | |
23 | +import configure | |
24 | + | |
19 | 25 | class DataManager(BlueprintApi): |
20 | 26 | |
21 | 27 | bp:Blueprint = Blueprint("DataTool", __name__, url_prefix="/API/IO") |
... | ... | @@ -23,15 +29,11 @@ class DataManager(BlueprintApi): |
23 | 29 | |
24 | 30 | @staticmethod |
25 | 31 | @bp.route('/Download/<dir>/<file>', methods=['GET']) |
26 | - @auth_decorator(configure.DataPermission) | |
27 | - def table_download_file(dir,file): | |
28 | - | |
29 | - parent = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) | |
30 | - dirpath = os.path.join(parent,"file_tmp",dir) | |
31 | - return send_from_directory(dirpath, filename=file, as_attachment=True) | |
32 | + @swag_from(data_download.Api.api_doc) | |
33 | + def data_download(dir,file): | |
34 | + api = data_download.Api(dir,file) | |
35 | + return api.result | |
32 | 36 | |
33 | - # dirpath = os.path.join(parent, "file_tmp") | |
34 | - # return send_from_directory(dirpath, filename=file, as_attachment=True) | |
35 | 37 | |
36 | 38 | |
37 | 39 | @staticmethod | ... | ... |
app/modules/data/io/data_download.py
0 → 100644
1 | +# coding=utf-8 | |
2 | +#author: 4N | |
3 | +#createtime: 2020/11/27 | |
4 | +#email: nheweijun@sina.com | |
5 | + | |
6 | + | |
7 | +from flask import abort,send_from_directory | |
8 | +from app.modules.auth.models import OAuth2Token,User,db | |
9 | +from app.modules.data.models import Task | |
10 | +import os | |
11 | +from app.util.component.ApiTemplate import ApiTemplate | |
12 | +import configure | |
13 | + | |
14 | +class Api(ApiTemplate): | |
15 | + | |
16 | + api_name = "下载" | |
17 | + | |
18 | + def __init__(self,dirname,file): | |
19 | + super().__init__() | |
20 | + self.dirname = dirname | |
21 | + self.file = file | |
22 | + | |
23 | + | |
24 | + def process(self): | |
25 | + | |
26 | + parent = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) | |
27 | + dirpath = os.path.join(parent, "file_tmp", self.dirname) | |
28 | + | |
29 | + if configure.PermissionActive: | |
30 | + token = self.para.get("token") | |
31 | + if not token: | |
32 | + abort(401) | |
33 | + task_guid = self.para.get("task_guid") | |
34 | + task = Task.query.filter_by(guid=task_guid).one_or_none() | |
35 | + if not task: | |
36 | + raise Exception("任务不存在!") | |
37 | + | |
38 | + user = User.query.join(OAuth2Token).filter(OAuth2Token.access_token == token).one_or_none() | |
39 | + if not user: | |
40 | + abort(403) | |
41 | + if user.username != task.creator: | |
42 | + if user.username != "admin": | |
43 | + abort(403) | |
44 | + if not os.path.exists(os.path.join(dirpath,self.file)): | |
45 | + raise Exception("数据不不存在了!") | |
46 | + | |
47 | + return send_from_directory(dirpath, filename=self.file, as_attachment=True) | |
48 | + | |
49 | + | |
50 | + api_doc={ | |
51 | + "tags":["IO接口"], | |
52 | + "description":"下载数据", | |
53 | + "parameters":[ | |
54 | + {"name": "token", | |
55 | + "in": "formData", | |
56 | + "type": "string","required":"true" | |
57 | + }, | |
58 | + {"name": "task_guid", | |
59 | + "in": "formData", | |
60 | + "type": "string","required":"true" | |
61 | + } | |
62 | + ], | |
63 | + "responses":{ | |
64 | + 200:{ | |
65 | + "schema":{ | |
66 | + "properties":{ | |
67 | + "content":{ | |
68 | + "type": "string", | |
69 | + "description": "The name of the user" | |
70 | + } | |
71 | + } | |
72 | + } | |
73 | + } | |
74 | + } | |
75 | + | |
76 | +} | |
77 | + | |
78 | + | ... | ... |
... | ... | @@ -35,7 +35,7 @@ class Api(ApiTemplate): |
35 | 35 | # 初始化task |
36 | 36 | task_guid = uuid.uuid1().__str__() |
37 | 37 | |
38 | - refresh_process = multiprocessing.Process(target=self.table_refresh,args=(database,task_guid)) | |
38 | + refresh_process = multiprocessing.Process(target=self.table_refresh,args=(database,task_guid,self.para.get("creator"))) | |
39 | 39 | refresh_process.start() |
40 | 40 | |
41 | 41 | task = Task(guid=task_guid, |
... | ... | @@ -61,7 +61,7 @@ class Api(ApiTemplate): |
61 | 61 | return res |
62 | 62 | |
63 | 63 | |
64 | - def table_refresh(self,database,task_guid): | |
64 | + def table_refresh(self,database,task_guid,creator): | |
65 | 65 | |
66 | 66 | pg_ds =None |
67 | 67 | sys_ds =None |
... | ... | @@ -82,6 +82,8 @@ class Api(ApiTemplate): |
82 | 82 | |
83 | 83 | sys_session = PGUtil.get_db_session(configure.SQLALCHEMY_DATABASE_URI) |
84 | 84 | sys_ds = PGUtil.open_pg_data_source(0,configure.SQLALCHEMY_DATABASE_URI) |
85 | + # 实体库连接 | |
86 | + data_session: Session = PGUtil.get_db_session(DES.decode(database.sqlalchemy_uri)) | |
85 | 87 | |
86 | 88 | this_time = datetime.datetime.now() |
87 | 89 | database_guid = database.guid |
... | ... | @@ -98,21 +100,17 @@ class Api(ApiTemplate): |
98 | 100 | |
99 | 101 | # 更新空间表 |
100 | 102 | # 增加表 |
101 | - db_tables_names = self.add_spatail_table(database, pg_ds, sys_session,spatial_tables_names, this_time,db_tuple)# 实体库中空间表名 | |
103 | + db_tables_names = self.add_spatail_table(database, pg_ds, data_session,sys_session,spatial_tables_names, this_time,db_tuple,creator)# 实体库中空间表名 | |
102 | 104 | |
103 | 105 | # 删除/修改表 |
104 | - self.edit_spatial_table(pg_ds, sys_session,spatial_tables, db_tables_names, this_time,db_tuple) | |
106 | + self.edit_spatial_table(pg_ds, data_session, sys_session,spatial_tables, db_tables_names, this_time,db_tuple) | |
105 | 107 | |
106 | 108 | # 空间表处理完毕 |
107 | 109 | sys_session.commit() |
108 | 110 | |
109 | 111 | |
110 | - # 空间表处理完毕 | |
111 | - sys_session.commit() | |
112 | - | |
113 | 112 | # 注册普通表 |
114 | - # 实体库连接 | |
115 | - data_session: Session = PGUtil.get_db_session(DES.decode(database.sqlalchemy_uri)) | |
113 | + | |
116 | 114 | |
117 | 115 | # 处理后空间表 |
118 | 116 | spatial_tables = sys_session.query(Table).order_by(Table.create_time.desc()).filter_by(database_guid=database_guid).filter( |
... | ... | @@ -123,7 +121,7 @@ class Api(ApiTemplate): |
123 | 121 | # 原有普通表 |
124 | 122 | common_tables = sys_session.query(Table).order_by(Table.create_time.desc()).filter_by(database_guid=database_guid).filter( |
125 | 123 | Table.table_type == 0).all() |
126 | - # 原有普通表 名 | |
124 | + # 原有普通表名 | |
127 | 125 | origin_common_tables_name = [table.name for table in common_tables] |
128 | 126 | |
129 | 127 | # 现有普通表 |
... | ... | @@ -140,7 +138,8 @@ class Api(ApiTemplate): |
140 | 138 | # 增加新普通表 |
141 | 139 | |
142 | 140 | self.add_common_table(data_session, sys_session, database_guid, real_common_tables_name, origin_common_tables_name, |
143 | - this_time,db_tuple) | |
141 | + this_time,db_tuple,creator) | |
142 | + sys_session.commit() | |
144 | 143 | |
145 | 144 | # 删除、修改普通表 |
146 | 145 | self.edit_common_table(data_session,sys_session, database_guid, real_common_tables_name, origin_common_tables_name, |
... | ... | @@ -173,7 +172,7 @@ class Api(ApiTemplate): |
173 | 172 | sys_ds.Destroy() |
174 | 173 | return result |
175 | 174 | |
176 | - def add_spatail_table(self,database,pg_ds,sys_session,spatial_tables_names,this_time,db_tuple): | |
175 | + def add_spatail_table(self,database,pg_ds,data_session,sys_session,spatial_tables_names,this_time,db_tuple,creator): | |
177 | 176 | ''' |
178 | 177 | 注册新增空间表 |
179 | 178 | :param database: |
... | ... | @@ -202,40 +201,68 @@ class Api(ApiTemplate): |
202 | 201 | if layer.GetName().__contains__("_vacuate_"): |
203 | 202 | continue |
204 | 203 | |
204 | + # # 没有权限的表跳过 | |
205 | + # if not PGUtil.check_table_privilege(l_name, "SELECT", db_tuple[0], pg_ds): | |
206 | + # StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], l_name), "warn") | |
207 | + # continue | |
208 | + | |
205 | 209 | # 没有权限的表跳过 |
206 | - if not PGUtil.check_table_privilege(l_name, "SELECT", db_tuple[0], pg_ds): | |
210 | + if not SQLUtil.check_table_privilege(l_name, "SELECT", db_tuple[0], data_session): | |
207 | 211 | StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], l_name), "warn") |
208 | 212 | continue |
209 | 213 | |
210 | - | |
211 | 214 | # 范围统计和数量统计以100w为界限 |
212 | - query_count_layer: Layer = pg_ds.ExecuteSQL( | |
213 | - '''SELECT reltuples::bigint AS ec FROM pg_class WHERE oid = 'public."{}"'::regclass'''.format( | |
214 | - l_name)) | |
215 | + query_count_layer = data_session.execute('''SELECT reltuples::bigint AS ec FROM pg_class WHERE oid = 'public."{}"'::regclass'''.format(l_name)).fetchone() | |
216 | + feature_count = query_count_layer[0] | |
217 | + | |
218 | + # query_count_layer: Layer = pg_ds.ExecuteSQL( | |
219 | + # '''SELECT reltuples::bigint AS ec FROM pg_class WHERE oid = 'public."{}"'::regclass'''.format( | |
220 | + # l_name)) | |
221 | + | |
222 | + # feature_count = query_count_layer.GetFeature(0).GetField("ec") | |
223 | + | |
224 | + | |
225 | + | |
215 | 226 | |
216 | - feature_count = query_count_layer.GetFeature(0).GetField("ec") | |
217 | 227 | # 要素少于100w可以精确统计 |
218 | 228 | if feature_count < 1000000: |
219 | 229 | feature_count = layer.GetFeatureCount() |
220 | 230 | ext = layer.GetExtent() |
221 | 231 | else: |
222 | - query_ext_layer: Layer = pg_ds.ExecuteSQL( | |
223 | - "select geometry(ST_EstimatedExtent('public', '{}','{}'))".format(l_name, | |
224 | - layer.GetGeometryColumn())) | |
225 | - ext = query_ext_layer.GetExtent() | |
232 | + # query_ext_layer: Layer = pg_ds.ExecuteSQL( | |
233 | + # "select geometry(ST_EstimatedExtent('public', '{}','{}'))".format(l_name, | |
234 | + # layer.GetGeometryColumn())) | |
235 | + # | |
236 | + # ext = query_ext_layer.GetExtent() | |
237 | + try: | |
238 | + | |
239 | + ext = data_session.execute("select st_xmin(box3d),st_xmax(box3d),st_ymin(box3d),st_ymax(box3d) from (select box3d(geometry(ST_EstimatedExtent('public', '{}','{}')))) as b".format(l_name, | |
240 | + layer.GetGeometryColumn())).fetchone() | |
241 | + except: | |
242 | + data_session.rollback() | |
243 | + ext = layer.GetExtent() | |
244 | + | |
245 | + | |
226 | 246 | if ext[0] < 360: |
227 | 247 | ext = [round(e, 6) for e in ext] |
228 | 248 | else: |
229 | 249 | ext = [round(e, 2) for e in ext] |
230 | 250 | extent = "{},{},{},{}".format(ext[0], ext[1], ext[2], ext[3]) |
231 | 251 | |
232 | - StructurePrint().print("空间表增加!") | |
252 | + StructurePrint().print("空间表{}增加!".format(l_name)) | |
233 | 253 | |
234 | 254 | geom_type = GeometryAdapter.get_geometry_type(layer) |
235 | - except: | |
236 | - StructurePrint().print("表{}注册失败!".format(l_name), "warn") | |
255 | + except Exception as e: | |
256 | + StructurePrint().print("{}".format(e.__str__()+":"+ traceback.format_exc()), "warn") | |
257 | + StructurePrint().print("空间表{}新增失败!".format(l_name), "warn") | |
258 | + data_session.rollback() | |
237 | 259 | continue |
238 | 260 | |
261 | + olds = sys_session.query(Table).filter_by(name=l_name,database_guid=database.guid).all() | |
262 | + for old in olds: | |
263 | + sys_session.delete(old) | |
264 | + | |
265 | + | |
239 | 266 | table_guid = uuid.uuid1().__str__() |
240 | 267 | table = Table(guid=table_guid, |
241 | 268 | database_guid=database.guid, |
... | ... | @@ -243,6 +270,7 @@ class Api(ApiTemplate): |
243 | 270 | name=layer.GetName(), create_time=this_time, update_time=this_time, |
244 | 271 | table_type=GeometryAdapter.get_table_type(geom_type), |
245 | 272 | extent=extent, |
273 | + creator=creator, | |
246 | 274 | feature_count=feature_count |
247 | 275 | ) |
248 | 276 | sys_session.add(table) |
... | ... | @@ -301,158 +329,136 @@ class Api(ApiTemplate): |
301 | 329 | |
302 | 330 | |
303 | 331 | |
304 | - def edit_spatial_table(self,pg_ds,sys_session,spatial_tables,db_tables_names,this_time,db_tuple): | |
305 | - | |
306 | - | |
332 | + def edit_spatial_table(self,pg_ds, data_session,sys_session,spatial_tables,db_tables_names,this_time,db_tuple): | |
307 | 333 | |
308 | 334 | for table in spatial_tables: |
309 | - | |
310 | - # 删除表 | |
311 | - if table.name not in db_tables_names: | |
312 | - StructurePrint().print("空间表减少!") | |
313 | - sys_session.delete(table) | |
314 | - # 修改表 | |
315 | - else: | |
316 | - layer: Layer = pg_ds.GetLayerByName(table.name) | |
317 | - l_name = layer.GetName() | |
318 | - | |
319 | - # 只注册public的空间表,其他表空间的表名会有. | |
320 | - if layer.GetName().__contains__("."): | |
321 | - continue | |
322 | - | |
323 | - if layer.GetName().__contains__("_vacuate_"): | |
324 | - continue | |
325 | - | |
326 | - # 没有权限的表跳过 | |
327 | - if not PGUtil.check_table_privilege(l_name, "SELECT", db_tuple[0], pg_ds): | |
328 | - StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], l_name), "warn") | |
335 | + try: | |
336 | + # 删除表 | |
337 | + if table.name not in db_tables_names: | |
338 | + StructurePrint().print("空间表减少!") | |
329 | 339 | sys_session.delete(table) |
330 | - continue | |
340 | + # 修改表 | |
341 | + else: | |
342 | + layer: Layer = pg_ds.GetLayerByName(table.name) | |
343 | + l_name = layer.GetName() | |
331 | 344 | |
332 | - columns = table.relate_columns | |
333 | - columns_names = [column.name for column in columns] | |
334 | - feature_defn: FeatureDefn = layer.GetLayerDefn() | |
335 | - db_columns_names = [] | |
345 | + # 只注册public的空间表,其他表空间的表名会有. | |
346 | + if layer.GetName().__contains__("."): | |
347 | + continue | |
336 | 348 | |
337 | - # 增加列 | |
338 | - for i in range(feature_defn.GetFieldCount()): | |
339 | - field_defn: FieldDefn = feature_defn.GetFieldDefn(i) | |
340 | - field_name = field_defn.GetName() | |
341 | - db_columns_names.append(field_name) | |
342 | - | |
343 | - if field_name not in columns_names: | |
344 | - StructurePrint().print("{}空间表属性增加!".format(table.name)) | |
345 | - field_alias = field_name if field_defn.GetAlternativeName() is None or field_defn.GetAlternativeName().__eq__( | |
346 | - "") else field_defn.GetAlternativeName() | |
347 | - column = Columns(guid=uuid.uuid1().__str__(), table_guid=table.guid, | |
348 | - name=field_name, alias=field_alias, create_time=this_time, | |
349 | - update_time=this_time) | |
350 | - sys_session.add(column) | |
349 | + if layer.GetName().__contains__("_vacuate_"): | |
350 | + continue | |
351 | 351 | |
352 | - # 删除列 | |
353 | - for column in columns: | |
354 | - if column.name not in db_columns_names: | |
355 | - StructurePrint().print("{}空间表属性减少!".format(table.name)) | |
356 | - sys_session.delete(column) | |
357 | - | |
358 | - # 范围统计和数量统计以100w为界限 | |
359 | - query_count_layer: Layer = pg_ds.ExecuteSQL( | |
360 | - '''SELECT reltuples::bigint AS ec FROM pg_class WHERE oid = 'public."{}"'::regclass'''.format( | |
361 | - l_name)) | |
362 | - feature_count = query_count_layer.GetFeature(0).GetField("ec") | |
363 | - # 要素少于100w可以精确统计 | |
364 | - if feature_count < 1000000: | |
365 | - feature_count = layer.GetFeatureCount() | |
366 | - ext = layer.GetExtent() | |
352 | + # # 没有权限的表跳过 | |
353 | + # if not PGUtil.check_table_privilege(l_name, "SELECT", db_tuple[0], pg_ds): | |
354 | + # StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], l_name), "warn") | |
355 | + # sys_session.delete(table) | |
356 | + # continue | |
367 | 357 | |
368 | - else: | |
369 | - query_ext_layer: Layer = pg_ds.ExecuteSQL( | |
370 | - "select geometry(ST_EstimatedExtent('public', '{}','{}'))".format(l_name, | |
371 | - layer.GetGeometryColumn())) | |
372 | - ext = query_ext_layer.GetExtent() | |
373 | - if ext[0] < 360: | |
374 | - ext = [round(e, 6) for e in ext] | |
375 | - else: | |
376 | - ext = [round(e, 2) for e in ext] | |
377 | - extent = "{},{},{},{}".format(ext[0], ext[1], ext[2], ext[3]) | |
358 | + # 没有权限的表跳过 | |
359 | + if not SQLUtil.check_table_privilege(l_name, "SELECT", db_tuple[0], data_session): | |
360 | + StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], l_name), "warn") | |
361 | + sys_session.delete(table) | |
362 | + continue | |
378 | 363 | |
379 | - # 修改要素量 | |
380 | - if not table.feature_count.__eq__(feature_count): | |
381 | - StructurePrint().print("{}空间表要素!".format(table.name)) | |
382 | - sys_session.query(Table).filter_by(guid=table.guid).update({"feature_count": feature_count, | |
383 | - "extent": extent}) | |
364 | + columns = table.relate_columns | |
365 | + columns_names = [column.name for column in columns] | |
366 | + feature_defn: FeatureDefn = layer.GetLayerDefn() | |
367 | + db_columns_names = [] | |
368 | + | |
369 | + # 增加列 | |
370 | + for i in range(feature_defn.GetFieldCount()): | |
371 | + field_defn: FieldDefn = feature_defn.GetFieldDefn(i) | |
372 | + field_name = field_defn.GetName() | |
373 | + db_columns_names.append(field_name) | |
374 | + | |
375 | + if field_name not in columns_names: | |
376 | + StructurePrint().print("{}空间表属性增加!".format(table.name)) | |
377 | + field_alias = field_name if field_defn.GetAlternativeName() is None or field_defn.GetAlternativeName().__eq__( | |
378 | + "") else field_defn.GetAlternativeName() | |
379 | + column = Columns(guid=uuid.uuid1().__str__(), table_guid=table.guid, | |
380 | + name=field_name, alias=field_alias, create_time=this_time, | |
381 | + update_time=this_time) | |
382 | + sys_session.add(column) | |
384 | 383 | |
384 | + # 删除列 | |
385 | + for column in columns: | |
386 | + if column.name not in db_columns_names: | |
387 | + StructurePrint().print("{}空间表属性减少!".format(table.name)) | |
388 | + sys_session.delete(column) | |
385 | 389 | |
386 | - def add_common_table(self,data_session,sys_session,database_guid,real_common_tables_name,origin_common_tables_name,this_time,db_tuple): | |
387 | - for table_name in real_common_tables_name: | |
388 | - if table_name not in origin_common_tables_name: | |
389 | - StructurePrint().print("{}非空间表增加!".format(table_name)) | |
390 | - table_guid = uuid.uuid1().__str__() | |
390 | + # 范围统计和数量统计以100w为界限 | |
391 | + # query_count_layer: Layer = pg_ds.ExecuteSQL( | |
392 | + # '''SELECT reltuples::bigint AS ec FROM pg_class WHERE oid = 'public."{}"'::regclass'''.format( | |
393 | + # l_name)) | |
394 | + # feature_count = query_count_layer.GetFeature(0).GetField("ec") | |
391 | 395 | |
396 | + query_count_layer = data_session.execute('''SELECT reltuples::bigint AS ec FROM pg_class WHERE oid = 'public."{}"'::regclass'''.format(l_name)).fetchone() | |
397 | + feature_count = query_count_layer[0] | |
392 | 398 | |
393 | - # 没有权限的表跳过 | |
394 | - if not SQLUtil.check_table_privilege(table_name, "SELECT", db_tuple[0], data_session): | |
395 | - StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], table_name), "warn") | |
396 | - continue | |
399 | + # 要素少于100w可以精确统计 | |
400 | + if feature_count < 1000000: | |
401 | + feature_count = layer.GetFeatureCount() | |
402 | + ext = layer.GetExtent() | |
397 | 403 | |
398 | - count = data_session.execute('select count(*) from "{}"'.format(table_name)).fetchone()[0] | |
404 | + else: | |
405 | + # query_ext_layer: Layer = pg_ds.ExecuteSQL( | |
406 | + # "select geometry(ST_EstimatedExtent('public', '{}','{}'))".format(l_name, | |
407 | + # layer.GetGeometryColumn())) | |
408 | + # ext = query_ext_layer.GetExtent() | |
409 | + try: | |
410 | + ext = data_session.execute("select st_xmin(box3d),st_xmax(box3d),st_ymin(box3d),st_ymax(box3d) from (select box3d(geometry(ST_EstimatedExtent('public', '{}','{}')))) as b".format(l_name, | |
411 | + layer.GetGeometryColumn())).fetchone() | |
412 | + except: | |
413 | + data_session.rollback() | |
414 | + ext = layer.GetExtent() | |
399 | 415 | |
400 | - table = Table(guid=table_guid, | |
401 | - database_guid=database_guid, | |
402 | - name=table_name, create_time=this_time, update_time=this_time, | |
403 | - table_type=0, | |
404 | - feature_count=count | |
405 | - ) | |
416 | + if ext[0] < 360: | |
417 | + ext = [round(e, 6) for e in ext] | |
418 | + else: | |
419 | + ext = [round(e, 2) for e in ext] | |
420 | + extent = "{},{},{},{}".format(ext[0], ext[1], ext[2], ext[3]) | |
406 | 421 | |
407 | - sys_session.add(table) | |
422 | + # 修改要素量 | |
423 | + if not table.feature_count.__eq__(feature_count): | |
424 | + StructurePrint().print("{}空间表要素!".format(table.name)) | |
425 | + sys_session.query(Table).filter_by(guid=table.guid).update({"feature_count": feature_count, | |
426 | + "extent": extent}) | |
427 | + except Exception as e: | |
428 | + StructurePrint().print("{}".format(e.__str__() + ":" + traceback.format_exc()), "warn") | |
429 | + StructurePrint().print("空间表{}修改失败!".format(table.name), "warn") | |
430 | + data_session.rollback() | |
431 | + continue | |
408 | 432 | |
409 | - sql = ''' | |
410 | - SELECT | |
411 | - a.attnum, | |
412 | - a.attname AS field | |
413 | - FROM | |
414 | - pg_class c, | |
415 | - pg_attribute a, | |
416 | - pg_type t | |
417 | - WHERE | |
418 | - c.relname = '{}' | |
419 | - and a.attnum > 0 | |
420 | - and a.attrelid = c.oid | |
421 | - and a.atttypid = t.oid | |
422 | - ORDER BY a.attnum | |
423 | - '''.format(table_name) | |
424 | - | |
425 | - cols = data_session.execute(sql).fetchall() | |
426 | - for col in cols: | |
427 | - column = Columns(guid=uuid.uuid1().__str__(), table_guid=table_guid, | |
428 | - name=col[1], create_time=this_time, update_time=this_time) | |
429 | - sys_session.add(column) | |
433 | + def add_common_table(self,data_session,sys_session,database_guid,real_common_tables_name,origin_common_tables_name,this_time,db_tuple,creator): | |
434 | + for table_name in real_common_tables_name: | |
435 | + if table_name not in origin_common_tables_name: | |
436 | + try: | |
430 | 437 | |
431 | - # 删除不存在的表 | |
432 | - for n in origin_common_tables_name: | |
433 | - if n not in real_common_tables_name: | |
434 | - tables = Table.query.filter_by(name=n).filter_by(database_guid=database_guid).all() | |
435 | - for table in tables: | |
436 | - sys_session.delete(table) | |
438 | + StructurePrint().print("{}非空间表增加!".format(table_name)) | |
439 | + table_guid = uuid.uuid1().__str__() | |
437 | 440 | |
438 | - def edit_common_table(self,data_session,sys_session,database_guid,real_common_tables_name,origin_common_tables_name,this_time,db_tuple): | |
439 | - for table_name in origin_common_tables_name: | |
440 | - tables = sys_session.query(Table).filter_by(name=table_name).filter_by(database_guid=database_guid).all() | |
441 | - for table in tables: | |
442 | - if table_name not in real_common_tables_name: | |
443 | - StructurePrint().print("{}非空间表减少!".format(table_name)) | |
444 | - sys_session.delete(table) | |
445 | - # 修改表 | |
446 | - else: | |
447 | 441 | |
448 | - # 没有权限的表删除 | |
442 | + # 没有权限的表跳过 | |
449 | 443 | if not SQLUtil.check_table_privilege(table_name, "SELECT", db_tuple[0], data_session): |
450 | 444 | StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], table_name), "warn") |
451 | - sys_session.delete(table) | |
452 | 445 | continue |
453 | 446 | |
454 | - columns = table.relate_columns | |
455 | - columns_names = [column.name for column in columns] | |
447 | + count = data_session.execute('select count(*) from "{}"'.format(table_name)).fetchone()[0] | |
448 | + | |
449 | + olds = sys_session.query(Table).filter_by(name=table_name, database_guid=database_guid).all() | |
450 | + for old in olds: | |
451 | + sys_session.delete(old) | |
452 | + | |
453 | + table = Table(guid=table_guid, | |
454 | + database_guid=database_guid, | |
455 | + name=table_name, create_time=this_time, update_time=this_time, | |
456 | + table_type=0, | |
457 | + feature_count=count, | |
458 | + creator = creator | |
459 | + ) | |
460 | + | |
461 | + sys_session.add(table) | |
456 | 462 | |
457 | 463 | sql = ''' |
458 | 464 | SELECT |
... | ... | @@ -471,28 +477,86 @@ class Api(ApiTemplate): |
471 | 477 | '''.format(table_name) |
472 | 478 | |
473 | 479 | cols = data_session.execute(sql).fetchall() |
474 | - real_cols_name = [col[1] for col in cols] | |
475 | - | |
476 | - # 属性增加 | |
477 | - for col in real_cols_name: | |
478 | - if col not in columns_names: | |
479 | - StructurePrint().print("{}表要素属性增加!".format(table_name)) | |
480 | - column = Columns(guid=uuid.uuid1().__str__(), table_guid=table.guid, | |
481 | - name=col, create_time=this_time, update_time=this_time) | |
482 | - sys_session.add(column) | |
483 | - | |
484 | - # 属性减少 | |
485 | - for column in columns: | |
486 | - if column.name not in real_cols_name: | |
487 | - StructurePrint().print("{}表要素属性减少!".format(table_name)) | |
488 | - sys_session.delete(column) | |
480 | + for col in cols: | |
481 | + column = Columns(guid=uuid.uuid1().__str__(), table_guid=table_guid, | |
482 | + name=col[1], create_time=this_time, update_time=this_time) | |
483 | + sys_session.add(column) | |
489 | 484 | |
490 | - count = SQLUtil.get_table_count(table_name,data_session) | |
485 | + # 删除不存在的表 | |
486 | + for n in origin_common_tables_name: | |
487 | + if n not in real_common_tables_name: | |
488 | + tables = Table.query.filter_by(name=n).filter_by(database_guid=database_guid).all() | |
489 | + for table in tables: | |
490 | + sys_session.delete(table) | |
491 | + except Exception as e: | |
492 | + StructurePrint().print("{}".format(e.__str__() + ":" + traceback.format_exc()), "warn") | |
493 | + StructurePrint().print("非空间表{}增加失败!".format(table_name), "warn") | |
494 | + data_session.rollback() | |
495 | + continue | |
491 | 496 | |
492 | - if not table.feature_count.__eq__(count): | |
493 | - StructurePrint().print("{}表要素变化!".format(table_name)) | |
494 | - sys_session.query(Table).filter_by(guid=table.guid).update({"feature_count": count}) | |
497 | + def edit_common_table(self,data_session,sys_session,database_guid,real_common_tables_name,origin_common_tables_name,this_time,db_tuple): | |
498 | + for table_name in origin_common_tables_name: | |
499 | + try: | |
500 | + tables = sys_session.query(Table).filter_by(name=table_name).filter_by(database_guid=database_guid).all() | |
501 | + for table in tables: | |
502 | + if table_name not in real_common_tables_name: | |
503 | + StructurePrint().print("{}非空间表减少!".format(table_name)) | |
504 | + sys_session.delete(table) | |
505 | + # 修改表 | |
506 | + else: | |
495 | 507 | |
508 | + # 没有权限的表删除 | |
509 | + if not SQLUtil.check_table_privilege(table_name, "SELECT", db_tuple[0], data_session): | |
510 | + StructurePrint().print("用户{}对表{}没有select权限!".format(db_tuple[0], table_name), "warn") | |
511 | + sys_session.delete(table) | |
512 | + continue | |
513 | + | |
514 | + columns = table.relate_columns | |
515 | + columns_names = [column.name for column in columns] | |
516 | + | |
517 | + sql = ''' | |
518 | + SELECT | |
519 | + a.attnum, | |
520 | + a.attname AS field | |
521 | + FROM | |
522 | + pg_class c, | |
523 | + pg_attribute a, | |
524 | + pg_type t | |
525 | + WHERE | |
526 | + c.relname = '{}' | |
527 | + and a.attnum > 0 | |
528 | + and a.attrelid = c.oid | |
529 | + and a.atttypid = t.oid | |
530 | + ORDER BY a.attnum | |
531 | + '''.format(table_name) | |
532 | + | |
533 | + cols = data_session.execute(sql).fetchall() | |
534 | + real_cols_name = [col[1] for col in cols] | |
535 | + | |
536 | + # 属性增加 | |
537 | + for col in real_cols_name: | |
538 | + if col not in columns_names: | |
539 | + StructurePrint().print("{}表要素属性增加!".format(table_name)) | |
540 | + column = Columns(guid=uuid.uuid1().__str__(), table_guid=table.guid, | |
541 | + name=col, create_time=this_time, update_time=this_time) | |
542 | + sys_session.add(column) | |
543 | + | |
544 | + # 属性减少 | |
545 | + for column in columns: | |
546 | + if column.name not in real_cols_name: | |
547 | + StructurePrint().print("{}表要素属性减少!".format(table_name)) | |
548 | + sys_session.delete(column) | |
549 | + | |
550 | + count = SQLUtil.get_table_count(table_name,data_session) | |
551 | + | |
552 | + if not table.feature_count.__eq__(count): | |
553 | + StructurePrint().print("{}表要素变化!".format(table_name)) | |
554 | + sys_session.query(Table).filter_by(guid=table.guid).update({"feature_count": count}) | |
555 | + except Exception as e: | |
556 | + StructurePrint().print("{}".format(e.__str__() + ":" + traceback.format_exc()), "warn") | |
557 | + StructurePrint().print("非空间表{}修改失败!".format(table_name), "warn") | |
558 | + data_session.rollback() | |
559 | + continue | |
496 | 560 | |
497 | 561 | api_doc={ |
498 | 562 | "tags":["管理接口"], | ... | ... |
... | ... | @@ -156,6 +156,6 @@ class ProjectFile: |
156 | 156 | ) |
157 | 157 | |
158 | 158 | project_xml = project_xml.strip() |
159 | - StructurePrint().print(project_xml) | |
160 | - StructurePrint().print(str(base64.b64encode(project_xml.encode('utf-8')), encoding="utf8")) | |
159 | + # StructurePrint().print(project_xml) | |
160 | + # StructurePrint().print(str(base64.b64encode(project_xml.encode('utf-8')), encoding="utf8")) | |
161 | 161 | return str(base64.b64encode(project_xml.encode('utf-8')), encoding="utf8") |
\ No newline at end of file | ... | ... |
... | ... | @@ -7,7 +7,7 @@ from flask import current_app,request |
7 | 7 | import traceback |
8 | 8 | import json |
9 | 9 | from app.modules.auth.models import OAuth2Token,User,db |
10 | - | |
10 | +import app | |
11 | 11 | class ApiTemplate: |
12 | 12 | #模板方法 |
13 | 13 | para = dict() |
... | ... | @@ -17,13 +17,21 @@ class ApiTemplate: |
17 | 17 | pass |
18 | 18 | |
19 | 19 | def get_para(self): |
20 | + | |
20 | 21 | self.para = ParameterUtil.get_parameter() |
21 | 22 | token = request.headers.get('Authorization') |
23 | + | |
24 | + if self.para.get("token"): | |
25 | + token = self.para.get("token") | |
22 | 26 | if token: |
23 | 27 | token = token.split(" ")[-1] |
24 | - user = User.query.join(OAuth2Token).filter(OAuth2Token.access_token == token).one_or_none() | |
25 | - if user: | |
26 | - self.para["creator"] = user.username | |
28 | + if app.GLOBAL_DIC.get(token): | |
29 | + self.para["creator"] = app.GLOBAL_DIC.get(token) | |
30 | + else: | |
31 | + user = User.query.join(OAuth2Token).filter(OAuth2Token.access_token == token).one_or_none() | |
32 | + if user: | |
33 | + self.para["creator"] = user.username | |
34 | + app.GLOBAL_DIC[token] = user.username | |
27 | 35 | |
28 | 36 | def para_check(self): |
29 | 37 | pass | ... | ... |
... | ... | @@ -116,13 +116,14 @@ class PGUtil: |
116 | 116 | pri = pg_ds.ExecuteSQL("select * from information_schema.table_privileges " |
117 | 117 | "where grantee='{}' and table_name='{}' and privilege_type='{}' " |
118 | 118 | .format(user,table_name,pri_type)) |
119 | - | |
120 | - if pri.GetNextFeature(): | |
121 | - return True | |
119 | + if pri: | |
120 | + if pri.GetNextFeature(): | |
121 | + return True | |
122 | + else: | |
123 | + return False | |
122 | 124 | else: |
123 | 125 | return False |
124 | 126 | |
125 | - | |
126 | 127 | @classmethod |
127 | 128 | def get_srid(cls,pg_ds,table_name): |
128 | 129 | layer = pg_ds.GetLayerByName(table_name) |
... | ... | @@ -142,9 +143,7 @@ class PGUtil: |
142 | 143 | def check_database_privilege(cls,table_name,pri_type,user,session): |
143 | 144 | pass |
144 | 145 | |
145 | - @classmethod | |
146 | - def check_database_privilege(cls,table_name,pri_type,user,session): | |
147 | - pass | |
146 | + | |
148 | 147 | |
149 | 148 | if __name__ == '__main__': |
150 | 149 | # session:Session = PGUtil.get_db_session("postgresql://postgres:chinadci@172.26.60.100:5432/template1") | ... | ... |
test/gdal_grid.py
0 → 100644
1 | +# coding=utf-8 | |
2 | +#author: 4N | |
3 | +#createtime: 2022/3/4 | |
4 | +#email: nheweijun@sina.com | |
5 | + | |
6 | +from osgeo import gdal | |
7 | +from osgeo import ogr | |
8 | +from osgeo.ogr import * | |
9 | + | |
10 | +fn = "PG: user=%s password=%s host=%s port=%s dbname=%s " % ("postgres","chinadci","172.26.60.101","5432","ceshi") | |
11 | +driver = ogr.GetDriverByName("PostgreSQL") | |
12 | +if driver is None: | |
13 | + raise Exception("打开PostgreSQL驱动失败,可能是当前GDAL未支持PostgreSQL驱动!") | |
14 | +ds:DataSource = driver.Open(fn, 1) | |
15 | + | |
16 | +layer:Layer = ds.GetLayerByName("BeijingBusStops") | |
17 | + | |
18 | + | |
19 | +dd = gdal.Grid('outcome.tif',"J:\Data\矢量数据\北京\北京公交线路和公交站点shp\stops\BeijingBusStops.shp",algorithm = 'linear:radius=0') | |
\ No newline at end of file | ... | ... |
test/outcome.tif
0 → 100644
不能预览此文件类型
... | ... | @@ -108,9 +108,6 @@ def get_rc(parameter,l,lon,lat): |
108 | 108 | return int(r),int(c) |
109 | 109 | |
110 | 110 | def wmts_overview(extent,url_format): |
111 | - | |
112 | - # scheme = {"0": {"resolution": 1.4062500000059488, "scale": 590995186.12}, "1": {"resolution": 0.7031250000029744, "scale": 295497593.06}, "2": {"resolution": 0.3515625000014872, "scale": 147748796.53}, "3": {"resolution": 0.1757812500007436, "scale": 73874398.265}, "4": {"resolution": 0.0878906250003718, "scale": 36937199.1325}, "5": {"resolution": 0.0439453125001859, "scale": 18468599.56625}, "6": {"resolution": 0.02197265625009295, "scale": 9234299.783125}, "7": {"resolution": 0.010986328125046475, "scale": 4617149.8915625}, "8": {"resolution": 0.0054931640625232375, "scale": 2308574.94578125}, "9": {"resolution": 0.0027465820312616187, "scale": 1154287.472890625}, "10": {"resolution": 0.0013732910156308094, "scale": 577143.7364453125}, "11": {"resolution": 0.0006866455078154047, "scale": 288571.86822265625}, "12": {"resolution": 0.00034332275390770234, "scale": 144285.93411132813}, "13": {"resolution": 0.00017166137695385117, "scale": 72142.96705566406}, "14": {"resolution": 8.583068847692559e-05, "scale": 36071.48352783203}, "15": {"resolution": 4.291534423846279e-05, "scale": 18035.741763916016}, "16": {"resolution": 2.1457672119231396e-05, "scale": 9017.870881958008}, "17": {"resolution": 1.0728836059615698e-05, "scale": 4508.935440979004}, "18": {"resolution": 5.364418029807849e-06, "scale": 2254.467720489502}, "19": {"resolution": 2.6822090149039246e-06, "scale": 1127.233860244751}, "20": {"resolution": 1.3411045074519623e-06, "scale": 563.6169301223755}, "cols": 256, "rows": 256, "dpi": 96, "wkt": "", "x": -400, "y": 400} | |
113 | - | |
114 | 111 | scheme = {"0": {"resolution": 156543.34701231902, "scale": 591658710.9}, |
115 | 112 | "1": {"resolution": 78271.67350615951, "scale": 295829355.45}, |
116 | 113 | "2": {"resolution": 39135.83675440268 , "scale": 147914677.73} , |
... | ... | @@ -134,6 +131,10 @@ def wmts_overview(extent,url_format): |
134 | 131 | "20": {"resolution": 1.3411045074519623e-06, "scale": 563.6169301223755}, |
135 | 132 | "cols": 256, "rows": 256, "dpi": 96, "wkt": "", "x":-4923200, "y":10002100} |
136 | 133 | |
134 | + scheme = {"0": {"resolution": 1.4062500000059488, "scale": 590995186.12}, "1": {"resolution": 0.7031250000029744, "scale": 295497593.06}, "2": {"resolution": 0.3515625000014872, "scale": 147748796.53}, "3": {"resolution": 0.1757812500007436, "scale": 73874398.265}, "4": {"resolution": 0.0878906250003718, "scale": 36937199.1325}, "5": {"resolution": 0.0439453125001859, "scale": 18468599.56625}, "6": {"resolution": 0.02197265625009295, "scale": 9234299.783125}, "7": {"resolution": 0.010986328125046475, "scale": 4617149.8915625}, "8": {"resolution": 0.0054931640625232375, "scale": 2308574.94578125}, "9": {"resolution": 0.0027465820312616187, "scale": 1154287.472890625}, "10": {"resolution": 0.0013732910156308094, "scale": 577143.7364453125}, "11": {"resolution": 0.0006866455078154047, "scale": 288571.86822265625}, "12": {"resolution": 0.00034332275390770234, "scale": 144285.93411132813}, "13": {"resolution": 0.00017166137695385117, "scale": 72142.96705566406}, "14": {"resolution": 8.583068847692559e-05, "scale": 36071.48352783203}, "15": {"resolution": 4.291534423846279e-05, "scale": 18035.741763916016}, "16": {"resolution": 2.1457672119231396e-05, "scale": 9017.870881958008}, "17": {"resolution": 1.0728836059615698e-05, "scale": 4508.935440979004}, "18": {"resolution": 5.364418029807849e-06, "scale": 2254.467720489502}, "19": {"resolution": 2.6822090149039246e-06, "scale": 1127.233860244751}, "20": {"resolution": 1.3411045074519623e-06, "scale": 563.6169301223755}, "cols": 256, "rows": 256, "dpi": 96, "wkt": "", "x": -400, "y": 400} | |
135 | + | |
136 | + | |
137 | + | |
137 | 138 | lev = 0 |
138 | 139 | r1 = 0 |
139 | 140 | r2 = 0 |
... | ... | @@ -173,35 +174,30 @@ def wmts_overview(extent,url_format): |
173 | 174 | # 拼接瓦片 |
174 | 175 | for r in range(r2, r1 + 1): |
175 | 176 | for c in range(c1, c2 + 1): |
176 | - | |
177 | 177 | url = url_format.format(lev, c, r) |
178 | - print(url) | |
179 | 178 | dataset: Dataset = gdal.Open(url, 0) |
180 | - | |
181 | - | |
182 | - | |
183 | 179 | if dataset.RasterCount==1: |
184 | 180 | continue |
185 | - | |
186 | 181 | for b in range(1, 4): |
187 | 182 | band: Band = dataset.GetRasterBand(b) |
188 | 183 | |
189 | 184 | dat[(r - r2) * 256:(r - r2 + 1) * 256, (c - c1) * 256: (c - c1 + 1) * 256, |
190 | 185 | 2 - (b - 1)] = band.ReadAsArray(0, 0, 256, 256) |
191 | - cv2.imwrite("overwmtsori2.jpg", dat, [cv2.IMWRITE_JPEG_QUALITY, 30]) | |
186 | + | |
187 | + cv2.imwrite("overwmtsori1.jpg", dat, [cv2.IMWRITE_JPEG_QUALITY, 30]) | |
192 | 188 | |
193 | 189 | dat2 = dat[int(offy):int(offy + ynum), int(offx):int(offx + xnum), :] |
194 | 190 | |
195 | 191 | #裁剪 |
196 | - cv2.imwrite("overwmts2.jpg", dat2, [cv2.IMWRITE_JPEG_QUALITY, 30]) | |
192 | + cv2.imwrite("overwmts1.jpg", dat2, [cv2.IMWRITE_JPEG_QUALITY, 30]) | |
197 | 193 | |
198 | 194 | if __name__ == '__main__': |
199 | 195 | |
200 | 196 | # tms_overview([107.78981494180618, 120.43553603935675, 18.870480519260582, 25.999868757737033],"http://172.26.60.101:8820/DMap/Services/GDMap/TileServer/TMSService" |
201 | 197 | # ) |
202 | - # wmts_url = "http://172.26.60.101:8820/DMap/Services/GDMap/TileServer/WMTSService?layer=&style=default&tilematrixset=nativeTileMatrixSet&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image%2Fpng&TileMatrix={}&TileCol={}&TileRow={}" | |
203 | - # wmts_overview([107.78981494180618, 120.43553603935675, 18.870480519260582, 25.999868757737033],wmts_url) | |
198 | + wmts_url = "http://172.26.60.101:8820/DMap/Services/GDMap/TileServer/WMTSService?layer=&style=default&tilematrixset=nativeTileMatrixSet&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image%2Fpng&TileMatrix={}&TileCol={}&TileRow={}" | |
199 | + wmts_overview([107.78981494180618, 120.43553603935675, 18.870480519260582, 25.999868757737033],wmts_url) | |
204 | 200 | |
205 | 201 | |
206 | - wmts_url = "http://172.26.60.101:8820/DMap/Services/SDMap/TileServer/WMTSService?layer=&style=default&tilematrixset=nativeTileMatrixSet&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image%2Fpng&TileMatrix={}&TileCol={}&TileRow={}" | |
207 | - wmts_overview([699385.63699999999,740828.85219999996,2507679.2525999998,2546752.4369999999],wmts_url) | |
\ No newline at end of file | ||
202 | + # wmts_url = "http://172.26.60.101:8820/DMap/Services/SDMap/TileServer/WMTSService?layer=&style=default&tilematrixset=nativeTileMatrixSet&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image%2Fpng&TileMatrix={}&TileCol={}&TileRow={}" | |
203 | + # wmts_overview([699385.63699999999,740828.85219999996,2507679.2525999998,2546752.4369999999],wmts_url) | |
\ No newline at end of file | ... | ... |
请
注册
或
登录
后发表评论