You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
import AttributeCompression from "./AttributeCompression.js";
|
|
import Cartesian3 from "./Cartesian3.js";
|
|
import Cartographic from "./Cartographic.js";
|
|
import CesiumMath from "./Math.js";
|
|
|
|
var maxShort = 32767;
|
|
|
|
var scratchBVCartographic = new Cartographic();
|
|
var scratchEncodedPosition = new Cartesian3();
|
|
|
|
function decodeVectorPolylinePositions(
|
|
positions,
|
|
rectangle,
|
|
minimumHeight,
|
|
maximumHeight,
|
|
ellipsoid
|
|
) {
|
|
var positionsLength = positions.length / 3;
|
|
var uBuffer = positions.subarray(0, positionsLength);
|
|
var vBuffer = positions.subarray(positionsLength, 2 * positionsLength);
|
|
var heightBuffer = positions.subarray(
|
|
2 * positionsLength,
|
|
3 * positionsLength
|
|
);
|
|
AttributeCompression.zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer);
|
|
|
|
var decoded = new Float64Array(positions.length);
|
|
for (var i = 0; i < positionsLength; ++i) {
|
|
var u = uBuffer[i];
|
|
var v = vBuffer[i];
|
|
var h = heightBuffer[i];
|
|
|
|
var lon = CesiumMath.lerp(rectangle.west, rectangle.east, u / maxShort);
|
|
var lat = CesiumMath.lerp(rectangle.south, rectangle.north, v / maxShort);
|
|
var alt = CesiumMath.lerp(minimumHeight, maximumHeight, h / maxShort);
|
|
|
|
var cartographic = Cartographic.fromRadians(
|
|
lon,
|
|
lat,
|
|
alt,
|
|
scratchBVCartographic
|
|
);
|
|
var decodedPosition = ellipsoid.cartographicToCartesian(
|
|
cartographic,
|
|
scratchEncodedPosition
|
|
);
|
|
Cartesian3.pack(decodedPosition, decoded, i * 3);
|
|
}
|
|
return decoded;
|
|
}
|
|
export default decodeVectorPolylinePositions;
|