import * as mars3d from "mars3d"
|
|
export let map // mars3d.Map三维地图对象
|
let tileLayer
|
|
// 需要覆盖config.json中地图属性参数(当前示例框架中自动处理合并)
|
export const mapOptions = {
|
scene: {
|
center: { lat: 24.336939, lng: 108.949729, alt: 14990362, heading: 0, pitch: -90 }
|
},
|
control: {
|
// baseLayerPicker: false,
|
infoBox: false
|
},
|
layers: [
|
{
|
name: "瓦片测试信息",
|
type: "tileinfo",
|
color: "rgba(255,255,0,0.6)",
|
show: true
|
}
|
]
|
}
|
|
/**
|
* 初始化地图业务,生命周期钩子函数(必须)
|
* 框架在地图初始化完成后自动调用该函数
|
* @param {mars3d.Map} mapInstance 地图对象
|
* @returns {void} 无
|
*/
|
export function onMounted(mapInstance) {
|
map = mapInstance // 记录首次创建的map
|
|
map.basemap = "单张图片 (本地离线)"
|
}
|
|
/**
|
* 释放当前地图业务的生命周期函数
|
* @returns {void} 无
|
*/
|
export function onUnmounted() {
|
map = null
|
}
|
|
export const eventTarget = new mars3d.BaseClass() // 事件对象,用于抛出事件到面板中
|
|
// 加载图层
|
export function createTileLayer(options) {
|
const params = {
|
type: options.type, // 类型
|
url: options.url, // 图层url
|
// subdomains: $("#txtSubdomains").val(), // url子域
|
layer: options.txtLayer, // 图层名
|
|
crs: options.CRS, // 坐标系信息
|
chinaCRS: options.chinaCRS, // 国内坐标系
|
|
minimumLevel: options.minLoadLevel, // 最低层级
|
maximumLevel: options.maxLoadLevel, // 最高层级
|
minimumTerrainLevel: options.minShowLevel, // 展示影像图层的最小地形细节级别
|
maximumTerrainLevel: options.maxShowLevel, // 展示影像图层的最大地形细节级别
|
brightness: options.brightness, // 亮度
|
opacity: options.opacity // 透明度
|
}
|
// 新增图层
|
if (params.error) {
|
globalMsg(params.msg)
|
return
|
}
|
if (params.minimumLevel > params.maximumLevel) {
|
return { error: true, msg: "最低层级的值不得高于最高层级" }
|
}
|
if (params.minimumTerrainLevel > params.maximumTerrainLevel) {
|
return { error: true, msg: "最小细节的值不得高于最大细节" }
|
}
|
|
// 移除原有图层
|
removeLayer()
|
|
// 绘制区域
|
const rectangle = options.rectangle
|
if (rectangle) {
|
params.rectangle = rectangle
|
}
|
|
// 代理被选中
|
if (params.chkProxy) {
|
params.proxy = "//server.mars3d.cn/proxy/"
|
} else {
|
params.proxy = null
|
}
|
|
console.log("图层参数为", params)
|
|
tileLayer = mars3d.LayerUtil.create({
|
...params,
|
highlight: {
|
clampToGround: true,
|
fill: true,
|
color: "#2deaf7",
|
opacity: 0.6,
|
outline: true,
|
outlineWidth: 3,
|
outlineColor: "#e000d9",
|
outlineOpacity: 1.0
|
},
|
popup: "all",
|
flyTo: true
|
})
|
map.addLayer(tileLayer)
|
}
|
|
// 移除并销毁图层
|
export function removeLayer() {
|
if (tileLayer) {
|
map.removeLayer(tileLayer, true)
|
tileLayer = null
|
}
|
}
|
|
// 数据更新
|
export function dataUpdate(params) {
|
if (tileLayer) {
|
params.flyTo = false
|
createTileLayer(params)
|
}
|
}
|
|
// 绘制和清除区域
|
export function btnDrawExtent(options) {
|
if (tileLayer) {
|
tileLayer.rectangle = null
|
}
|
map.graphicLayer.clear()
|
map.graphicLayer.startDraw({
|
type: "rectangle",
|
style: {
|
fill: false,
|
outline: true,
|
outlineWidth: 3,
|
outlineColor: "#ff0000"
|
},
|
success: function (graphic) {
|
const rectangle = mars3d.PolyUtil.formatRectangle(graphic._rectangle_draw)
|
options.rectangle = rectangle
|
eventTarget.fire("rectangle", { rectangle })
|
createTileLayer(options)
|
}
|
})
|
}
|
export function btnClearExtent() {
|
map.graphicLayer.clear()
|
if (tileLayer) {
|
tileLayer.rectangle = null
|
tileLayer.options.flyTo = false
|
// tileLayer.reload()
|
}
|
}
|
|
// 修改图层的部分值
|
export function changeOpacity(val) {
|
if (tileLayer) {
|
tileLayer.opacity = val
|
}
|
}
|
export function changeBrightness(val) {
|
if (tileLayer) {
|
tileLayer.brightness = val
|
}
|
}
|
|
export function creatHRectangleEntity(item) {
|
map.graphicLayer.clear()
|
const graphic = new mars3d.graphic.RectangleEntity({
|
rectangle: Cesium.Rectangle.fromDegrees(item.xmin, item.ymin, item.xmax, item.ymax),
|
style: {
|
fill: false,
|
outline: true,
|
outlineWidth: 3,
|
outlineColor: "#ff0000"
|
}
|
})
|
map.graphicLayer.addGraphic(graphic)
|
|
graphic.flyTo({ scale: 1.5 })
|
}
|