image_refresh.py
4.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# coding=utf-8
#author: 4N
#createtime: 2021/7/19
#email: nheweijun@sina.com
from osgeo import gdal,osr
from osgeo.gdal import Dataset,Band
from app.util.component.ApiTemplate import ApiTemplate
from app.modules.service.image.util.ThriftConnect import ThriftConnect
import json
from ..models import Image
import datetime
from app.models import db
import uuid
import os
from .util.ImageType import ImageType
from .util.Cache import Cache
class Api(ApiTemplate):
api_name = "refresh影像数据"
def process(self):
#可以注册一个目录
#返回结果
res = {}
try:
guid = self.para.get("guid")
image:Image = Image.query.filter_by(guid=guid).one_or_none()
image_service_info, zoo, servers = Cache.cache_data(None)
image_servers = image.server.split(",")
image_servers = [ser for ser in image_servers if ser in servers]
data_server = image_servers[0]
if data_server.__eq__("本地服务器"):
img: Dataset = gdal.Open(image.path, 0)
geo = img.GetGeoTransform()
origin = osr.SpatialReference()
origin.ImportFromWkt(img.GetProjection())
authority_code = origin.GetAuthorityCode(None)
band_count = img.RasterCount
band: Band = img.GetRasterBand(1)
count = band.GetOverviewCount()
nodatavalue = band.GetNoDataValue()
left_top = (geo[0], geo[3])
right_buttom = (geo[0] + geo[1] * img.RasterXSize, geo[3] + geo[5] * img.RasterYSize)
origin_extent = [left_top[0], right_buttom[1], right_buttom[0], left_top[1]]
update_info = {"band_count": band_count,
"band_view":image.band_view if band_count>=3 else "[1,1,1]",
"overview_count": count,
"raster_x_size": image.RasterXSize,
"raster_y_size": image.RasterYSize,
"cell_x_size": geo[1],
"cell_y_size": geo[5],
"extent": origin_extent,
"null_value": nodatavalue,
"size":os.path.getsize(image.path),
"crs_wkt": image.GetProjection(),
"crs": authority_code,
"crs_proj4": origin.ExportToProj4(),
"update_time":datetime.datetime.now()
}
del img
else:
thrift_connect = ThriftConnect(data_server)
info = json.loads(thrift_connect.client.getInfo(image.path))
thrift_connect.close()
update_info = {"band_count": info.get("band_count"),
"band_view":image.band_view if info.get("band_count")>=3 else "[1,1,1]",
"overview_count": info.get("overview_count"),
"raster_x_size" : info["xy_size"][0],
"raster_y_size" : info["xy_size"][1],
"cell_x_size" : info.get("cell_x_size"),
"cell_y_size" : abs(info.get("cell_y_size")),
"extent": json.dumps(info["origin_extent"]),
"null_value": info.get("null_value"),
"size":info.get("size"),
"crs" : str(info.get("crs")),
"crs_wkt" : info.get("crs_wkt"),
"crs_proj4" : info.get("crs_proj4"),
"update_time":datetime.datetime.now()
}
Image.query.filter_by(guid=guid).update(update_info)
db.session.commit()
except:
raise Exception("刷新影像数据信息失败!")
res["result"] = True
return res
api_doc = {
"tags": ["影像接口"],
"parameters": [
{"name": "guid",
"in": "formData",
"type": "string",
"description": "image_guid"},
],
"responses": {
200: {
"schema": {
"properties": {
}
}
}
}
}