@mapcatch/util 1.0.9 → 1.0.10-a
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/CHANGELOG.md +8 -1
- package/dist/catchUtil.min.esm.js +9906 -10852
- package/dist/catchUtil.min.js +25 -27
- package/package.json +1 -2
- package/src/constants/bmap_types.js +2 -2
- package/src/constants/crs_types.js +22 -0
- package/src/constants/default_layers.js +9 -9
- package/src/constants/index.js +3 -2
- package/src/constants/layer_folders.js +4 -4
- package/src/constants/measurement_fields.js +198 -0
- package/src/gl-operations/shaders/fragment/convertDem.js +2 -2
- package/src/gl-operations/shaders/fragment/convolutionSmooth.js +2 -2
- package/src/gl-operations/shaders/fragment/diffCalc.js +2 -2
- package/src/gl-operations/shaders/fragment/drawResult.js +2 -2
- package/src/gl-operations/shaders/fragment/hillshading/hsAdvAmbientShadows.js +2 -2
- package/src/gl-operations/shaders/fragment/hillshading/hsAdvFinalBaselayer.js +2 -2
- package/src/gl-operations/shaders/fragment/hillshading/hsAdvNormals.js +2 -2
- package/src/gl-operations/shaders/fragment/hillshading/hsAdvSoftShadows.js +2 -2
- package/src/gl-operations/shaders/fragment/interpolateColor.js +2 -2
- package/src/gl-operations/shaders/fragment/interpolateColorOnly.js +2 -2
- package/src/gl-operations/shaders/fragment/interpolateValue.js +2 -2
- package/src/gl-operations/shaders/fragment/multiAnalyze1Calc.js +2 -2
- package/src/gl-operations/shaders/fragment/multiAnalyze2Calc.js +2 -2
- package/src/gl-operations/shaders/fragment/multiAnalyze3Calc.js +2 -2
- package/src/gl-operations/shaders/fragment/multiAnalyze4Calc.js +2 -2
- package/src/gl-operations/shaders/fragment/multiAnalyze5Calc.js +2 -2
- package/src/gl-operations/shaders/fragment/multiAnalyze6Calc.js +2 -2
- package/src/gl-operations/shaders/vertex/double.js +2 -2
- package/src/gl-operations/shaders/vertex/multi3.js +2 -2
- package/src/gl-operations/shaders/vertex/multi4.js +2 -2
- package/src/gl-operations/shaders/vertex/multi5.js +2 -2
- package/src/gl-operations/shaders/vertex/multi6.js +2 -2
- package/src/gl-operations/shaders/vertex/singleNotTransformed.js +2 -2
- package/src/index.js +0 -2
- package/src/util.js +31 -51
- package/src/constants/map_view_mode.js +0 -10
- package/src/exif/exif.js +0 -37
- package/src/exif/gps_tags.js +0 -33
- package/src/exif/ifd1_tags.js +0 -22
- package/src/exif/index.js +0 -33
- package/src/exif/iptc_field_map.js +0 -12
- package/src/exif/parse_image.js +0 -445
- package/src/exif/string_values.js +0 -137
- package/src/exif/tags.js +0 -75
- package/src/exif/tiff_tags.js +0 -35
- package/src/exif/util.js +0 -108
- package/src/image-size/detector.js +0 -24
- package/src/image-size/fromFile.js +0 -55
- package/src/image-size/index.js +0 -2
- package/src/image-size/lookup.js +0 -37
- package/src/image-size/types/bmp.js +0 -10
- package/src/image-size/types/cur.js +0 -16
- package/src/image-size/types/dds.js +0 -10
- package/src/image-size/types/gif.js +0 -11
- package/src/image-size/types/heif.js +0 -35
- package/src/image-size/types/icns.js +0 -112
- package/src/image-size/types/ico.js +0 -74
- package/src/image-size/types/index.js +0 -43
- package/src/image-size/types/j2c.js +0 -11
- package/src/image-size/types/jp2.js +0 -22
- package/src/image-size/types/jpg.js +0 -157
- package/src/image-size/types/ktx.js +0 -18
- package/src/image-size/types/png.js +0 -36
- package/src/image-size/types/pnm.js +0 -74
- package/src/image-size/types/psd.js +0 -10
- package/src/image-size/types/svg.js +0 -100
- package/src/image-size/types/tga.js +0 -14
- package/src/image-size/types/tiff.js +0 -92
- package/src/image-size/types/utils.js +0 -83
- package/src/image-size/types/webp.js +0 -67
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mapcatch/util",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10-a",
|
|
4
4
|
"main": "./dist/catchUtil.min.esm.js",
|
|
5
5
|
"repository": "",
|
|
6
6
|
"author": "wanyanyan",
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"lodash": "^4.17.21",
|
|
20
20
|
"moment": "^2.29.4",
|
|
21
21
|
"regl": "^2.1.0",
|
|
22
|
-
"spark-md5": "^3.0.2",
|
|
23
22
|
"upng-js": "^2.1.0",
|
|
24
23
|
"uuid": "^9.0.0"
|
|
25
24
|
},
|
|
@@ -7,8 +7,8 @@ export default [
|
|
|
7
7
|
{ // 影像地图
|
|
8
8
|
type: 'raster',
|
|
9
9
|
tileSize: 256,
|
|
10
|
-
tiles: ['
|
|
11
|
-
maxzoom:
|
|
10
|
+
tiles: ['http://ecn.t3.tiles.virtualearth.net/tiles/a{quadkey}.jpeg?g=1'],
|
|
11
|
+
maxzoom: 19,
|
|
12
12
|
layerType:'bmap'
|
|
13
13
|
},
|
|
14
14
|
{ // 影像标注
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
LOCAL_ENU: {
|
|
3
|
+
code: 0,
|
|
4
|
+
name: 'LOCAL_ENU'
|
|
5
|
+
},
|
|
6
|
+
LOCAL: {
|
|
7
|
+
code: 1,
|
|
8
|
+
name: 'LOCAL'
|
|
9
|
+
},
|
|
10
|
+
GEOGCS: {
|
|
11
|
+
code: 2,
|
|
12
|
+
name: 'Geographic'
|
|
13
|
+
},
|
|
14
|
+
PROJCS: {
|
|
15
|
+
code: 3,
|
|
16
|
+
name: 'Projected'
|
|
17
|
+
},
|
|
18
|
+
GEOCCS: {
|
|
19
|
+
code: 4,
|
|
20
|
+
name: 'Geocentric'
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -29,16 +29,16 @@ export default [
|
|
|
29
29
|
group: 'output',
|
|
30
30
|
visible: true,
|
|
31
31
|
opacity: 1,
|
|
32
|
-
class: '
|
|
32
|
+
class: '3d_tiles'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
type: 'point_cloud',
|
|
36
|
+
name: '三维点云',
|
|
37
|
+
group: 'output',
|
|
38
|
+
visible: false,
|
|
39
|
+
opacity: 1,
|
|
40
|
+
class: 'pnts'
|
|
33
41
|
},
|
|
34
|
-
// {
|
|
35
|
-
// type: 'point_cloud',
|
|
36
|
-
// name: '三维点云',
|
|
37
|
-
// group: 'output',
|
|
38
|
-
// visible: false,
|
|
39
|
-
// opacity: 1,
|
|
40
|
-
// dataTypes: ['normal']
|
|
41
|
-
// },
|
|
42
42
|
{
|
|
43
43
|
type: 'ndvi',
|
|
44
44
|
name: '植被指数(NDVI)',
|
package/src/constants/index.js
CHANGED
|
@@ -5,6 +5,7 @@ export {default as colors} from './colors'
|
|
|
5
5
|
export {default as defaultLayers} from './default_layers'
|
|
6
6
|
export {default as layerFolders} from './layer_folders'
|
|
7
7
|
export {default as layerIcons} from './layer_icons'
|
|
8
|
-
export {default as mapViewModes} from './map_view_mode'
|
|
9
8
|
export {default as taskParams} from './task_params'
|
|
10
|
-
export {default as tools} from './tools'
|
|
9
|
+
export {default as tools} from './tools'
|
|
10
|
+
export {default as measurementFields} from './measurement_fields'
|
|
11
|
+
export {default as crsTypes} from './crs_types'
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
normal: {
|
|
3
|
+
point: [
|
|
4
|
+
{
|
|
5
|
+
field: 'height',
|
|
6
|
+
label: '高程',
|
|
7
|
+
unit: 'm'
|
|
8
|
+
}
|
|
9
|
+
],
|
|
10
|
+
line: [
|
|
11
|
+
{
|
|
12
|
+
field: 'distance2d',
|
|
13
|
+
label: '平面长度',
|
|
14
|
+
unit: 'm'
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
field: 'distance3d',
|
|
18
|
+
label: '空间长度',
|
|
19
|
+
unit: 'm'
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
field: 'slope_min',
|
|
23
|
+
label: '最小坡度',
|
|
24
|
+
unit: '°'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
field: 'slope_max',
|
|
28
|
+
label: '最大坡度',
|
|
29
|
+
unit: '°'
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
field: 'height_min',
|
|
33
|
+
label: '最小高程',
|
|
34
|
+
unit: 'm'
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
field: 'height_max',
|
|
38
|
+
label: '最大高程',
|
|
39
|
+
unit: 'm'
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
polygon: [
|
|
43
|
+
{
|
|
44
|
+
field: 'area2d',
|
|
45
|
+
label: '平面面积',
|
|
46
|
+
unit: '㎡'
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
field: 'area3d',
|
|
50
|
+
label: '空间面积',
|
|
51
|
+
unit: '㎡'
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
field: 'distance2d',
|
|
55
|
+
label: '平面周长',
|
|
56
|
+
unit: 'm'
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
field: 'distance3d',
|
|
60
|
+
label: '空间周长',
|
|
61
|
+
unit: 'm'
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
{
|
|
65
|
+
field: 'height_min',
|
|
66
|
+
label: '最小高程',
|
|
67
|
+
unit: 'm'
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
field: 'height_max',
|
|
71
|
+
label: '最大高程',
|
|
72
|
+
unit: 'm'
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
infrared: {
|
|
77
|
+
point: [
|
|
78
|
+
{
|
|
79
|
+
field: 'temprature',
|
|
80
|
+
label: '温度',
|
|
81
|
+
unit: '℃'
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
line: [
|
|
85
|
+
{
|
|
86
|
+
field: 'distance2d',
|
|
87
|
+
label: '长度',
|
|
88
|
+
unit: 'm'
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
field: 'temprature_min',
|
|
92
|
+
label: '最低温度',
|
|
93
|
+
unit: '℃'
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
field: 'temprature_max',
|
|
97
|
+
label: '最高温度',
|
|
98
|
+
unit: '℃'
|
|
99
|
+
}
|
|
100
|
+
],
|
|
101
|
+
polygon: [
|
|
102
|
+
{
|
|
103
|
+
field: 'area2d',
|
|
104
|
+
label: '面积',
|
|
105
|
+
unit: '㎡'
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
field: 'distance2d',
|
|
109
|
+
label: '周长',
|
|
110
|
+
unit: 'm'
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
field: 'temprature_min',
|
|
114
|
+
label: '最低温度',
|
|
115
|
+
unit: '℃'
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
field: 'temprature_max',
|
|
119
|
+
label: '最高温度',
|
|
120
|
+
unit: '℃'
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
multispectral: {
|
|
125
|
+
point: [
|
|
126
|
+
{
|
|
127
|
+
field: 'height',
|
|
128
|
+
label: '高程',
|
|
129
|
+
unit: 'm'
|
|
130
|
+
}
|
|
131
|
+
],
|
|
132
|
+
line: [
|
|
133
|
+
{
|
|
134
|
+
field: 'distance2d',
|
|
135
|
+
label: '平面长度',
|
|
136
|
+
unit: 'm'
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
field: 'distance3d',
|
|
140
|
+
label: '空间长度',
|
|
141
|
+
unit: 'm'
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
field: 'slope_min',
|
|
145
|
+
label: '最小坡度',
|
|
146
|
+
unit: '°'
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
field: 'slope_max',
|
|
150
|
+
label: '最大坡度',
|
|
151
|
+
unit: '°'
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
field: 'height_min',
|
|
155
|
+
label: '最小高程',
|
|
156
|
+
unit: 'm'
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
field: 'height_max',
|
|
160
|
+
label: '最大高程',
|
|
161
|
+
unit: 'm'
|
|
162
|
+
}
|
|
163
|
+
],
|
|
164
|
+
polygon: [
|
|
165
|
+
{
|
|
166
|
+
field: 'area2d',
|
|
167
|
+
label: '平面面积',
|
|
168
|
+
unit: '㎡'
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
field: 'area3d',
|
|
172
|
+
label: '空间面积',
|
|
173
|
+
unit: '㎡'
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
field: 'distance2d',
|
|
177
|
+
label: '平面周长',
|
|
178
|
+
unit: 'm'
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
field: 'distance3d',
|
|
182
|
+
label: '空间周长',
|
|
183
|
+
unit: 'm'
|
|
184
|
+
},
|
|
185
|
+
|
|
186
|
+
{
|
|
187
|
+
field: 'height_min',
|
|
188
|
+
label: '最小高程',
|
|
189
|
+
unit: 'm'
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
field: 'height_max',
|
|
193
|
+
label: '最大高程',
|
|
194
|
+
unit: 'm'
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
}
|
|
198
|
+
}
|
package/src/index.js
CHANGED
package/src/util.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { v4 as uuidv4 } from 'uuid'
|
|
2
2
|
import moment from 'moment'
|
|
3
|
-
import SparkMD5 from 'spark-md5'
|
|
4
3
|
import _ from 'lodash'
|
|
5
|
-
import {getPhotoTags} from './exif'
|
|
6
4
|
import cameras from './constants/cameras'
|
|
7
|
-
import
|
|
5
|
+
import {getType, distance as calcDistance, midpoint as getMidpoint} from '@turf/turf'
|
|
8
6
|
import { layerGroups } from './constants'
|
|
7
|
+
import { mat4 } from 'gl-matrix'
|
|
9
8
|
|
|
10
9
|
export function generateId() { // 生成随机id
|
|
11
10
|
return uuidv4()
|
|
@@ -31,51 +30,6 @@ export function formatFileSize (value) { // 文件大小格式化,自动换算
|
|
|
31
30
|
return value + ' KB'
|
|
32
31
|
}
|
|
33
32
|
}
|
|
34
|
-
export async function getPhotoInfo(file) { // 获取照片的经纬度
|
|
35
|
-
let exif = await getPhotoTags(file)
|
|
36
|
-
let {GPSAltitude, GPSLatitude, GPSLatitudeRef, GPSLongitude, GPSLongitudeRef, DateTimeOriginal, Model, PixelXDimension, PixelYDimension} = exif
|
|
37
|
-
let position = null
|
|
38
|
-
if (GPSLongitude && GPSLatitude) {
|
|
39
|
-
position = {
|
|
40
|
-
lng: getGeoCoordOperator(GPSLongitudeRef) * toRadian(GPSLongitude),
|
|
41
|
-
lat: getGeoCoordOperator(GPSLatitudeRef) * toRadian(GPSLatitude),
|
|
42
|
-
alt: +GPSAltitude
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
let date = DateTimeOriginal && DateTimeOriginal.split(' ')[0].replaceAll(':', '-')
|
|
46
|
-
return {
|
|
47
|
-
date,
|
|
48
|
-
Model,
|
|
49
|
-
width: PixelXDimension,
|
|
50
|
-
height: PixelYDimension,
|
|
51
|
-
position
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
export function getPhotoMeta(file) { // 获取照片的元数据,包括exif和md5,为了提高计算效率,只取前64k进行计算
|
|
55
|
-
return new Promise((resolve, reject) => {
|
|
56
|
-
let md5, exif
|
|
57
|
-
getPhotoTags(file).then(data => {
|
|
58
|
-
exif = data
|
|
59
|
-
done()
|
|
60
|
-
})
|
|
61
|
-
let fileReader = new FileReader()
|
|
62
|
-
let spark = new SparkMD5.ArrayBuffer()
|
|
63
|
-
fileReader.readAsArrayBuffer(file)
|
|
64
|
-
fileReader.onload = e => {
|
|
65
|
-
spark.append(e.target.result)
|
|
66
|
-
md5 = spark.end()
|
|
67
|
-
done()
|
|
68
|
-
}
|
|
69
|
-
function done() {
|
|
70
|
-
if (!md5 || !exif) {
|
|
71
|
-
return
|
|
72
|
-
}
|
|
73
|
-
resolve({md5, exif})
|
|
74
|
-
fileReader = null
|
|
75
|
-
spark = null
|
|
76
|
-
}
|
|
77
|
-
})
|
|
78
|
-
}
|
|
79
33
|
export function getGeoCoordOperator(flag) { // 将照片的中的经纬度方位字母换成正负号
|
|
80
34
|
if (flag === 'N' || flag === 'E') {
|
|
81
35
|
return 1
|
|
@@ -236,7 +190,7 @@ export function downloadImage(base64) {
|
|
|
236
190
|
document.body.removeChild(a)
|
|
237
191
|
}
|
|
238
192
|
export function getGeometryType(feature) {
|
|
239
|
-
let type =
|
|
193
|
+
let type = getType(feature)
|
|
240
194
|
if (['Point', 'MultiPoint'].includes(type)) {
|
|
241
195
|
return 'point'
|
|
242
196
|
} else if (['LineString', 'MultiLineString'].includes(type)) {
|
|
@@ -290,7 +244,7 @@ export function getLineLabelFeature(lineFeature) {
|
|
|
290
244
|
let coordinates = lineFeature.geometry.coordinates
|
|
291
245
|
let temps = []
|
|
292
246
|
for(let i = 1;i < coordinates.length;i++) {
|
|
293
|
-
let distance =
|
|
247
|
+
let distance = calcDistance(coordinates[i-1], coordinates[i], {units: 'meters'})
|
|
294
248
|
if (distance > 30) {
|
|
295
249
|
temps.push([coordinates[i-1], coordinates[i]])
|
|
296
250
|
}
|
|
@@ -306,7 +260,7 @@ export function getLineLabelFeature(lineFeature) {
|
|
|
306
260
|
let start = project(labelLine[0])
|
|
307
261
|
let end = project(labelLine[1])
|
|
308
262
|
let angle = 360 - (Math.atan((start.y - end.y) / (end.x - start.x)) * 180) / Math.PI
|
|
309
|
-
let midPoint =
|
|
263
|
+
let midPoint = getMidpoint(labelLine[0], labelLine[1])
|
|
310
264
|
midPoint.properties = lineFeature.properties
|
|
311
265
|
midPoint.properties.angle = angle
|
|
312
266
|
midPoint.geometry.coordinates.push(((labelLine[0][2] || 0) + (labelLine[1][2] || 0)) / 2)
|
|
@@ -353,4 +307,30 @@ export function getTaskTreeList(taskInfo, annotations, layers) {
|
|
|
353
307
|
groupItem.items.push(d)
|
|
354
308
|
})
|
|
355
309
|
return groups
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
export function hasNaN (arr) {
|
|
313
|
+
for (let i = 0; i < arr.length; i++) {
|
|
314
|
+
if (Number.isNaN(arr[i])) {
|
|
315
|
+
return true
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return false
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
export function getRotationMatrix (pitch, roll, yaw) {
|
|
322
|
+
let orientation = []
|
|
323
|
+
let enu2ned = mat4.fromValues(0, 1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1)
|
|
324
|
+
let ned2cam = mat4.fromValues(0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1)
|
|
325
|
+
let m1 = mat4.fromZRotation(mat4.create(), yaw * Math.PI / 180)
|
|
326
|
+
let m2 = mat4.fromYRotation(mat4.create(), pitch * Math.PI / 180)
|
|
327
|
+
let m3 = mat4.fromXRotation(mat4.create(), roll * Math.PI / 180)
|
|
328
|
+
let rota = mat4.multiply(mat4.create(), mat4.multiply(mat4.create(), m1, m2), m3)
|
|
329
|
+
let rot = mat4.multiply(mat4.create(), mat4.multiply(mat4.create(), ned2cam, mat4.transpose(mat4.create(), rota)), enu2ned)
|
|
330
|
+
for (let i = 0; i < 3; i++) {
|
|
331
|
+
for (let j = 0; j < 3; j++) {
|
|
332
|
+
orientation[i * 3 + j] = rot[i + j * 4]
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return orientation
|
|
356
336
|
}
|