12.3 总结(功能记录:智慧成都地铁网络)

一 、父子件使用 样式穿透子组件权重需要比子组件大 (否则无法覆盖掉子组件原有的样式)

子组件:

<HeadBar :list="headBarList" ref="headBarRef" @clicks="handleChange" />

父组件使用样式穿透:

二、当有多个series对象时给某个series 设置tooltip样式

1、先设置好公共tooltip样式

tooltip: {
            show: true,
            trigger: 'item',
            formatter: '{b} : {c} ({d}%)'
        },

2、在series 里给不需要tooltip的对象写上:

 series: [
            {
                tooltip: {
                    show: false
                },
            },
            {
                tooltip: {
                    show: true
                },
            },
            {
                tooltip: {
                    show: false
                },
            },
            ......
         ]

三、智慧成都地铁网络

1、拿到shp数据,根据成都经纬度找到相对应的投影坐标,使用qgis转换导出成geojson数据

① 、找到转换的投影坐标EPSG代号:成都经纬度:

                        

 

地理坐标转换投影坐标对照:坐标系对应EPSG代号、经度范围、中央经线_欧特克_Glodon的博客-优快云博客_epsg对照表

 

由于本项目建模经度是102E:

 

 故应与实际项目为准,EPSG代号应为4543

②:使用QGIS导出投影坐标的geojson

将shp数据文件拖入QGIS 图层下方的资源管理框,右键选中 ——> 导出 ——> 要素另存为

点击CRS右方的

  

 

这样就能将shp数据按照对应的投影坐标转换成geojson数据了

2、代码处理数据并使用Marker 和  Polyline 打出点以及画出线

①:由于数据中的坐标均为二维,没有给高度,所以先处理数据给每个点位加上z轴高度

数据格式:

数据处理:

 data.features.forEach((item: any, index: number) => {
            item.geometry.coordinates.forEach((coorArr: any) => {
                coorArr.forEach((coor: any) => {
                    coor[2] = 523.5
                })
            })

 ②:接下来就是打点和画线了,没有什么难度,需要注意的就是确保在打点和画线时给的数据是对的,所以一定要看好数据长什么样子,小编也是没看清浪费了不少时间,废话不多说,下面直接上效果和代码:

import { useAirCityStore } from '@/stores/aircity'
import { getMetroPolyline, getMetropPoi } from '@/api/home'

/**
 * 地铁线路
 */
const AirCityStore = useAirCityStore()

/**
 * 初始化
 */
export const initSubwayNetwork = async () => {
    await __g.marker.clear()
    await __g.camera.stopAnimation()
    await __g.infoTree.show(AirCityStore.layerTreeObject['地形4543外拆带水系'])
    await __g.weather.setDateTime(2022, 1, 1, 14, 0, false)
    await __g.weather.setDarkMode(true);
    await addPolyline()
    __g.camera.set(698275.51375, 3391624.434063, 21722.38, -85.998055, -90.615837, 1);
    await addMarker()
}

/**
 * 清除
 */

export const cleanSubwayNetwork = async () => {
    await __g.weather.setDarkMode(false);
    await __g.polyline.clear()
    await __g.marker.clear()
}

/**
 * 打点、添加marker标签
 */
const _shMarkerArr: any = []
const addMarker = () => {
    const markerArr: any = []
    getMetropPoi().then(async ({ data }: any) => {
        data.features.forEach((item: any, index: number) => {
            const o = {
                id: 'metro_' + index,
                groupId: 'markerAdd',
                coordinate: [item.geometry.coordinates[0], item.geometry.coordinates[1], 523.5], //坐标位置
                coordinateType: 0, //默认0是投影坐标系,也可以设置为经纬度空间坐标系值为1
                anchors: [-14, 36], //锚点,设置Marker的整体偏移,取值规则和imageSize设置的宽高有关,图片的左上角会对准标注点的坐标位置。示例设置规则:x=-imageSize.width/2,y=imageSize.height
                imageSize: [28, 36], //图片的尺寸
                hoverImageSize: [28, 36], //鼠标悬停时显示的图片尺寸
                range: [1, 1000000], //可视范围
                imagePath: '@path:智慧成都/地铁.png', //显示图片路径
                hoverImagePath: '@path:智慧成都/地铁.png', // 鼠标悬停时显示的图片路径
                fixedSize: true, //图片固定尺寸,取值范围:false 自适应,近大远小,true 固定尺寸,默认值:false

                text: item.properties.PointName,
                textRange: [1, 20000],
                autoHidePopupWindow: true, //失去焦点后是否自动关闭弹出窗口
                autoHeight: false, // 自动判断下方是否有物体
                displayMode: 2, //显示模式
                clusterByImage: true, // 聚合时是否根据图片路径分类,即当多个marker的imagePath路径参数相同时按路径对marker分类聚合
                priority: 0, //避让优先级
                occlusionCull: false //是否参与遮挡剔除
            }
            markerArr.push(o)
        })
        const res: any = await __g.marker.add(markerArr)
        if (res.result) {
            __g.marker.show(_shMarkerArr)
        }
    })
}
/**
 * 画线Polyline
 */
const addPolyline = () => {
    const polineArr: any = []
    const beamArr: any = []
    __g.polyline.clear()
    getMetroPolyline().then(async ({ data }: any) => {
        data.features.forEach((item: any, index: number) => {
            item.geometry.coordinates.forEach((coorArr: any) => {
                coorArr.forEach((coor: any) => {
                    coor[2] = 523.5
                })
            })

            const obj = {
                id: `Poline_${index}`,//折线唯一标识id
                coordinates: item.geometry.coordinates[0],//构成折线的坐标点数组
                range: [1, 1000000],//可视范围:[近裁距离, 远裁距离],取值范围: [任意负值, 任意正值]
                color: ColorList[index % 8],//折线颜色
                style: 4,//折线样式 参考样式枚举:PolylineStyle
                thickness: 100,//折线宽度
                intensity: 0,//亮度
                flowRate: 0.5,//流速
                tiling: 0,//材质贴图平铺比例
                shape: 0, //折线类型 0:直线, 1:曲线
                depthTest: false//是否做深度检测
            }
            polineArr.push(obj)
        })
        await __g.polyline.add(polineArr);
    })
}

const ColorList = ['#00833b', '#e1ff00', '#0059ff', '#ff0011', '#ff00f7', '#2600ff', '#00d0ff', '#ff4d00']


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值