10 changed files with 248 additions and 157 deletions
@ -0,0 +1,131 @@ |
|||
import axios from 'axios'; |
|||
|
|||
class SuperMapImageryLayer { |
|||
constructor(url, options) { |
|||
this.viewer = options.viewer; |
|||
this.options = options || {}; |
|||
this.layerUrl = url; |
|||
this.layerName = ''; |
|||
this.layerInfo = null; |
|||
this.layerProvider = null; |
|||
this.scales84 = []; |
|||
this.scalesweb = []; |
|||
this._delegate = null; |
|||
this.loadData(); |
|||
} |
|||
loadData() { |
|||
this.scales84 = [ |
|||
3.38032714321e-9, 6.76065428641e-9, 1.352130857282e-8, 2.704261714564e-8, 5.408523429128e-8, 1.0817046858257e-7, |
|||
2.1634093716514e-7, 4.3268187433028e-7, 8.6536374866056e-7, 1.73072749732112e-6, 3.46145499464224e-6, |
|||
6.92290998928448e-6, 1.3845819978568952e-5, 2.7691639957137904e-5, 5.538327991427581e-5, 1.1076655982855162e-4, |
|||
2.2153311965710323e-4, 4.4306623931420646e-4, 8.861324786284129e-4, 0.0017722649572568258, 0.0035445299145136517, |
|||
0.007089059829027303 |
|||
]; |
|||
|
|||
this.scalesweb = [ |
|||
1.6901635716e-9, 3.38032714321e-9, 6.76065428641e-9, 1.352130857282e-8, 2.704261714564e-8, 5.408523429128e-8, |
|||
1.0817046858257e-7, 2.1634093716514e-7, 4.3268187433028e-7, 8.6536374866056e-7, 1.73072749732112e-6, |
|||
3.46145499464224e-6, 6.92290998928448e-6, 1.3845819978568952e-5, 2.7691639957137904e-5, 5.538327991427581e-5, |
|||
1.1076655982855162e-4, 2.2153311965710323e-4, 4.4306623931420646e-4, 8.861324786284129e-4, 0.0017722649572568258, |
|||
0.0035445299145136517, 0.007089059829027303 |
|||
]; |
|||
axios |
|||
.get(`${this.layerUrl}.json`) |
|||
.then((res) => { |
|||
if (res.status !== 200) return; |
|||
const result = res.data; |
|||
this.layerName = this.options.name || result.name; |
|||
this.layerInfo = result; |
|||
const rectangle = sycim.Rectangle.fromDegrees(-180, -90, 180, 90); |
|||
const epsgcode = result.prjCoordSys.epsgCode; |
|||
let tilingScheme = ''; |
|||
let minlevel = 0; |
|||
let maxlevel = 22; |
|||
let originx = 0; |
|||
let originy = 0; |
|||
|
|||
if (epsgcode === 4326) { |
|||
tilingScheme = new sycim.GeographicTilingScheme({ |
|||
numberOfLevelZeroTilesX: 2, |
|||
numberOfLevelZeroTilesY: 1 |
|||
}); |
|||
originx = -180; |
|||
originy = 90; |
|||
if (this.options.minimumLevel !== undefined) { |
|||
minlevel = this.options.minimumLevel; |
|||
} else { |
|||
minlevel = 0; |
|||
} |
|||
if (this.options.maximumLevel !== undefined) { |
|||
maxlevel = this.options.maximumLevel; |
|||
} else { |
|||
maxlevel = 22; |
|||
} |
|||
} |
|||
if (epsgcode === 3857) { |
|||
tilingScheme = new sycim.WebMercatorTilingScheme(); |
|||
originx = -20037508.34; |
|||
originy = 20037508.34; |
|||
if (this.options.minimumLevel !== undefined) { |
|||
console.log('not undefined'); |
|||
minlevel = this.options.minimumLevel; |
|||
} else { |
|||
minlevel = 0; |
|||
} |
|||
if (this.options.maximumLevel !== undefined) { |
|||
maxlevel = this.options.maximumLevel; |
|||
} else { |
|||
maxlevel = 22; |
|||
} |
|||
} |
|||
|
|||
this.layerProvider = new sycim.Cesium.UrlTemplateImageryProvider({ |
|||
url: |
|||
this.layerUrl + |
|||
"/tileImage.png?transparent=true&cacheEnabled=true&width=256&height=256&x={x}&y={y}&scale={scale}&redirect=false&overlapDisplayed=false&origin={'x':" + |
|||
originx + |
|||
",'y':" + |
|||
originy + |
|||
'}', |
|||
rectangle: rectangle, |
|||
minimumLevel: minlevel || 0, |
|||
maximumLevel: maxlevel || 22, |
|||
tilingScheme: tilingScheme, |
|||
customTags: { |
|||
scale: function (imageryProvider, x, y, level) { |
|||
if (epsgcode === 4326) { |
|||
return this.scales84[level]; |
|||
} |
|||
if (epsgcode === 3857) { |
|||
return this.scalesweb[level]; |
|||
} |
|||
}, |
|||
scales84: this.scales84, |
|||
scalesweb: this.scalesweb // Add the missing property "scalesweb"
|
|||
} |
|||
}); |
|||
|
|||
this._delegate = viewer.imageryLayers.addImageryProvider(this.layerProvider); |
|||
}) |
|||
.catch((err) => { |
|||
console.log(err); |
|||
}); |
|||
} |
|||
zoomToLayer() { |
|||
if (!this._delegate) return; |
|||
const { left, bottom, right, top } = this.layerInfo.bounds; |
|||
this.viewer.camera.flyTo({ |
|||
destination: sycim.Rectangle.fromDegrees(left, bottom, right, top) |
|||
}); |
|||
} |
|||
show() { |
|||
if (!this._delegate) return; |
|||
this._delegate.show = true; |
|||
} |
|||
hide() { |
|||
if (!this._delegate) return; |
|||
this._delegate.show = false; |
|||
} |
|||
} |
|||
|
|||
export default SuperMapImageryLayer; |
Loading…
Reference in new issue