cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
74 lines (73 loc) • 2.03 kB
JavaScript
import glmatrix from "../../../../claygl/src/glmatrix/index.mjs";
var vec3 = glmatrix.vec3;
function Globe(radius) {
this.radius = radius;
this.viewGL = null;
this.altitudeAxis;
this.displacementData = null;
this.displacementWidth;
this.displacementHeight;
}
Globe.prototype = {
constructor: Globe,
dimensions: ["lng", "lat", "alt"],
type: "globe",
containPoint: function() {
},
setDisplacementData: function(data, width, height) {
this.displacementData = data;
this.displacementWidth = width;
this.displacementHeight = height;
},
_getDisplacementScale: function(lng, lat) {
var i = (lng + 180) / 360 * (this.displacementWidth - 1);
var j = (90 - lat) / 180 * (this.displacementHeight - 1);
var idx = Math.round(i) + Math.round(j) * this.displacementWidth;
return this.displacementData[idx];
},
dataToPoint: function(data, out) {
var lng = data[0];
var lat = data[1];
var altVal = data[2] || 0;
var r = this.radius;
if (this.displacementData) {
r *= 1 + this._getDisplacementScale(lng, lat);
}
if (this.altitudeAxis) {
r += this.altitudeAxis.dataToCoord(altVal);
}
lng = lng * Math.PI / 180;
lat = lat * Math.PI / 180;
var r0 = Math.cos(lat) * r;
out = out || [];
out[0] = -r0 * Math.cos(lng + Math.PI);
out[1] = Math.sin(lat) * r;
out[2] = r0 * Math.sin(lng + Math.PI);
return out;
},
pointToData: function(point, out) {
var x = point[0];
var y = point[1];
var z = point[2];
var len = vec3.len(point);
x /= len;
y /= len;
z /= len;
var theta = Math.asin(y);
var phi = Math.atan2(z, -x);
if (phi < 0) {
phi = Math.PI * 2 + phi;
}
var lat = theta * 180 / Math.PI;
var lng = phi * 180 / Math.PI - 180;
out = out || [];
out[0] = lng;
out[1] = lat;
out[2] = len - this.radius;
if (this.altitudeAxis) {
out[2] = this.altitudeAxis.coordToData(out[2]);
}
return out;
}
};
export { Globe as default };