@mapcatch/util 1.0.15 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/catchUtil.min.esm.js +67927 -14001
- package/dist/catchUtil.min.js +2695 -55
- package/package.json +22 -3
- package/src/constants/annotation_color.js +7 -0
- package/src/constants/annotation_draw_style.js +228 -0
- package/src/constants/annotation_label_style.js +76 -0
- package/src/constants/annotation_style.js +118 -0
- package/src/constants/cameras.js +1 -1
- package/src/constants/crs.js +31473 -31473
- package/src/constants/error_codes.js +44 -0
- package/src/constants/height_colors.js +1 -0
- package/src/constants/index.js +9 -2
- package/src/constants/map_style.js +11 -0
- package/src/constants/measurement_fields.js +3 -3
- package/src/{event.js → event/event.js} +1 -14
- package/src/event/event_bus.js +5 -0
- package/src/event/index.js +2 -0
- package/src/gl-operations/constants.js +9 -11
- package/src/gl-operations/default_options.js +5 -5
- package/src/gl-operations/index.js +166 -239
- package/src/gl-operations/reglCommands/contours.js +20 -20
- package/src/gl-operations/reglCommands/default.js +34 -34
- package/src/gl-operations/reglCommands/hillshading.js +116 -116
- package/src/gl-operations/reglCommands/index.js +6 -6
- package/src/gl-operations/reglCommands/multiLayers.js +55 -55
- package/src/gl-operations/reglCommands/transitions.js +24 -24
- package/src/gl-operations/reglCommands/util.js +54 -54
- package/src/gl-operations/renderer.js +69 -69
- package/src/gl-operations/shaders/transform.js +2 -2
- package/src/gl-operations/shaders/util/rgbaToFloat.glsl +11 -11
- package/src/gl-operations/texture_manager.js +58 -58
- package/src/gl-operations/util.js +154 -154
- package/src/index.js +14 -2
- package/src/measure/index.js +198 -0
- package/src/measure/tile_cache.js +88 -0
- package/src/mvs/index.js +26 -0
- package/src/mvs/protos/index.js +12 -0
- package/src/mvs/protos/proto_10.js +155 -0
- package/src/observation_pretict.js +168 -0
- package/src/photo-parser/exif/gps_tags.js +33 -0
- package/src/photo-parser/exif/ifd1_tags.js +22 -0
- package/src/photo-parser/exif/index.js +130 -0
- package/src/photo-parser/exif/parse_image.js +290 -0
- package/src/photo-parser/exif/string_values.js +137 -0
- package/src/photo-parser/exif/tags.js +75 -0
- package/src/photo-parser/exif/tiff_tags.js +35 -0
- package/src/photo-parser/exif/util.js +103 -0
- package/src/photo-parser/image-size/detector.js +24 -0
- package/src/photo-parser/image-size/fromFile.js +55 -0
- package/src/photo-parser/image-size/index.js +2 -0
- package/src/photo-parser/image-size/lookup.js +37 -0
- package/src/photo-parser/image-size/types/bmp.js +10 -0
- package/src/photo-parser/image-size/types/cur.js +16 -0
- package/src/photo-parser/image-size/types/dds.js +10 -0
- package/src/photo-parser/image-size/types/gif.js +11 -0
- package/src/photo-parser/image-size/types/heif.js +35 -0
- package/src/photo-parser/image-size/types/icns.js +112 -0
- package/src/photo-parser/image-size/types/ico.js +74 -0
- package/src/photo-parser/image-size/types/index.js +43 -0
- package/src/photo-parser/image-size/types/j2c.js +11 -0
- package/src/photo-parser/image-size/types/jp2.js +22 -0
- package/src/photo-parser/image-size/types/jpg.js +157 -0
- package/src/photo-parser/image-size/types/ktx.js +18 -0
- package/src/photo-parser/image-size/types/png.js +36 -0
- package/src/photo-parser/image-size/types/pnm.js +74 -0
- package/src/photo-parser/image-size/types/psd.js +10 -0
- package/src/photo-parser/image-size/types/svg.js +100 -0
- package/src/photo-parser/image-size/types/tga.js +14 -0
- package/src/photo-parser/image-size/types/tiff.js +92 -0
- package/src/photo-parser/image-size/types/utils.js +83 -0
- package/src/photo-parser/image-size/types/webp.js +67 -0
- package/src/photo-parser/index.js +181 -0
- package/src/report/annotations_report.js +446 -0
- package/src/report/index.js +2 -0
- package/src/report/map_util.js +81 -0
- package/src/report/pdf_creator.js +247 -0
- package/src/report/report.js +583 -0
- package/src/transform.js +204 -0
- package/src/util.js +371 -75
- package/CHANGELOG.md +0 -60
- /package/src/constants/{colors.js → dsm_colors.js} +0 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import SVGPathCommander from 'svg-path-commander'
|
|
2
|
+
const symbol = {
|
|
3
|
+
point: 'M541.257143 1009.298286l11.483428-11.922286a2105.782857 2105.782857 0 0 0 164.205715-194.852571c55.734857-75.337143 101.376-148.772571 133.339428-218.624 32.475429-70.948571 50.102857-136.338286 50.102857-195.510858a388.388571 388.388571 0 1 0-776.777142 0c0 65.536 24.502857 141.531429 69.046857 226.669715a1469.44 1469.44 0 0 0 114.249143 180.589714 2375.753143 2375.753143 0 0 0 179.565714 217.307429c13.677714 14.336 36.425143 14.628571 50.468571 0.658285l4.242286-4.388571z m-3.657143-45.056a2181.558857 2181.558857 0 0 1-53.979429-60.123429 2307.949714 2307.949714 0 0 1-119.588571-150.016A1401.709714 1401.709714 0 0 1 255.195429 582.217143c-39.716571-75.922286-60.928-141.897143-60.928-193.901714a317.732571 317.732571 0 1 1 635.538285 0c0 47.616-15.067429 103.643429-43.666285 166.107428-29.696 64.804571-72.850286 134.363429-125.952 205.970286a2034.834286 2034.834286 0 0 1-173.129143 203.117714l50.468571 0.658286zM670.793143 388.388571a158.866286 158.866286 0 1 0-317.732572 0 158.866286 158.866286 0 0 0 317.732572 0z m-247.149714 0a88.283429 88.283429 0 1 1 176.566857 0 88.283429 88.283429 0 0 1-176.566857 0z',
|
|
4
|
+
line: 'M0 870.4l153.6-153.6 51.2 51.2 563.2-563.2-51.2-51.2L870.4 0 1024 153.6l-153.6 153.6-83.309714-83.382857 22.674285 22.674286-563.2 563.2 60.635429 60.708571L153.6 1024 0 870.4z',
|
|
5
|
+
polygon: 'M911.140571 548.571429l-186.733714 323.437714H350.939429L164.278857 548.571429l186.660572-323.437715h373.540571L911.140571 548.571429z m-141.165714 402.285714l232.228572-402.285714L769.828571 146.285714h-464.457142L73.142857 548.571429 305.371429 950.857143h464.530285z'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
class PdfCreator {
|
|
9
|
+
constructor (pdf) {
|
|
10
|
+
this.pdf = pdf
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
addPage () {
|
|
14
|
+
this.pdf.addPage({
|
|
15
|
+
margin: 50
|
|
16
|
+
})
|
|
17
|
+
return 50
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
addHead (title, titleBg) {
|
|
21
|
+
this.pdf.font('msbold').fontSize(20).fillColor('#333333').text(title, 50, 50)
|
|
22
|
+
// Add an image, constrain it to a given size, and center it vertically and horizontally
|
|
23
|
+
this.pdf.image(titleBg, 467, 50, {
|
|
24
|
+
fit: [100, 30],
|
|
25
|
+
align: 'right',
|
|
26
|
+
valign: 'center'
|
|
27
|
+
})
|
|
28
|
+
this.pdf.moveTo(50, 85).lineTo(565, 85).stroke('#dadada')
|
|
29
|
+
return 100
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
addTitle (pointer, title) {
|
|
33
|
+
this.pdf.rect(50, pointer + 3, 2, 12).fill('#0099ff')
|
|
34
|
+
this.pdf.font('msbold').fontSize(13).fillColor('#333333').text(title, 58, pointer)
|
|
35
|
+
return pointer + 30
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
addSubTitle (pointer, label) {
|
|
39
|
+
this.pdf.circle(51, pointer + 8, 2).fill('#0099ff')
|
|
40
|
+
this.pdf.font('msbold').fontSize(11).fillColor('#333333').text(label, 58, pointer)
|
|
41
|
+
return pointer + 25
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
addThirdTitle (pointer, label) {
|
|
45
|
+
this.pdf.font('msbold').fontSize(10).fillColor('#333333').text(label, 50, pointer)
|
|
46
|
+
return pointer + 20
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
addForm (pointer, items) {
|
|
50
|
+
for (let i = 0; i < items.length; i = i + 2) {
|
|
51
|
+
let { label, value } = items[i]
|
|
52
|
+
this.pdf
|
|
53
|
+
.font('MSYH')
|
|
54
|
+
.fontSize(10)
|
|
55
|
+
.fillColor('#333333')
|
|
56
|
+
.text(`${label}:${value}`, 50, pointer)
|
|
57
|
+
if (items[i + 1]) {
|
|
58
|
+
this.pdf
|
|
59
|
+
.font('MSYH')
|
|
60
|
+
.fontSize(10)
|
|
61
|
+
.fillColor('#333333')
|
|
62
|
+
.text(`${items[i + 1].label}:${items[i + 1].value}`, 332.5, pointer)
|
|
63
|
+
}
|
|
64
|
+
pointer += 22
|
|
65
|
+
}
|
|
66
|
+
return pointer
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
addImage (pointer, url) {
|
|
70
|
+
this.pdf.image(url, 50, pointer, { fit: [515, 400], align: 'center', valign: 'center' })
|
|
71
|
+
return pointer + 410
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
addTable (pointer, cols, data) {
|
|
75
|
+
const colsCount = cols.length
|
|
76
|
+
const rowsCount = data.length + 1
|
|
77
|
+
let colWidth = 515 / colsCount
|
|
78
|
+
let rowHeight = 25
|
|
79
|
+
this.pdf.rect(50, pointer, 515, rowHeight).fill('#f8f8f9')
|
|
80
|
+
for (let i = 0; i < rowsCount; i++) {
|
|
81
|
+
if (pointer > 720) {
|
|
82
|
+
pointer = this.addPage()
|
|
83
|
+
}
|
|
84
|
+
this.pdf
|
|
85
|
+
.moveTo(50, pointer + rowHeight)
|
|
86
|
+
.lineTo(565, pointer + rowHeight)
|
|
87
|
+
.stroke('#dadada')
|
|
88
|
+
for (let j = 0; j < colsCount; j++) {
|
|
89
|
+
if (i === 0) {
|
|
90
|
+
// 表头
|
|
91
|
+
this.pdf
|
|
92
|
+
.font('msbold')
|
|
93
|
+
.fontSize(8)
|
|
94
|
+
.fillColor('#333333')
|
|
95
|
+
.text(cols[j].title || '#', 55 + j * colWidth, pointer + 7)
|
|
96
|
+
} else {
|
|
97
|
+
if (cols[j].slot === 'color') {
|
|
98
|
+
let {type, color} = data[i - 1]
|
|
99
|
+
let p = new SVGPathCommander(symbol[type]).transform({
|
|
100
|
+
translate: [58 + j * colWidth, pointer + 4],
|
|
101
|
+
scale:0.015,
|
|
102
|
+
origin: [0, 0]
|
|
103
|
+
}).toString()
|
|
104
|
+
this.pdf.path(p).fill(color)
|
|
105
|
+
} else {
|
|
106
|
+
this.pdf
|
|
107
|
+
.font('MSYH')
|
|
108
|
+
.fontSize(8)
|
|
109
|
+
.fillColor('#333333')
|
|
110
|
+
.text(data[i - 1][cols[j].key], 55 + j * colWidth, pointer + 7)
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
pointer += 30
|
|
115
|
+
}
|
|
116
|
+
if (!data.length) {
|
|
117
|
+
this.pdf
|
|
118
|
+
.moveTo(50, pointer + rowHeight)
|
|
119
|
+
.lineTo(565, pointer + rowHeight)
|
|
120
|
+
.stroke('#dadada')
|
|
121
|
+
this.pdf
|
|
122
|
+
.font('MSYH')
|
|
123
|
+
.fontSize(8)
|
|
124
|
+
.fillColor('#333333')
|
|
125
|
+
.text('暂无数据', 300, pointer + 7)
|
|
126
|
+
pointer += 30
|
|
127
|
+
}
|
|
128
|
+
return pointer + 20
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
addTree (pointer, items) {
|
|
132
|
+
for (let i = 0; i < items.length; i++) {
|
|
133
|
+
let { label, value, children: children1 } = items[i]
|
|
134
|
+
this.pdf.font('msbold').fontSize(10).fillColor('#333333').text(label, 50, pointer)
|
|
135
|
+
this.pdf.font('msbold').fontSize(10).fillColor('#333333').text(value, 332.5, pointer)
|
|
136
|
+
pointer += 22
|
|
137
|
+
if (children1) {
|
|
138
|
+
for(let j = 0;j < children1.length;j++) {
|
|
139
|
+
let { label, value, children: children2 } = children1[j]
|
|
140
|
+
this.pdf.font('msbold').fontSize(10).fillColor('#333333').text(label, 50, pointer)
|
|
141
|
+
this.pdf.font('msbold').fontSize(10).fillColor('#333333').text(value, 332.5, pointer)
|
|
142
|
+
pointer += 22
|
|
143
|
+
if (children2) {
|
|
144
|
+
for(let n = 0;n < children2.length;n++) {
|
|
145
|
+
let { label, value } = children2[n]
|
|
146
|
+
this.pdf.font('MSYH').fontSize(10).fillColor('#333333').text(label, 60, pointer)
|
|
147
|
+
this.pdf.font('MSYH').fontSize(10).fillColor('#333333').text(value, 332.5, pointer)
|
|
148
|
+
pointer += 22
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return pointer
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
addOverlapMap (pointer, image, legend, maxCount) {
|
|
158
|
+
pointer += 20
|
|
159
|
+
this.pdf.image(image, 50, pointer, { fit: [515, 330], align: 'center', valign: 'center' })
|
|
160
|
+
this.pdf.image(legend, 232, pointer + 340, { width: 150, height: 10 })
|
|
161
|
+
this.pdf
|
|
162
|
+
.font('MSYH')
|
|
163
|
+
.fontSize(9)
|
|
164
|
+
.fillColor('#333333')
|
|
165
|
+
.text('1', 225, pointer + 340)
|
|
166
|
+
this.pdf
|
|
167
|
+
.font('MSYH')
|
|
168
|
+
.fontSize(9)
|
|
169
|
+
.fillColor('#333333')
|
|
170
|
+
.text(maxCount, 385, pointer + 340)
|
|
171
|
+
return pointer + 390
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
addPhotosMap (pointer, image, legend) {
|
|
175
|
+
this.pdf.image(image, 50, pointer, { fit: [420, 350], align: 'center', valign: 'center' })
|
|
176
|
+
for (let i = 0; i < legend.stops.length; i++) {
|
|
177
|
+
let p = pointer + i * 20
|
|
178
|
+
let [value, color] = legend.stops[i]
|
|
179
|
+
this.pdf
|
|
180
|
+
.circle(485, p + 7, 6)
|
|
181
|
+
.lineWidth(0.5)
|
|
182
|
+
.fillAndStroke(color, '#333333')
|
|
183
|
+
this.pdf.font('MSYH').fontSize(9).fillColor('#333333').text(`${value} ${legend.unit}`, 500, p)
|
|
184
|
+
}
|
|
185
|
+
this.pdf.rect(475, pointer + legend.stops.length * 20 + 10, 60, 2).fillAndStroke('#32de32')
|
|
186
|
+
this.pdf
|
|
187
|
+
.font('MSYH')
|
|
188
|
+
.fontSize(9)
|
|
189
|
+
.fillColor('#333333')
|
|
190
|
+
.text(`X ${legend.ratio}`, 485, pointer + legend.stops.length * 20 + 20, {
|
|
191
|
+
width: 40,
|
|
192
|
+
align: 'center'
|
|
193
|
+
})
|
|
194
|
+
return pointer + 360
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
addDsmMap (pointer, image, legend, min, max) {
|
|
198
|
+
this.pdf.image(image, 50, pointer, { fit: [515, 350], align: 'center', valign: 'center' })
|
|
199
|
+
this.pdf.image(legend, 232, pointer + 360, { width: 150, height: 10 })
|
|
200
|
+
this.pdf
|
|
201
|
+
.font('MSYH')
|
|
202
|
+
.fontSize(9)
|
|
203
|
+
.fillColor('#333333')
|
|
204
|
+
.text(`${min}米`, 195, pointer + 360)
|
|
205
|
+
this.pdf
|
|
206
|
+
.font('MSYH')
|
|
207
|
+
.fontSize(9)
|
|
208
|
+
.fillColor('#333333')
|
|
209
|
+
.text(`${max}米`, 385, pointer + 360)
|
|
210
|
+
return pointer + 410
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
addAnnotationDetail (pointer, items) {
|
|
214
|
+
for(let i = 0;i < items.length;i++) {
|
|
215
|
+
if (pointer + 190 > 720) {
|
|
216
|
+
pointer = this.addPage()
|
|
217
|
+
}
|
|
218
|
+
let {name, type, color, data, image} = items[i]
|
|
219
|
+
// 标注名称
|
|
220
|
+
let p = new SVGPathCommander(symbol[type]).transform({
|
|
221
|
+
translate: [51, pointer],
|
|
222
|
+
scale:0.018,
|
|
223
|
+
origin: [0, 0]
|
|
224
|
+
}).toString()
|
|
225
|
+
this.pdf.path(p).fill(color)
|
|
226
|
+
this.pdf.font('msbold').fontSize(11).fillColor('#333333').text(name, 75, pointer + 2)
|
|
227
|
+
// 测量数据
|
|
228
|
+
let keys = Object.keys(data)
|
|
229
|
+
let rowHeight = 24
|
|
230
|
+
for(let j = 0;j < keys.length;j++) {
|
|
231
|
+
if (j % 2) {
|
|
232
|
+
this.pdf.rect(50, pointer + 30 + j * rowHeight, 245, rowHeight).stroke('#dedede')
|
|
233
|
+
} else {
|
|
234
|
+
this.pdf.rect(50, pointer + 30 + j * rowHeight, 245, rowHeight).fillAndStroke('#dedede', '#dedede')
|
|
235
|
+
}
|
|
236
|
+
let value = data[keys[j]]
|
|
237
|
+
this.pdf.font('msbold').fontSize(9).fillColor('#333333').text(keys[j], 58, pointer + 35 + j * rowHeight)
|
|
238
|
+
this.pdf.font('MSYH').fontSize(9).fillColor('#333333').text(value, 180, pointer + 35 + j * rowHeight)
|
|
239
|
+
}
|
|
240
|
+
// 缩略图
|
|
241
|
+
image && this.pdf.image(image, 310, pointer + 30, { width: 245, height: 125 })
|
|
242
|
+
pointer += 210
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export default PdfCreator
|