leaflet 加载百度地图-替换自定义图层-叠加图层(加载到一定层级加载局部地图-无缝切换)

leaflet 加载百度地图-叠加或替换加载切好的自定义图层(局部地图需按照参考系精确切图)

加载leaflet,proj4插件

导入leaflet.js ,leaflet.css

导入proj4-compressed.js ,proj4leaflet.js,leaflet-bmap.js

proj4链接

leaflet-bmap.js 内容如下

 var crs =
     new L.Proj.CRS('EPSG:900913',
	'+proj=merc +a=6378206 +b=6356584.314245179 +lat_ts=0.0 +lon_0=0.0 +x_0=0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs',
{
    resolutions: function () {
        level = 19
        var res = [];
        res[0] = Math.pow(2, 18);
        for (var i = 1; i < level; i++) {
            res[i] = Math.pow(2, (18 - i))
        }
        return res;
    }(),
    origin: [0,0],
    bounds: L.bounds([20037508.342789244, 0], [0, 20037508.342789244])
});

leaflet加载百度地图

<div id="lmap" style="width:100%;height:100%;position:absolute;top:0;right:0;"></div>
var	lmap = L.map('lmap',{crs:crs,center:L.latLng(39.915052,116.403954),zoom:16,  maxZoom: 18,maxNativeZoom: 18,
    minZoom: 5});
    
lmap.addLayer(new L.TileLayer('http://online{s}.map.bdimg.com/tile/?qt=vtile&x={x}&y={y}&z={z}&styles=pl&scaler=1&udt=20190929', {
        maxZoom: 18,
        minZoom: 5,
        subdomains: [0,1,2],
        tms: true
    }););

替换自定义图层

重写L.TileLayer.getTileUrl 函数,切片地址换成自定义地址。

L.TileLayer.MyTileLayer  = L.TileLayer.extend({
    getTileUrl: function(coords) {
     //  直接在切片图层上修改,替换为自定义地址
        var urlArgs,
            getUrlArgs = this.options.getUrlArgs;

        if (getUrlArgs) { //自定义切片地址函数
            var urlArgs = getUrlArgs(tilePoint);
        } else {
            urlArgs = {
                z: tilePoint.z,
                x: tilePoint.x,
                y: tilePoint.y
            };
        }

        return L.Util.template(this._url, L.extend(urlArgs, this.options, {s: this._getSubdomain(tilePoint)}));
  }
});

L.tileLayer.myTileLayer = function (url, options) {
    return new L.TileLayer.MyTileLayer(url, options);
};

var url = ',
    options = {
        subdomain: '012',
        getUrlArgs: function (tilePoint) {
        //写自己的逻辑,返回切片地址
            return  ;
        }        
    };
L.tileLayer.myTileLayer (url, options).addTo(lmap);

叠加自定义图层

显示两个切片图层,先加载百度切片图层,然后加载自定义图层

##加载百度切片图层



//加载百度地图代码

 var	lmap = L.map('lmap',{crs:crs,center:L.latLng(39.915,116.404),zoom:16,  maxZoom: 21,maxNativeZoom: 21,
    minZoom: 5});
new L.TileLayer('http://online{s}.map.bdimg.com/tile/?qt=vtile&x={x}&y={y}&z=>{z}&styles=pl&scaler=1&udt=20190929 ', {
    maxZoom: 21,
    minZoom: 5,
  subdomains: [0,1,2],
tms: true
}).addTo(lmap);

##加载自定义图层
重新L.TileLayer.getTileUrl 函数



L.TileLayer.MyTileLayer2   = L.TileLayer.extend({
    getTileUrl: function(coords) {
     
        // console.log("coords---->",coords);
        console.log("我的TileLayer方法")
		//替换加载自定义切片地址
        if(coords.z == 19){
            console.log("getTileUrl的方法"+coords.z)
            return 'tiles/' + coords.z + '/' + ((coords.y + 27081) * 1 + 2) + '.' +  (coords.x - 105707 + 1) + '.jpg';
        }else if(coords.z == 20){
            return 'tiles/' + coords.z + '/' + ((coords.y + 54163) * 1 + 2) + '.' + (coords.x - 211414 + 1) + '.jpg';
        }else if(coords.z == 21){
            return 'tiles/' + coords.z + '/' + ((coords.y + 108327) * 1 + 2) + '.' + (coords.x - 422828 + 1) + '.jpg';
        }
        // return L.Util.template(this._url, L.extend(data, this.options));

    }
});


//加载叠加切片图层
L.tileLayer.myTileLayer2    = function() {
    return new L.TileLayer.MyTileLayer2   ('http://online{s}.map.bdimg.com/onlinelabel/?qt=tile&x={x}&y={y}&z={z}&styles=pl&scaler=1&p=1&v=020 ', {
        maxZoom: 21,
        minZoom: 5,
        subdomains: [0,1,2],
        tms: true
    });
}

lmap.addLayer( L.tileLayer.myTileLayer2() );
Leaflet是一款轻量级的JavaScript库,用于创建交互式的Web地图。如果你想在Leaflet中集成百度地图,并使用自定义地图样式(即`map-style-id`),首先你需要确保已经在百度地图API上注册并获取了地图样式ID。百度地图的样式ID通常是由百度提供的一组预设样式,或者你可以通过官方文档创建自定义样式。 以下是基本步骤: 1. **引用百度地图API**:在HTML文件中添加百度地图的JS链接,例如: ```html <script src="https://api.map.baidu.com/api?v=3.0&ak=<your_api_key>"></script> ``` 替换 `<your_api_key>` 为你实际的百度地图API密钥。 2. **初始化地图**:在 Leaflet 中,你可以创建一个 L.Map 实例,然后设置地图的 ID 和百度地图服务: ```javascript var map = L.map('mapid').setView([39.9042, 116.4074], 13); // 北京位置及初始缩放级别 var baiduLayer = L.tileLayer('http://{s}.api.map.baidu.com/tile/v2/map?style={map_style_id}', { maxZoom: 22, attribution: 'Map data © <a href="https://developers.google.com/maps/">Google</a> and ' + '<a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' + '| Map style by <a href="https://lbsyun.baidu.com/">Baidu Maps</a>' }); map.addLayer(baiduLayer); ``` `{map_style_id}` 需替换为你从百度地图获取的实际 `map-style-id`。 3. **加载地图样式**:如果你有预设的百度地图样式ID,可以在初始化时直接传递。如果没有,需要先在百度地图开发者平台上创建或选择一个样式。 注意:虽然Leaflet本身不支持百度地图的具体样式管理,但你可以借助其提供的基础地图层和其他第三方插件,如L.BaiduMap,来间接实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值