替换这个文件中的._transformNode方法,以及注释掉一个检验坐标系的地方即可
\library\4.16\esri\views的SceneView.js
方法修改前:g.prototype._transformNode = function (a, b, d) {
for (var e = b.geometryData.geometries, f = Array(e.length), g = 0; g < e.length; ++g) f[g] = this._getVertexBufferLayout(e[g], b.geometryDescriptor);
var e = a.mbs,
h = this.elevationOffset,
k = this._controller.crsIndex,
l = this._controller.crsVertex,
m = this.view.renderSpatialReference,
g = V.getLocalOrigin(e, h, k),
h = V.computeGlobalTransformation(e, h, k, m),
k = ka.getProjectorName(k, l),
l = ka.getProjectorName(l, m);
return c.isNone(k) || c.isNone(l) ? null : this._worker.invoke({
context: this.layer.uid,
geometryBuffer: b.geometryBuffer,
geometryData: b.geometryData,
geometryDescriptor: b.geometryDescriptor,
layouts: f,
localOrigin: g,
globalTrafo: h,
mbs: e,
obb: a.obb,
elevationOffset: this.elevationOffset,
needNormals: !this._isIntegratedMesh && this._controller.isMeshPyramid,
normalReferenceFrame: this.layer.normalReferenceFrame || "none",
indexToVertexProjector: k,
vertexToRenderProjector: l
}, d)
};有两种修改方式,按需使用,推荐使用第一种方式。但第二种方式也给了扩展的可行性。
第一种方式,不支持动态投影,需保证当前场景的坐标系和场景图层的坐标系完全一致。效果很好。g.prototype._transformNode = function (a, b, d) {
for (var e = b.geometryData.geometries, f = Array(e.length), g = 0; g < e.length; ++g) f[g] = this._getVertexBufferLayout(e[g],