import * as mars3d from "mars3d" export let map // mars3d.Map三维地图对象 // 需要覆盖config.json中地图属性参数(当前示例框架中自动处理合并) export const mapOptions = { scene: { center: { lat: 31.810597, lng: 117.220617, alt: 1038, heading: 13, pitch: -30 } }, terrain: { show: false }, // 方式1:在创建地球前的参数中配置 layers: [ { name: "兴趣点", type: "arcgis_wfs", url: "//server.mars3d.cn/arcgis/rest/services/mars/hefei/MapServer/1", where: " 1=1 ", minimumLevel: 16, symbol: { type: "billboardP", styleOptions: { image: "img/marker/mark3.png", scale: 0.7, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, clampToGround: true, label: { text: "{NAME}", font_size: 15, color: "#ffffff", outline: true, outlineColor: "#000000", pixelOffsetY: -30, distanceDisplayCondition: true, distanceDisplayCondition_far: 1500, distanceDisplayCondition_near: 0 } } }, popup: "名称:{NAME}
地址:{address}", show: true } ] } /** * 初始化地图业务,生命周期钩子函数(必须) * 框架在地图初始化完成后自动调用该函数 * @param {mars3d.Map} mapInstance 地图对象 * @returns {void} 无 */ export function onMounted(mapInstance) { map = mapInstance // 记录首次创建的map map.basemap = 2017 // 蓝色底图 // 添加演示图层 addArcGisWFSLayer1() addArcGisWFSLayer2() } /** * 释放当前地图业务的生命周期函数 * @returns {void} 无 */ export function onUnmounted() { map = null } // 方式2:在创建地球后调用addLayer添加图层(直接new对应type类型的图层类) function addArcGisWFSLayer1() { const changeLevel = 15 // 瓦片图,对比参考用 const tileLayer = new mars3d.layer.ArcGisLayer({ name: "瓦片图层", url: "//server.mars3d.cn/arcgis/rest/services/mars/hefei/MapServer", layers: "37", popup: "数据:瓦片图层
名称:{NAME}
层数:{floor}", maximumLevel: changeLevel - 1, maximumTerrainLevel: changeLevel - 1 }) map.addLayer(tileLayer) // 动态矢量图 const wfsLayer = new mars3d.layer.ArcGisWfsLayer({ name: "建筑物面矢量图层", url: "//server.mars3d.cn/arcgis/rest/services/mars/hefei/MapServer/37", where: " NAME like '%合肥%' ", minimumLevel: changeLevel, symbol: { type: "polygonP", styleOptions: { color: "#FED976", outline: false, opacity: 1 } }, buildings: { cloumn: "floor" }, debuggerTileInfo: false, popup: "数据:矢量图层
名称:{NAME}
层数:{floor}" }) map.addLayer(wfsLayer) // 绑定事件 wfsLayer.on(mars3d.EventType.loadConfig, function (event) { console.log("加载完成服务信息", event) }) wfsLayer.on(mars3d.EventType.click, function (event) { console.log("单击了图层", event) }) let timeTik wfsLayer.on(mars3d.EventType.update, function (event) { console.log(`图层内数据更新了`, event) clearTimeout(timeTik) timeTik = setTimeout(() => { if (!wfsLayer.isLoading) { console.log(`本批次数据加载完成`) } }, 1000) }) setTimeout(function () { // 测试更换条件 wfsLayer.setWhere(" 1=1 ") }, 10000) } // 适合少于1000条的少量数据,一次性请求加载 function addArcGisWFSLayer2() { // 一次性加载的wfs图层 const wfsLayer = new mars3d.layer.ArcGisWfsSingleLayer({ name: "合肥边界线", url: "//server.mars3d.cn/arcgis/rest/services/mars/hefei/MapServer/41", symbol: { type: "polyline", styleOptions: { color: "#39E09B", width: 8, opacity: 0.8 } }, popup: "all" }) map.addLayer(wfsLayer) } // 图层状态 在组件中进行管理的图层 export function getManagerLayer() { return map.getLayer("建筑物面矢量图层", "name") }