百度地图 图层

图层

在添加图层之前,需要先初始化图层管理器,从而将图层添加到图层管理器中
初始化MapVGL容器对象,用来管理各可视化图层对象。

var view = new mapvgl.View({
        //图像后处理效果对象数组
        effects: [//发光效果
            new mapvgl.BrightEffect({//发光后处理特效,也可以用作炫光效果
                threshold: 0,//0-1.0 值越低,亮部越多
                blurSize: 2,//炫光模糊值,默认2,是原图形半径的2倍
                clarity: 0.4
            }),
            // new mapvgl.BloomEffect({
            //     threshold: 0.8,
            //     blurSize: 3.0
            // }),
        ],
        map: map,
        //mapType:'bmap'//错误
    });

图层管理器view的options参数:

  • map: 地图对象
  • mapType :默认为3D地图,string类型,可选值:bmap(2D地图)、blank(空白地图)
  • effects:图像后处理效果对象数组

图层管理器view的方法:

  • addLayer、removeLayer、hideLayer、showLayer 使用方法:addLayer(图层对象)
  • removeAllLayers、getAllLayers、getAllThreeLayers 使用方法:getAllThreeLayers()
  • show() hide() 显示/隐藏当前图层管理器及所含图层

线轨迹图层 LineTripLayer 基础线图层SimpleLineLayer

配置项options如下:

  • autoSelect: false
  • color: 颜色,同css颜色
  • enablePicked: false
  • polygonOffset: (2) [2, 1]
  • repeat: false
  • selectedColor: “rgba(20, 20, 200, 1.0)”
  • selectedIndex: -1
  • step: 执行每次动画的步长,默认值0.1
  • trailLength:动画的拖尾时长,默认值 3
  • zIndex: 0
  • startTime: 动画开始时间,默认值0
  • endTime: 动画结束时间,默认值data的长度
    data格式:
[{
    geometry: {
        type: 'LineString',
        coordinates: [
            [116.394191, 39.91334],
            [116.417259, 39.913672]
        ]
    }
}]

LineTripLayer中的数据的坐标,需要对经纬度进行处理(FlyLineLayer无需处理,直接使用经纬度),如:

lastCity=mapv.utilCityCenter.getCenterByCityName(n);
endPoint=map.lnglatToMercator(lastCity.lng,lastCity.lat);

添加线轨迹图层(实现飞行的动画效果)使用方式:

let allCity=['福州','厦门','宁德','三明','龙岩','南平','漳州','泉州','莆田',];
    let lastCityArr=allCity;
    allCity.forEach(city=>{
        let firstCity=mapv.utilCityCenter.getCenterByCityName(city);
        let startPoint= map.lnglatToMercator(firstCity.lng, firstCity.lat);
        lastCityArr=lastCityArr.filter(n=>n!=city);
        lastCityArr.forEach(n=>{
            let lastOne= mapv.utilCityCenter.getCenterByCityName(n);
            let endPoint= map.lnglatToMercator(lastOne.lng, lastOne.lat);
            curve.setOptions({
                    start: [startPoint[0], startPoint[1]],
                    end: [endPoint[0], endPoint[1]]
                });
            let curveModelData=curve.getPoints(150);
            data.push({
                geometry: {
                        type: 'LineString',
                        coordinates: curveModelData
                },
                properties: {
                        count: 20
                }
            });
        })
    })
    //动画效果
    var lineLayer = new mapvgl.LineTripLayer({
        color: 'rgb(255, 255, 204)', // 飞线动画颜色 默认值’rgba(255, 5, 5, 1)’
        step: 1,//执行每次动画的步长 默认值0.1
        trailLength:5,//飞行线条 动画的拖尾时长 默认值:3

    });
    view.addLayer(lineLayer);
    lineLayer.setData(data)

为使得飞行的效果更佳,借助基础线图层SimpleLineLayer(实现飞行的路线效果)
SimpleLineLayer主要配置项options:

  • color : 颜色,同css颜色,默认值’rgba(25, 25, 250, 1)’
  • blend:线叠加模型,可选值’lighter’
    基础线图层SimpleLineLayer使用方式:
