问题
加载kml文件时,希望能实现像Kml2JsonLayer加载的效果一样,实现规划面能填充?
目前直接加载的时候页面效果:

期望效果
参考Kml2JsonLayer读出来的效果,规划面能填充

原因是因为,kml本身有style时,是用了本身的样式,如下:

相关链接
示例链接:http://mars3d.cn/editor-vue.html?id=layer-graphic/file/kml
相关说明
附件1z.kml为kml文件,复现时需放在该目录下,【D:/mars3d-data/kml/1z.kml】
附件2测试代码.txt,权限贴至链接中运行即可
附件2:
import * as mars3d from "mars3d"
export let map // mars3d.Map三维地图对象
export let graphicLayer // 矢量图层对象
// 需要覆盖config.json中地图属性参数(当前示例框架中自动处理合并)
export const mapOptions = {
scene: {
center: { lat: 31.614035, lng: 117.292184, alt: 25686, heading: 0, pitch: -44 }
},
layers: [
{
name: "国境线",
type: "kml",
url: "//data.mars3d.cn/file/kml/countryboundary.kml",
symbol: {
styleOptions: {
color: "#FED976",
width: 2
}
},
popup: "all",
show: true
},
{
name: "省界线",
type: "kml",
url: "//data.mars3d.cn/file/kml/province.kml",
symbol: {
styleOptions: {
color: "#00FF00",
width: 2
}
},
popup: "all",
show: true
}
]
}
export const treeEvent = new mars3d.BaseClass()
/**
* 初始化地图业务,生命周期钩子函数(必须)
* 框架在地图初始化完成后自动调用该函数
* @param {mars3d.Map} mapInstance 地图对象
* @returns {void} 无
*/
export function onMounted(mapInstance) {
map = mapInstance // 记录首次创建的map
shoRailway()
}
/**
* 释放当前地图业务的生命周期函数
* @returns {void} 无
*/
export function onUnmounted() {
map = null
}
function removeLayer() {
map.trackedEntity = null
if (graphicLayer) {
map.removeLayer(graphicLayer, true)
graphicLayer = null
}
}
// flyTo至目标
export function flyToEntity(entity) {
map.flyTo(entity)
}
// 示例:
export function shoRailway() {
removeLayer()
graphicLayer = new mars3d.layer.KmlLayer({
url: "http://localhost/mars3d-data/kml/1z.kml",
symbol: {
styleOptions: {
color: "#00ffff",
opacity: 0.8,
width: 3,
outline: true,
outlineColor: "#00ffff",
outlineWidth: 3,
depthFailColor: "#00ffff",
depthFailOpacity: 1,
clampToGround: true,
// distanceDisplayCondition: true,
// distanceDisplayCondition_far: 20000,
// distanceDisplayCondition_near: 0,
}
},
popup: "all",
flyTo: true,
clampToGround: true, //是否贴地
})
map.addLayer(graphicLayer)
// 绑定事件
graphicLayer.on(mars3d.EventType.load, function (event) {
console.log("数据加载完成", event)
const data = event.list
treeEvent.fire("tree", { treeData: data })
})
graphicLayer.on(mars3d.EventType.click, function (event) {
console.log("单击了图层", event)
})
}
// 示例:
export function showExpressway() {
removeLayer()
graphicLayer = new mars3d.layer.KmlLayer({
name: "路线",
url: "//data.mars3d.cn/file/kml/bslx.kmz",
symbol: {
styleOptions: {
font_family: "楷体",
arcType: Cesium.ArcType.GEODESIC,
clampToGround: true
}
},
popup: "all",
flyTo: true
})
map.addLayer(graphicLayer)
// 绑定事件
graphicLayer.on(mars3d.EventType.load, function (event) {
console.log("数据加载完成", event)
const data = event.list
treeEvent.fire("tree", { treeData: data })
})
graphicLayer.on(mars3d.EventType.click, function (event) {
console.log("单击了图层", event)
})
}
// 示例:
export function showSafetyNotice() {
removeLayer()
graphicLayer = new mars3d.layer.KmlLayer({
name: "海上安全警告",
url: "//data.mars3d.cn/file/kml/NAVWARN.kmz",
popup: "{description}",
center: { lat: 3.851186, lng: 110.508244, alt: 3510625, heading: 7, pitch: -74 },
flyTo: true
})
map.addLayer(graphicLayer)
// 绑定事件
graphicLayer.on(mars3d.EventType.load, function (event) {
console.log("数据加载完成", event)
const data = event.list
treeEvent.fire("tree", { treeData: data })
})
graphicLayer.on(mars3d.EventType.click, function (event) {
console.log("单击了图层", event)
})
}
// 示例:
export function showMeteorological() {
removeLayer()
graphicLayer = new mars3d.layer.KmlLayer({
name: "气象数据",
url: "//data.mars3d.cn/file/kml/dg8.kml",
opacity: 0.7,
popup: "all",
flyTo: true
})
map.addLayer(graphicLayer)
// 绑定事件
graphicLayer.on(mars3d.EventType.load, function (event) {
console.log("数据加载完成", event)
const data = event.list
treeEvent.fire("tree", { treeData: data })
})
graphicLayer.on(mars3d.EventType.click, function (event) {
console.log("单击了图层", event)
})
}
// 示例:
export function showGDP() {
removeLayer()
graphicLayer = new mars3d.layer.KmlLayer({
name: "全球各国GDP",
url: "//data.mars3d.cn/file/kml/gdpPerCapita2008.kmz",
center: { lat: 5.723953, lng: 90.735755, alt: 24143420, heading: 359, pitch: -87 },
popup: "all",
flyTo: true
})
map.addLayer(graphicLayer)
// 绑定事件
graphicLayer.on(mars3d.EventType.load, function (event) {
console.log("数据加载完成", event)
const data = event.list
treeEvent.fire("tree", { treeData: data })
})
graphicLayer.on(mars3d.EventType.click, function (event) {
console.log("单击了图层", event)
})
}
附件1:
加载kml文件,希望实现规划面能够填充,有什么方法吗? · Issue #I5Q3HO · 火星科技/Mars3D三维地球平台 - Gitee.com
本文含有隐藏内容,请 开通VIP 后查看