加载天地图
let viewer = mapView.map
let webKey = '天地图token,官网申请'
viewer.imageryLayers.addImageryProvider(
new Cesium.WebMapTileServiceImageryProvider({
url:
'http://t1.tianditu.com/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=' +
webKey,
layer: 'tdtBasicLayer',
style: 'default',
format: 'image/jpeg',
tileMatrixSetID: 'GoogleMapsCompatible',
show: false
})
)
viewer.imageryLayers.addImageryProvider(
new Cesium.WebMapTileServiceImageryProvider({
url:
'http://t1.tianditu.com/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=' +
webKey,
layer: 'tdtAnnoLayer',
style: 'default',
format: 'image/jpeg',
tileMatrixSetID: 'GoogleMapsCompatible',
show: false
})
加载星图地球
const token = '星图地球token'
let imageryProvider = new Cesium.UrlTemplateImageryProvider({
url: "https://tiles1.geovisearth.com/base/v1/img/{z}/{x}/{y}?format=webp&tmsIds=w&token=" + token,
subdomains: "123"
});
let textProvider = new Cesium.UrlTemplateImageryProvider({
url: "https://tiles1.geovisearth.com/base/v1/cia/{z}/{x}/{y}?format=png&tmsIds=w&token=" + token,
subdomains: "123"
});
viewer.imageryLayers.addImageryProvider(imageryProvider);
viewer.imageryLayers.addImageryProvider(textProvider);
加载和卸载wms服务
const baseState = useBaseState()
const GEOSERVERURL = baseURL + '/geoserver/yh/wms'
mapView.map.imageryLayers.addImageryProvider(
new Cesium.WebMapServiceImageryProvider({
url: GEOSERVERURL,
layers: layerName,
enablePickFeatures: false,
parameters: {
transparent: true, //是否透明
format: 'image/png',
srs: 'EPSG:4326',
styles: '',
service: 'WMS'
},
minimumLevel: 5,
maximumLevel: 17
})
)
**加载3857墨卡托坐标系wms服务**
const GEOSERVERURL = '/geoserver/img/wms'
let smart = mapView.map.imageryLayers.addImageryProvider(
new Cesium.WebMapServiceImageryProvider({
url: GEOSERVERURL,
layers: 'img:yh-base',
parameters: {
service: 'WMS',
version: '1.3.0',
format: 'image/png',
transparent: true,
srs: 'EPSG:3857' // 关键:指定坐标系
}
})
)
**卸载wms服务**
const layers = mapView.map.imageryLayers._layers
for (const key in layers) {
if (Object.hasOwnProperty.call(layers, key)) {
const data = layers[key]
if (layerName == data?._imageryProvider.layers) {
mapView.map.imageryLayers.remove(data)
}
}
}
加载glb文件(带label)
viewer.entities.add({
id: setSession(),
position: position,
model: {
uri: './Cesium/models/xx.glb',
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
disableDepthTestDistance: 99000000,
shadows: Cesium.ShadowMode.CAST_ONLY,
color: Cesium.Color.WHITE,
colorBlendMode: Cesium.ColorBlendMode.MIX,
minimumPixelSize: 28,
colorBlendAmount: 0.15,
scale: 10
},
label: {
text: 'drill' + Math.random(100),
showBackground: true,
scale: 0.5,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
disableDepthTestDistance: 99000000,
scaleByDistance: new Cesium.NearFarScalar(300, 1, 1000, 0.6)
}
})
加载polygon
const dataSource = new Cesium.CustomDataSource('blasting')
viewer.dataSources.add(dataSource)
this.blastingCollection = dataSource.entities
const centerHeight =
this.viewer.scene.sampleHeight(new Cesium.Cartographic(Cesium.Math.toRadians(hole.point[0]), Cesium.Math.toRadians(hole.point[1])))
this.blastingCollection.add({
id: mapTask.data.task_id + '.task-warning',
position: Cesium.Cartesian3.fromDegrees(center.geometry.coordinates[0], center.geometry.coordinates[1], centerHeight),
polygon: {
hierarchy: dynamicPositions,
material: Cesium.Color.RED.withAlpha(0.2),
classificationType: Cesium.ClassificationType.CESIUM_3D_TILE
},
properties: { type: 'blasting-warning', data: {distance:distance,endMill:endMill} }
})
加载圆孔和文字
this.holeLabelCollection = this.viewer.scene.primitives.add(new Cesium.LabelCollection())
this.blastingCollection.add({
position: Cesium.Cartesian3.fromDegrees(hole.point[0], hole.point[1], height),
ellipse: {
semiMajorAxis: 1.5,
semiMinorAxis: 1.5,
material: color
}
})
this.holeLabelCollection.add({
position: Cesium.Cartesian3.fromDegrees(hole.point[0], hole.point[1], height),
text: hole.label,
font: 'bold 12px 微软雅黑',
fillColor: Cesium.Color.WHITE,
eyeOffset: new Cesium.Cartesian3(-0.8, 1, 0)
})
移除entity
if(this.blastingCollection&&this.blastingCollection._entities.length>0){
const index = this.blastingCollection._entities._array.findIndex((item)=>item.id==mapTask.data.task_id + '.task-warning')
this.blastingCollection.remove(this.blastingCollection._entities._array[index])
}
this.blastingCollection.removeAll()
this.holeLabelCollection.removeAll()
加载三维3dtiles数据
async load3dtiles(data, callback) {
this.modelURL = data.modelUrl
this.modelHeight = data.modelHeight
let isLocate = false
isLocate = data?.isLocate
let containsUrl = this.map.scene.primitives._primitives.some((obj) => Object.prototype.hasOwnProperty.call(obj, '_url') && obj['_url'] === this.modelURL)
if (containsUrl) {
for (let index in this.map.scene.primitives._primitives) {
if (Object.prototype.hasOwnProperty.call(this.map.scene.primitives._primitives[index], '_url') && this.map.scene.primitives._primitives[index]._url == this.modelURL) {
this.map.scene.primitives._primitives[index].show = true
break
}
}
} else {
let palaceTileset1 = await Cesium.Cesium3DTileset.fromUrl(this.modelURL, {
url: this.modelURL,
maximumMemoryUsage: 1024 * 1.5,
backFaceCulling: true,
maximumScreenSpaceError: 64,
maximumNumberOfLoadedTiles: 1000,
shadows: Cesium.ShadowMode.DISABLED,
skipLevelOfDetail: true,
baseScreenSpaceError: 1024,
skipScreenSpaceErrorFactor: 16,
skipLevels: 1,
immediatelyLoadDesiredLevelOfDetail: false,
loadSiblings: true,
cullWithChildrenBounds: true,
luminanceAtZenith: 0.2,
dynamicScreenSpaceError: true,
dynamicScreenSpaceErrorDensity: 0.0278,
dynamicScreenSpaceErrorFactor: 8,
dynamicScreenSpaceErrorHeightFalloff: 0.5,
preloadWhenHidden: true,
show: true,
classificationType: Cesium.ClassificationType.NONE,
enableShowOutline: false,
cullRequestsWhileMoving: true,
cullRequestsWhileMovingMultiplier: 10,
preferLeaves: true,
progressiveResolutionHeightFraction: 0.5
})
if (this.modelHeight != 0 && this.modelHeight != undefined) {
changeHeight(palaceTileset1, this.modelHeight)
}
this.map.scene.primitives.add(palaceTileset1)
if (isLocate) {
this.map.flyTo(palaceTileset1)
}
if (callback && typeof callback == 'function') callback()
}
}
load3dtiles(data) {
this.modelURL = data.modelUrl
this.modelHeight = data.modelHeight
let containsUrl = this.map.scene.primitives._primitives.some((obj) => obj.hasOwnProperty('_url') && obj['_url'] === this.modelURL)
if (containsUrl) {
for (let index in this.map.scene.primitives._primitives) {
if (this.map.scene.primitives._primitives[index].hasOwnProperty('_url') && this.map.scene.primitives._primitives[index]._url == this.modelURL) {
this.map.scene.primitives._primitives[index].show = true
break
}
}
} else {
let palaceTileset = new Cesium.Cesium3DTileset({
url: this.modelURL,
maximumMemoryUsage: 1024,
backFaceCulling: true,
maximumScreenSpaceError: 2,
maximumNumberOfLoadedTiles: 1000,
shadows: Cesium.ShadowMode.DISABLED,
skipLevelOfDetail: true,
baseScreenSpaceError: 1024,
skipScreenSpaceErrorFactor: 16,
skipLevels: 1,
immediatelyLoadDesiredLevelOfDetail: false,
loadSiblings: true,
cullWithChildrenBounds: true,
luminanceAtZenith: 0.2,
dynamicScreenSpaceError: false,
dynamicScreenSpaceErrorDensity: 8,
dynamicScreenSpaceErrorFactor: 4.0,
dynamicScreenSpaceErrorHeightFalloff: 0.25,
preloadWhenHidden: true,
show: true,
classificationType: Cesium.ClassificationType.NONE
})
palaceTileset.readyPromise.then((palaceTileset1) => {
if (this.modelHeight != 0 && this.modelHeight != undefined) {
changeHeight(palaceTileset1, this.modelHeight)
}
this.map.scene.primitives.add(palaceTileset1)
})
}
}