SliceScheme.py
2.7 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
# coding=utf-8
#author: 4N
#createtime: 2021/5/17
#email: nheweijun@sina.com
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element
import math
class SliceScheme:
#这里的 多对象共享的
def __init__(self,slice_scheme_path):
self.parameter = {}
self.levels = []
tree = ET.parse(slice_scheme_path)
root:Element = tree.getroot()
if root.tag.__eq__("TileCacheInfo"):
TileCacheInfo: Element =root
else:
TileCacheInfo :Element= root.find("TileCacheInfo")
self.parameter["rows"] = float(TileCacheInfo.find("TileRows").text)
self.parameter["cols"] = float(TileCacheInfo.find("TileCols").text)
self.parameter["x"] = float(TileCacheInfo.find("TileOrigin").find("X").text)
self.parameter["y"] = float(TileCacheInfo.find("TileOrigin").find("Y").text)
self.parameter["dpi"] = float(TileCacheInfo.find("DPI").text)
self.parameter["wkt"] = TileCacheInfo.find("SpatialReference").find("WKT").text
LODInfos:Element = TileCacheInfo.find("LODInfos")
for info in LODInfos.iter("LODInfo"):
info_dict={}
info_dict["scale"] = float(info.find("Scale").text)
info_dict["resolution"] = float(info.find("Resolution").text)
self.parameter[info.find("LevelID").text] =info_dict
self.levels.append({"level":int(info.find("LevelID").text),
"scale":float(info.find("Scale").text),
"resolution":float(info.find("Resolution").text)})
@staticmethod
def get_polygon(parameter,level,row,col):
level=int(level)
row = int(row)
col = int(col)
detaxy = parameter.get(str(level)).get("resolution")* parameter.get("cols")
minx = detaxy * col + int(parameter.get("x"))
maxy = -detaxy * row + int(parameter.get("y"))
maxx = detaxy + minx
miny = -detaxy + maxy
return [minx,miny,maxx,maxy]
def get_poly(self,level,row,col):
level=int(level)
row = int(row)
col = int(col)
detaxy = self.parameter.get(str(level)).get("resolution")* self.parameter.get("cols")
minx = detaxy*col + self.parameter.get("x")
maxy = -detaxy*row +self.parameter.get("y")
maxx = detaxy + minx
miny = -detaxy + maxy
minx = math.ceil((detaxy*col + self.parameter.get("x"))*1000)/1000.0
maxy = math.ceil((-detaxy*row +self.parameter.get("y"))*1000)/1000.0
maxx = math.ceil((detaxy + minx)*1000)/1000.0
miny = math.ceil((-detaxy + maxy)*1000)/1000.0
return [minx,miny,maxx,maxy]