var lineLayer = new mapvgl.SimpleLineLayer({
        blend:'lighter',// 'lighter',//线叠加模型 
        color: 'rgb(255, 153, 0, 0.6)' // 飞线颜色(不为动画)
    });
    view.addLayer(lineLayer);
    lineLayer.setData(data);

同时借助图层的effect属性,进行发光特效处理

var view = new mapvgl.View({
        //图像后处理效果对象数组
        effects: [//发光效果
            new mapvgl.BrightEffect({//发光后处理特效,也可以用作炫光效果
                threshold: 0,//0-1.0 值越低,亮部越多
                blurSize: 2,//炫光模糊值,默认2,是原图形半径的2倍
                clarity: 0.4
        map: map,

最终使用效果图:
线轨迹效果

飞线图层 FlyLineLayer

配置项options如下:

  • color: 底线颜色,同css颜色
  • step: 飞线动画的步长,步长越大动画速度越快,默认值0.1
  • textureColor: 飞线动画颜色,同css颜色
  • textureLength: 飞线动画的长度,占整条线的百分比,取值0-100,默认值30
  • textureWidth: 飞线动画的宽度,默认值5
  • zIndex: 0
  • zoomThreshold: (2) [0, 30]
  • taticDashArray: 2
  • time: 0
  • style: 飞线动画方式 默认值‘noemal’ (飞线动画速度均匀) 其余可选值:‘chaos’(不均匀)
    data格式:

data: [{
geometry: {
type: ‘LineString’,
coordinates: [
[116.394191, 39.91334],
[116.417259, 39.913672]
]
}
}]

使用方式(data使用贝塞尔函数):

let allCity=['福州','厦门','宁德','三明','龙岩','南平','漳州','泉州','莆田',];
    let lastCityArr=allCity;
    allCity.forEach(city=>{
        let firstCity=mapv.utilCityCenter.getCenterByCityName(city);//飞线直接使用经纬度
        lastCityArr=lastCityArr.filter(n=>n!=city);
        lastCityArr.forEach(n=>{
            let lastCity=mapv.utilCityCenter.getCenterByCityName(n);
            curve.setOptions({
                start:[firstCity.lng, firstCity.lat],
                end: [lastCity.lng, lastCity.lat]
            });
            data.push({
                geometry:{
                    type:'LineString',
                    coordinates:curve.getPoints(),
                },
                properties:{
                    count:Math.random()
                }
            })
        })
    })
    var flylineLayer = new mapvgl.FlyLineLayer({
        style: 'chaos',//normal,默认值,飞线动画速度均匀 ,chaos,飞线动画速度不均匀
        step: 0.3,//飞线动画的步长,步长越大动画速度越快
        color: 'rgb(255, 153, 0, 0.6)',//'rgba(33, 242,
        textureColor:'rgb(255, 255, 204)',//默认
        textureWidth: 15,//飞行动画宽度 默认值5
        textureLength: 30,//飞行动画长度 占整条线的百分比,取值0-100 默认30
    });
    view.addLayer(flylineLayer);
    flylineLayer.setData(data);

效果图:飞线效果图

基础面图层 ShapeLayer

配置项options如下:

  • autoSelect: 鼠标覆盖即为选中,默认是false
  • color: 柱状图颜色 同css,默认值"rgba(50, 50, 230, 1.0)"
  • depthTest: true
  • enablePicked: 是否可以拾取 默认值false
  • height: 建筑物高度,默认值0
  • texture:纹理路径(宽高必须为2的次幂),如 ‘./images/textures/wall2.png’,
  • isTextureFull: false
  • opacity:透明度。范围:0-1 默认值 0.8
  • polygonOffset: (2) [0, 0]
  • repeat: false
  • riseTime: 楼块初始化升起动画的时间,单位毫秒,默认值0
  • selectedColor:建筑物选中颜色,默认值 “rgba(20, 20, 200, 1.0)”
  • selectedIndex: 选中项 -1
  • textureRotate: 0
  • textureScale: 纹理缩放 1
  • topColor: 建筑物顶部颜色"rgba(76, 76, 76, 0.8)"
  • useLight: true
  • zIndex: 0
  • zoomThreshold: (2) [0, 30]
  • style:特效,normal(默认),window(窗户效果),windowAnimation(窗户动画效果),gradual(渐变效果),ripple(点波纹效果)

注意:若style:‘ripple’,则还需添加rippleLayer:点波纹对象采用点波纹特效时,通过不配置点波纹的opacity,实现原始点波纹隐藏效果),如

shaperLayer = new mapvgl.ShapeLayer({
                    style: 'ripple',//特效窗户特效(无纹理时):window、windowAnimation
                    rippleLayer: rippleLayer,//动态光圈效果
                    isTextureFull: true,
                    texture: './images/textures/wall2.png',
                    textureScale: 0.05,
                    topColor: 'rgba(39, 50, 85, 1.0)',//建筑物顶部颜色
                    opacity: 1.0,
                    
                });

问题:点波纹特效时,只显示数组[0]的波纹点

渲染无纹理建筑物,且添加选中效果,使用方式:

shaperLayer = new mapvgl.ShapeLayer({
                    style: 'windowAnimation',//'ripple',//特效窗户特效(无纹理时):window、windowAnimation
                    //rippleLayer: rippleLayer,//动态光圈效果
                    isTextureFull: true,
                    // texture: './images/textures/wall2.png',
                    // textureScale: 0.05,
                    topColor: 'rgba(39, 50, 85, 1.0)',//建筑物顶部颜色
                    opacity: 1.0,
                    // opacity:0.5,// 1.0,
                    color: 'rgba(39, 50, 85, 0.9)', // 柱状图颜色
                    enablePicked: true, // 是否可以拾取
                    autoSelect:true,
                    selectedIndex: -1, // 选中项
                    selectedColor: 'rgb(255, 153, 0, 0.6)', // 选中项颜色
                    onClick:(e)=>{
                        console.log('楼',e)
                    }
                });
                view.addLayer(shaperLayer);
                shaperLayer.setData(polygons);

效果图:
建筑物选中效果

data的数据格式

data: [{
geometry: {
type: ‘Polygon’,
coordinates: [
[
[116.392394, 39.910683],
[116.405976, 39.927727],
[116.420996, 39.910351]
]
]
},

Threejs图层 ThreeLayer

需要额外引入

<script src="https://unpkg.com/mapvgl/dist/mapvgl.threelayers.min.js"></script>
or
<script src="https://code.bdstatic.com/npm/mapvgl@1.0.0-beta.124/dist/mapvgl.threelayers.min.js"></script>

若需要使用threejs中的加载器等,则只需在var THREE = mapvgl.THREE;后 再进行引入。
方法:

  • add(obj, point) 向ThreeLayer图层中传递Threejs对象,第一个参数为Threejs对象,第二个为坐标,非必传
  • remove(obj) 移除ThreeLayer中的Threejs对象。

地图中的坐标采用经纬度,因此添加模型时(添加模型方法同threejs),需要对模型坐标进行转换,如

let modelpoint=new BMapGL.Point(data.geometry.coordinates[0],data.geometry.coordinates[1]);
let modelPos=mapvgl.MercatorProjection.convertLL2MC(modelpoint);

波纹点 RippleLayer

波纹点2D效果 RippleLayer

默认配置项options如下:

  • autoSelect: false
  • blend: “normal”
  • color: 颜色,同css颜色,默认值’rgba(25, 25, 250, 1)’
  • duration:动画循环一次的时间,时间越短,动画速度越快,默认值 2
  • enablePicked: false
  • repeat: false
  • selectedColor: “rgba(20, 20, 200, 1.0)”
  • selectedIndex: -1
  • size: 点大小,默认20
  • unit: size属性的单位,默认值"px" 其余可选值“m”
  • zIndex: 0

data的数据格式

[{
geometry: {
type: ‘Point’,
coordinates: [116.403748, 39.915055]
}
}]

使用方式:

rippleData.push({
            geometry: {
                type: 'Point', 
                coordinates: [pos.lng, pos.lat],
                cityName:city
            }
        });
//波纹点 2D效果
    var rippleLayer = new mapvgl.RippleLayer({
        size: 50,
        unit: 'px',//size属性的单位  px,默认值,按像素,圆半径大小不随地图级别变化 m,按地理尺度,即单位为“米”,圆半径大小跟随地图级别缩放
        color: 'rgb(255, 153, 0, 0.6)',
        enablePicked: true,
        onClick: (e) => { // 点击事件
            console.log('波纹点',e);
            if(e.dataIndex!=-1){
                //map.centerAndZoom('福州市', 9);
                map.centerAndZoom(new BMapGL.Point(e.dataItem.geometry.coordinates[0],e.dataItem.geometry.coordinates[1]), 13);
            }else{
                map.centerAndZoom('福州市', 9);
            }   
        },
    });
    view.addLayer(rippleLayer);
    rippleLayer.setData(rippleData);

点波纹选中,返回的数据,如
选中点波纹返回数据
可实现效果图:
波纹点效果

波纹点3D效果 GroundRippleLayer

无文档,可能理解存在错误
默认配置项options如下:

  • autoSelect: false
  • color: 同css颜色值
  • enablePicked: false
  • repeat: false
  • scale: 2 动态放大的大小
  • segs: 32 数值越大 越圆滑
  • selectedColor: “rgba(20, 20, 200, 1.0)”
  • selectedIndex: -1
  • size: 5 点大小
  • step: 0.1 值越大动态放大的速度越快
  • unit: “m”
  • zIndex: 0
  • zoomThreshold: (2) [0, 30]

data的数据格式,同RippleLayer

[{
geometry: {
type: ‘Point’,
coordinates: [116.403748, 39.915055]
}
}]

使用方式:

//波纹点  3D效果 
        var rippleLayer = new mapvgl.GroundRippleLayer({
            size: 20,//20 点大小 
            unit:'m',//size属性的单位  px,默认值,按像素,圆半径大小不随地图级别变化  m,按地理尺度,即单位为“米”,圆半径大小跟随地图级别缩放
            //opacity: 0.2,//全透则无法点选  添加opacity属性 则只显示数组[0]的波纹点 shaper特效
            segs: 100,//数值越大 越圆滑
            scale: 3,//10 动态放大的大小
            step: 0.1,
            color: 'rgb(255, 255, 255, 0.1)',
            //color: [245 / 255, 35 / 255, 35 / 255, 0.2], //含义?
            //repeat:true,
            enablePicked: true,
            onClick: (e) => { // 点击事件  问题:dataitem为undefined
                console.log('波纹点',e);
                if(e.dataIndex!=-1){
                    console.log("选中",e);
                }
            },
        })
        var data=[
            {geometry: {type: 'Point', coordinates: [point.lng, point.lat],testName:"测试111111"}},//
            {geometry: { type: 'Point', coordinates: [119.29, 26.08225],testName:"测试222222" }},//
        ];
        view.addLayer(rippleLayer);
        
        rippleLayer.setData(data);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将MapInfo图层导入百度地图,需要经过以下几个步骤: 1. 打开MapInfo软件并加载需要进行导入的图层。 2. 在菜单中选择“文件”->“另存为”,并选择“KML”或者“KMZ”格式来保存图层。KML是一种Keyhole标记语言,用于描述地理特征和位置信息,而KMZ是KML文件的压缩格式。 3. 打开Google Earth软件并导入先前保存的KML或KMZ文件。在Google Earth中,使用鼠标导航到需要导入的区域。 4. 在Google Earth左侧的“图层”面板中,找到先前导入的图层,并选中它。 5. 右键单击图层,并选择“保存为”->“保存图层为KML”,将图层另存为KML格式。 6. 使用在线KML到百度地图转换工具,将KML文件转换为百度地图支持的格式。这些工具可以在互联网上免费使用。 7. 将转换后的文件下载到本地计算机,并将其命名为合适的文件名,以便与百度地图中的其他图层进行区分。 8. 打开百度地图开发者平台,并创建一个新的地图应用程序。在应用程序中,选择“导入图层”选项,并选择先前保存的转换后的文件。 9. 执行导入操作后,百度地图将自动加载并显示已导入的图层数据。 此方法可用于将MapInfo图层导入百度地图,并在百度地图中进行查看和操作。在导入过程中,需要确保图层数据格式的转换和地图应用程序的创建步骤正确执行,以实现顺利的导入过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值