@openglobus/og 0.13.12 → 0.14.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/README.md +1 -4
- package/css/og.css +1 -1
- package/dist/@openglobus/og.css +1 -1
- package/dist/@openglobus/og.esm.js +2 -2
- package/dist/@openglobus/og.esm.js.map +1 -1
- package/dist/@openglobus/og.umd.js +2 -2
- package/dist/@openglobus/og.umd.js.map +1 -1
- package/package.json +2 -2
- package/src/og/Globe.js +14 -4
- package/src/og/camera/Camera.js +7 -7
- package/src/og/camera/PlanetCamera.js +1 -1
- package/src/og/control/LayerSwitcher.js +48 -31
- package/src/og/control/MouseNavigation.js +2 -2
- package/src/og/control/ScaleControl.js +30 -10
- package/src/og/control/SimpleSkyBackground.js +184 -0
- package/src/og/control/Sun.js +3 -2
- package/src/og/ellipsoid/Ellipsoid.js +119 -92
- package/src/og/ellipsoid/wgs84.js +13 -13
- package/src/og/entity/Entity.js +3 -3
- package/src/og/entity/GeometryHandler.js +1341 -1337
- package/src/og/entity/Polyline.js +0 -16
- package/src/og/entity/Ray.js +0 -10
- package/src/og/entity/RayHandler.js +3 -44
- package/src/og/entity/Strip.js +1 -6
- package/src/og/index.js +106 -95
- package/src/og/layer/GeoVideo.js +1 -0
- package/src/og/layer/Layer.js +62 -3
- package/src/og/layer/XYZ.js +4 -3
- package/src/og/math/Line3.js +140 -139
- package/src/og/math/Plane.js +118 -117
- package/src/og/math/Ray.js +242 -239
- package/src/og/math/Vec3.js +56 -37
- package/src/og/math/Vec4.js +3 -4
- package/src/og/math.js +21 -21
- package/src/og/quadTree/EarthQuadTreeStrategy.js +29 -0
- package/src/og/quadTree/MarsQuadTreeStrategy.js +27 -0
- package/src/og/quadTree/Node.js +55 -218
- package/src/og/quadTree/QuadTreeStrategy.js +93 -0
- package/src/og/quadTree/Wgs84QuadTreeStrategy.js +26 -0
- package/src/og/renderer/Renderer.js +13 -12
- package/src/og/renderer/RendererEvents.js +1065 -1065
- package/src/og/scene/Planet.js +84 -273
- package/src/og/segment/Segment.js +18 -25
- package/src/og/segment/SegmentLonLat.js +34 -31
- package/src/og/segment/SegmentLonLatWgs84.js +41 -0
- package/src/og/shaders/ray.js +13 -6
- package/src/og/shaders/toneMapping.js +5 -5
- package/src/og/terrain/GlobusTerrain.js +3 -2
- package/src/og/terrain/MapboxTerrain.js +231 -52
- package/src/og/utils/quadTreeType.js +11 -0
- package/src/og/utils/shared.js +942 -942
- package/src/og/webgl/Handler.js +22 -9
- package/types/Globe.d.ts +7 -0
- package/types/camera/Camera.d.ts +3 -3
- package/types/camera/PlanetCamera.d.ts +1 -1
- package/types/control/LayerSwitcher.d.ts +1 -1
- package/types/control/ScaleControl.d.ts +2 -1
- package/types/control/SimpleSkyBackground.d.ts +11 -0
- package/types/control/Sun.d.ts +2 -1
- package/types/ellipsoid/Ellipsoid.d.ts +3 -2
- package/types/entity/Ray.d.ts +0 -3
- package/types/entity/RayHandler.d.ts +0 -4
- package/types/index.d.ts +6 -1
- package/types/layer/Layer.d.ts +8 -0
- package/types/math/Vec3.d.ts +19 -16
- package/types/math/Vec4.d.ts +2 -3
- package/types/math.d.ts +20 -20
- package/types/quadTree/EarthQuadTreeStrategy.d.ts +3 -0
- package/types/quadTree/MarsQuadTreeStrategy.d.ts +3 -0
- package/types/quadTree/Node.d.ts +0 -1
- package/types/quadTree/QuadTreeStrategy.d.ts +21 -0
- package/types/quadTree/Wgs84QuadTreeStrategy.d.ts +3 -0
- package/types/renderer/Renderer.d.ts +1 -1
- package/types/scene/Planet.d.ts +6 -24
- package/types/segment/Segment.d.ts +4 -4
- package/types/segment/SegmentLonLat.d.ts +6 -2
- package/types/segment/SegmentLonLatWgs84.d.ts +4 -0
- package/types/terrain/MapboxTerrain.d.ts +2 -1
- package/types/utils/quadTreeType.d.ts +8 -0
- package/types/webgl/Handler.d.ts +4 -1
|
@@ -2,10 +2,15 @@ import { getTileExtent } from "../mercator.js";
|
|
|
2
2
|
import { Layer } from "../layer/Layer.js";
|
|
3
3
|
import { GlobusTerrain } from "./GlobusTerrain.js";
|
|
4
4
|
import { isPowerOfTwo } from "../math.js";
|
|
5
|
+
import * as mercator from "../mercator.js";
|
|
5
6
|
|
|
6
7
|
const KEY =
|
|
7
8
|
"pk.eyJ1IjoiZm94bXVsZGVyODMiLCJhIjoiY2pqYmR3dG5oM2Z1bzNrczJqYm5pODhuNSJ9.Y4DRmEPhb-XSlCR9CAXACQ";
|
|
8
9
|
|
|
10
|
+
const rgb2Height = (r, g, b) => {
|
|
11
|
+
return -10000 + 0.1 * (r * 256 * 256 + g * 256 + b);
|
|
12
|
+
};
|
|
13
|
+
|
|
9
14
|
class MapboxTerrain extends GlobusTerrain {
|
|
10
15
|
constructor(name, options = {}) {
|
|
11
16
|
super(name || "mapbox", options);
|
|
@@ -39,10 +44,12 @@ class MapboxTerrain extends GlobusTerrain {
|
|
|
39
44
|
this._imageSize = options.imageSize || 256;
|
|
40
45
|
|
|
41
46
|
this._ctx = this._createTemporalCanvas(this._imageSize);
|
|
47
|
+
|
|
48
|
+
this._imageDataCache = {};
|
|
42
49
|
}
|
|
43
50
|
|
|
44
51
|
isBlur(segment) {
|
|
45
|
-
if (segment.tileZoom >=
|
|
52
|
+
if (segment.tileZoom >= 16) {
|
|
46
53
|
return true;
|
|
47
54
|
}
|
|
48
55
|
return false;
|
|
@@ -52,15 +59,19 @@ class MapboxTerrain extends GlobusTerrain {
|
|
|
52
59
|
let canvas = document.createElement("canvas");
|
|
53
60
|
canvas.width = size;
|
|
54
61
|
canvas.height = size;
|
|
55
|
-
return canvas.getContext("2d"
|
|
62
|
+
return canvas.getContext("2d",
|
|
63
|
+
{
|
|
64
|
+
willReadFrequently: true
|
|
65
|
+
});
|
|
56
66
|
}
|
|
57
67
|
|
|
58
|
-
_createHeights(data, tileIndex, tileX, tileY, tileZoom, extent) {
|
|
59
|
-
const SIZE = data.width;
|
|
68
|
+
_createHeights(data, tileIndex, tileX, tileY, tileZoom, extent, preventChildren) {
|
|
60
69
|
|
|
61
|
-
this._ctx.clearRect(0, 0,
|
|
70
|
+
this._ctx.clearRect(0, 0, this._imageSize, this._imageSize);
|
|
62
71
|
this._ctx.drawImage(data, 0, 0);
|
|
63
|
-
let rgbaData = this._ctx.getImageData(0, 0,
|
|
72
|
+
let rgbaData = this._ctx.getImageData(0, 0, this._imageSize, this._imageSize).data;
|
|
73
|
+
|
|
74
|
+
const SIZE = data.width;
|
|
64
75
|
|
|
65
76
|
//
|
|
66
77
|
//Non power of two images
|
|
@@ -71,25 +82,42 @@ class MapboxTerrain extends GlobusTerrain {
|
|
|
71
82
|
return outCurrenElevations;
|
|
72
83
|
}
|
|
73
84
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
85
|
+
if (this._imageSize === this.plainGridSize) {
|
|
86
|
+
let elevationsSize = (this.plainGridSize + 1) * (this.plainGridSize + 1);
|
|
87
|
+
let outCurrenElevations = new Float32Array(elevationsSize);
|
|
88
|
+
for (let k = 0, len = this._imageSize * this._imageSize; k < len; k++) {
|
|
89
|
+
let j = k % this._imageSize,
|
|
90
|
+
i = Math.floor(k / this._imageSize);
|
|
91
|
+
let fromInd4 = k * 4;
|
|
92
|
+
let h = rgb2Height(rgbaData[fromInd4], rgbaData[fromInd4 + 1], rgbaData[fromInd4 + 2]);
|
|
93
|
+
outCurrenElevations[i * (this._imageSize + 1) + j] = h;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
for (let i = 0, len = this._imageSize; i < len; i++) {
|
|
97
|
+
let j = this._imageSize - 1;
|
|
98
|
+
let fromInd4 = (i * this._imageSize + j) * 4;
|
|
99
|
+
let h = rgb2Height(rgbaData[fromInd4], rgbaData[fromInd4 + 1], rgbaData[fromInd4 + 2]);
|
|
100
|
+
outCurrenElevations[i * (this._imageSize + 1) + this._imageSize] = h;
|
|
101
|
+
}
|
|
78
102
|
|
|
79
|
-
|
|
103
|
+
for (let j = 0, len = this._imageSize; j < len; j++) {
|
|
104
|
+
let i = this._imageSize - 1;
|
|
105
|
+
let fromInd4 = (i * this._imageSize + j) * 4;
|
|
106
|
+
let h = rgb2Height(rgbaData[fromInd4], rgbaData[fromInd4 + 1], rgbaData[fromInd4 + 2]);
|
|
107
|
+
outCurrenElevations[this._imageSize * (this._imageSize + 1) + j] = h;
|
|
108
|
+
}
|
|
80
109
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
// outCurrenElevations[i] = -10000 + 0.1 * (rgbaData[i4] * 256 * 256 + rgbaData[i4 + 1] * 256 + rgbaData[i4 + 2]);
|
|
84
|
-
// }
|
|
110
|
+
let h = rgb2Height(rgbaData[rgbaData.length - 4], rgbaData[rgbaData.length - 3], rgbaData[rgbaData.length - 2]);
|
|
111
|
+
outCurrenElevations[outCurrenElevations.length - 1] = h;
|
|
85
112
|
|
|
86
|
-
|
|
87
|
-
|
|
113
|
+
return outCurrenElevations;
|
|
114
|
+
}
|
|
88
115
|
|
|
89
116
|
//
|
|
90
117
|
// Power of two images
|
|
91
118
|
//
|
|
92
119
|
let elevationsSize = (this.plainGridSize + 1) * (this.plainGridSize + 1);
|
|
120
|
+
|
|
93
121
|
let d = SIZE / this.plainGridSize;
|
|
94
122
|
|
|
95
123
|
let outCurrenElevations = new Float32Array(elevationsSize);
|
|
@@ -102,40 +130,99 @@ class MapboxTerrain extends GlobusTerrain {
|
|
|
102
130
|
}
|
|
103
131
|
}
|
|
104
132
|
|
|
105
|
-
|
|
106
|
-
rgbaData,
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
133
|
+
if (preventChildren) {
|
|
134
|
+
extractElevationTilesMapboxNoChildren(rgbaData, this.noDataValues, outCurrenElevations);
|
|
135
|
+
} else {
|
|
136
|
+
extractElevationTilesMapbox(
|
|
137
|
+
rgbaData,
|
|
138
|
+
this.noDataValues,
|
|
139
|
+
outCurrenElevations,
|
|
140
|
+
outChildrenElevations
|
|
141
|
+
);
|
|
142
|
+
}
|
|
111
143
|
|
|
112
144
|
this._elevationCache[tileIndex] = {
|
|
113
145
|
heights: outCurrenElevations,
|
|
114
146
|
extent: extent//segment.getExtent()
|
|
115
147
|
};
|
|
116
148
|
|
|
117
|
-
|
|
118
|
-
for (let
|
|
119
|
-
let
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
149
|
+
if (!preventChildren) {
|
|
150
|
+
for (let i = 0; i < d; i++) {
|
|
151
|
+
for (let j = 0; j < d; j++) {
|
|
152
|
+
let x = tileX * 2 + j,
|
|
153
|
+
y = tileY * 2 + i,
|
|
154
|
+
z = tileZoom + 1;
|
|
155
|
+
let tileIndex = Layer.getTileIndex(x, y, z);
|
|
156
|
+
this._elevationCache[tileIndex] = {
|
|
157
|
+
heights: outChildrenElevations[i][j],
|
|
158
|
+
extent: getTileExtent(x, y, z)
|
|
159
|
+
};
|
|
160
|
+
}
|
|
127
161
|
}
|
|
128
162
|
}
|
|
129
163
|
|
|
130
164
|
return outCurrenElevations;
|
|
131
165
|
}
|
|
166
|
+
|
|
167
|
+
getHeightAsync(lonLat, callback, zoom) {
|
|
168
|
+
if (!lonLat || lonLat.lat > mercator.MAX_LAT || lonLat.lat < mercator.MIN_LAT) {
|
|
169
|
+
callback(0);
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
let z = zoom || this.maxZoom,
|
|
174
|
+
size = mercator.POLE2 / Math.pow(2, z),
|
|
175
|
+
merc = mercator.forward(lonLat),
|
|
176
|
+
x = Math.floor((mercator.POLE + merc.lon) / size),
|
|
177
|
+
y = Math.floor((mercator.POLE - merc.lat) / size);
|
|
178
|
+
|
|
179
|
+
let tileIndex = Layer.getTileIndex(x, y, z),
|
|
180
|
+
extent = mercator.getTileExtent(x, y, z);
|
|
181
|
+
|
|
182
|
+
let sizeImgW = extent.getWidth() / (this._imageSize - 1),
|
|
183
|
+
sizeImgH = extent.getHeight() / (this._imageSize - 1);
|
|
184
|
+
|
|
185
|
+
let i = this._imageSize - Math.ceil((merc.lat - extent.southWest.lat) / sizeImgH) - 1,
|
|
186
|
+
j = Math.floor((merc.lon - extent.southWest.lon) / sizeImgW);
|
|
187
|
+
let index = (i * this._imageSize + j) * 4;
|
|
188
|
+
|
|
189
|
+
if (this._imageDataCache[tileIndex]) {
|
|
190
|
+
let data = this._imageDataCache[tileIndex];
|
|
191
|
+
callback(rgb2Height(data[index], data[index + 1], data[index + 2]));
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (!this._fetchCache[tileIndex]) {
|
|
196
|
+
let url = this._buildURL(x, y, z);
|
|
197
|
+
this._fetchCache[tileIndex] = this._loader.fetch({
|
|
198
|
+
src: url,
|
|
199
|
+
type: this._dataType
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
this._fetchCache[tileIndex].then((response) => {
|
|
204
|
+
if (response.status === "ready") {
|
|
205
|
+
this._ctx.clearRect(0, 0, this._imageSize, this._imageSize);
|
|
206
|
+
this._ctx.drawImage(response.data, 0, 0);
|
|
207
|
+
let data = this._ctx.getImageData(0, 0, 256, 256).data;
|
|
208
|
+
this._imageDataCache[tileIndex] = data;
|
|
209
|
+
callback(rgb2Height(data[index], data[index + 1], data[index + 2]));
|
|
210
|
+
} else if (response.status === "error") {
|
|
211
|
+
callback(0);
|
|
212
|
+
} else {
|
|
213
|
+
this._fetchCache[tileIndex] = null;
|
|
214
|
+
delete this._fetchCache[tileIndex];
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
132
220
|
}
|
|
133
221
|
|
|
134
222
|
function extractElevationTilesMapboxNonPowerOfTwo(rgbaData, outCurrenElevations) {
|
|
135
223
|
for (let i = 0, len = outCurrenElevations.length; i < len; i++) {
|
|
136
224
|
let i4 = i * 4;
|
|
137
|
-
outCurrenElevations[i] =
|
|
138
|
-
-10000 + 0.1 * (rgbaData[i4] * 256 * 256 + rgbaData[i4 + 1] * 256 + rgbaData[i4 + 2]);
|
|
225
|
+
outCurrenElevations[i] = rgb2Height(rgbaData[i4], rgbaData[i4 + 1], rgbaData[i4 + 2]);
|
|
139
226
|
}
|
|
140
227
|
}
|
|
141
228
|
|
|
@@ -161,8 +248,8 @@ function extractElevationTilesMapbox(
|
|
|
161
248
|
) {
|
|
162
249
|
let k4 = k * 4;
|
|
163
250
|
|
|
164
|
-
let height =
|
|
165
|
-
|
|
251
|
+
let height = rgb2Height(rgbaData[k4], rgbaData[k4 + 1], rgbaData[k4 + 2]);
|
|
252
|
+
//-10000 + 0.1 * (rgbaData[k4] * 256 * 256 + rgbaData[k4 + 1] * 256 + rgbaData[k4 + 2]);
|
|
166
253
|
|
|
167
254
|
let isNoDataCurrent = MapboxTerrain.checkNoDataValue(noDataValues, height),
|
|
168
255
|
isNoDataRight = false,
|
|
@@ -189,9 +276,8 @@ function extractElevationTilesMapbox(
|
|
|
189
276
|
|
|
190
277
|
if ((j + 1) % destSize === 0 && j !== sourceSize - 1) {
|
|
191
278
|
//current tile
|
|
192
|
-
rightHeight =
|
|
193
|
-
|
|
194
|
-
0.1 * (rgbaData[k4 + 4] * 256 * 256 + rgbaData[k4 + 5] * 256 + rgbaData[k4 + 6]);
|
|
279
|
+
rightHeight = rgb2Height(rgbaData[k4 + 4], rgbaData[k4 + 5], rgbaData[k4 + 6]);
|
|
280
|
+
// -10000 + 0.1 * (rgbaData[k4 + 4] * 256 * 256 + rgbaData[k4 + 5] * 256 + rgbaData[k4 + 6]);
|
|
195
281
|
|
|
196
282
|
isNoDataRight = MapboxTerrain.checkNoDataValue(noDataValues, rightHeight);
|
|
197
283
|
|
|
@@ -217,12 +303,8 @@ function extractElevationTilesMapbox(
|
|
|
217
303
|
//current tile
|
|
218
304
|
sourceSize4 = sourceSize * 4;
|
|
219
305
|
|
|
220
|
-
bottomHeight =
|
|
221
|
-
|
|
222
|
-
0.1 *
|
|
223
|
-
(rgbaData[k4 + sourceSize4] * 256 * 256 +
|
|
224
|
-
rgbaData[k4 + sourceSize4 + 1] * 256 +
|
|
225
|
-
rgbaData[k4 + sourceSize4 + 2]);
|
|
306
|
+
bottomHeight = rgb2Height(rgbaData[k4 + sourceSize4], rgbaData[k4 + sourceSize4 + 1], rgbaData[k4 + sourceSize4 + 2]);
|
|
307
|
+
// -10000 + 0.1 * (rgbaData[k4 + sourceSize4] * 256 * 256 + rgbaData[k4 + sourceSize4 + 1] * 256 + rgbaData[k4 + sourceSize4 + 2]);
|
|
226
308
|
|
|
227
309
|
isNoDataBottom = MapboxTerrain.checkNoDataValue(noDataValues, bottomHeight);
|
|
228
310
|
|
|
@@ -251,12 +333,8 @@ function extractElevationTilesMapbox(
|
|
|
251
333
|
i !== sourceSize - 1
|
|
252
334
|
) {
|
|
253
335
|
//current tile
|
|
254
|
-
let rightBottomHeight =
|
|
255
|
-
|
|
256
|
-
0.1 *
|
|
257
|
-
(rgbaData[k4 + sourceSize4 + 4] * 256 * 256 +
|
|
258
|
-
rgbaData[k4 + sourceSize4 + 5] * 256 +
|
|
259
|
-
rgbaData[k4 + sourceSize4 + 6]);
|
|
336
|
+
let rightBottomHeight = rgb2Height(rgbaData[k4 + sourceSize4 + 4], rgbaData[k4 + sourceSize4 + 5], rgbaData[k4 + sourceSize4 + 6]);
|
|
337
|
+
// -10000 + 0.1 * (rgbaData[k4 + sourceSize4 + 4] * 256 * 256 + rgbaData[k4 + sourceSize4 + 5] * 256 + rgbaData[k4 + sourceSize4 + 6]);
|
|
260
338
|
|
|
261
339
|
let isNoDataRightBottom = MapboxTerrain.checkNoDataValue(
|
|
262
340
|
noDataValues,
|
|
@@ -289,4 +367,105 @@ function extractElevationTilesMapbox(
|
|
|
289
367
|
}
|
|
290
368
|
}
|
|
291
369
|
|
|
370
|
+
function extractElevationTilesMapboxNoChildren(
|
|
371
|
+
rgbaData,
|
|
372
|
+
noDataValues,
|
|
373
|
+
outCurrenElevations
|
|
374
|
+
) {
|
|
375
|
+
let destSize = Math.sqrt(outCurrenElevations.length) - 1;
|
|
376
|
+
let sourceSize = Math.sqrt(rgbaData.length / 4);
|
|
377
|
+
let dt = sourceSize / destSize;
|
|
378
|
+
|
|
379
|
+
let rightHeight = 0,
|
|
380
|
+
bottomHeight = 0,
|
|
381
|
+
sourceSize4 = 0;
|
|
382
|
+
|
|
383
|
+
for (
|
|
384
|
+
let k = 0, currIndex = 0, sourceDataLength = rgbaData.length / 4;
|
|
385
|
+
k < sourceDataLength;
|
|
386
|
+
k++
|
|
387
|
+
) {
|
|
388
|
+
let k4 = k * 4;
|
|
389
|
+
|
|
390
|
+
let height = rgb2Height(rgbaData[k4], rgbaData[k4 + 1], rgbaData[k4 + 2]);
|
|
391
|
+
//-10000 + 0.1 * (rgbaData[k4] * 256 * 256 + rgbaData[k4 + 1] * 256 + rgbaData[k4 + 2]);
|
|
392
|
+
|
|
393
|
+
let isNoDataCurrent = MapboxTerrain.checkNoDataValue(noDataValues, height),
|
|
394
|
+
isNoDataRight = false,
|
|
395
|
+
isNoDataBottom = false;
|
|
396
|
+
|
|
397
|
+
let i = Math.floor(k / sourceSize),
|
|
398
|
+
j = k % sourceSize;
|
|
399
|
+
|
|
400
|
+
let tileX = Math.floor(j / destSize),
|
|
401
|
+
tileY = Math.floor(i / destSize);
|
|
402
|
+
|
|
403
|
+
if ((i + tileY) % dt === 0 && (j + tileX) % dt === 0) {
|
|
404
|
+
outCurrenElevations[currIndex++] = height;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
if ((j + 1) % destSize === 0 && j !== sourceSize - 1) {
|
|
408
|
+
//current tile
|
|
409
|
+
rightHeight = rgb2Height(rgbaData[k4 + 4], rgbaData[k4 + 5], rgbaData[k4 + 6]);
|
|
410
|
+
//-10000 + 0.1 * (rgbaData[k4 + 4] * 256 * 256 + rgbaData[k4 + 5] * 256 + rgbaData[k4 + 6]);
|
|
411
|
+
|
|
412
|
+
isNoDataRight = MapboxTerrain.checkNoDataValue(noDataValues, rightHeight);
|
|
413
|
+
|
|
414
|
+
let middleHeight = height;
|
|
415
|
+
|
|
416
|
+
if (!(isNoDataCurrent || isNoDataRight)) {
|
|
417
|
+
middleHeight = (height + rightHeight) * 0.5;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
if ((i + tileY) % dt === 0) {
|
|
421
|
+
outCurrenElevations[currIndex++] = middleHeight;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
if ((i + 1) % destSize === 0 && i !== sourceSize - 1) {
|
|
426
|
+
//current tile
|
|
427
|
+
sourceSize4 = sourceSize * 4;
|
|
428
|
+
|
|
429
|
+
bottomHeight = rgb2Height(rgbaData[k4 + sourceSize4], rgbaData[k4 + sourceSize4 + 1], rgbaData[k4 + sourceSize4 + 2]);
|
|
430
|
+
// -10000 + 0.1 * (rgbaData[k4 + sourceSize4] * 256 * 256 + rgbaData[k4 + sourceSize4 + 1] * 256 + rgbaData[k4 + sourceSize4 + 2]);
|
|
431
|
+
|
|
432
|
+
isNoDataBottom = MapboxTerrain.checkNoDataValue(noDataValues, bottomHeight);
|
|
433
|
+
|
|
434
|
+
let middleHeight = (height + bottomHeight) * 0.5;
|
|
435
|
+
|
|
436
|
+
if (!(isNoDataCurrent || isNoDataBottom)) {
|
|
437
|
+
middleHeight = (height + bottomHeight) * 0.5;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
if ((j + tileX) % dt === 0) {
|
|
441
|
+
outCurrenElevations[currIndex++] = middleHeight;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
if (
|
|
446
|
+
(j + 1) % destSize === 0 &&
|
|
447
|
+
j !== sourceSize - 1 &&
|
|
448
|
+
(i + 1) % destSize === 0 &&
|
|
449
|
+
i !== sourceSize - 1
|
|
450
|
+
) {
|
|
451
|
+
//current tile
|
|
452
|
+
let rightBottomHeight = rgb2Height(rgbaData[k4 + sourceSize4 + 4], rgbaData[k4 + sourceSize4 + 5], rgbaData[k4 + sourceSize4 + 6]);
|
|
453
|
+
// -10000 + 0.1 * (rgbaData[k4 + sourceSize4 + 4] * 256 * 256 + rgbaData[k4 + sourceSize4 + 5] * 256 + rgbaData[k4 + sourceSize4 + 6]);
|
|
454
|
+
|
|
455
|
+
let isNoDataRightBottom = MapboxTerrain.checkNoDataValue(
|
|
456
|
+
noDataValues,
|
|
457
|
+
rightBottomHeight
|
|
458
|
+
);
|
|
459
|
+
|
|
460
|
+
let middleHeight = height;
|
|
461
|
+
|
|
462
|
+
if (!(isNoDataCurrent || isNoDataRight || isNoDataBottom || isNoDataRightBottom)) {
|
|
463
|
+
middleHeight = (height + rightHeight + bottomHeight + rightBottomHeight) * 0.25;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
outCurrenElevations[currIndex++] = middleHeight;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
|
|
292
471
|
export { MapboxTerrain };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { EarthQuadTreeStrategy } from "../quadTree/EarthQuadTreeStrategy.js";
|
|
4
|
+
import { MarsQuadTreeStrategy } from "../quadTree/MarsQuadTreeStrategy.js";
|
|
5
|
+
import { Wgs84QuadTreeStrategy } from "../quadTree/Wgs84QuadTreeStrategy.js";
|
|
6
|
+
|
|
7
|
+
export const quadTreeStrategyType = {
|
|
8
|
+
earth: EarthQuadTreeStrategy,
|
|
9
|
+
mars: MarsQuadTreeStrategy,
|
|
10
|
+
wgs84: Wgs84QuadTreeStrategy
|
|
11
|
+
}
|