OpenLayers 6加载各种地图源的方法(天地图、百度、高德、ArcGIS、Bing、OSM、Google等)

前言

OpenLayers是一个用于开发WebGIS客户端的JavaScript包。OpenLayers 支持多种常用的地图来源,包括天地图、百度地图、高德地图、ArcGIS地图、Bing地图、OSM地图、Google地图等。


一、加载天地图

1.前提条件

加载天地图前,需要先到天地图官网注册并申请应用密钥,官网地址为:国家地理信息公共服务平台 天地图

2.服务地址

瓦片地址如下(以矢量底图为例):https://t0.tianditu.gov.cn/DataServer?T=vec_c&x=3233&y=673&l=12&tk=你的密钥

3.加载代码

//实例化map对象加载地图
        var map = new ol.Map({
            //地图容器div的id 
            target: 'container',           
            //地图容器中加载的图层
            layers: [
                //加载瓦片图层数据
                new ol.layer.Tile({
                    title: "天地图矢量图层",
                    source: new ol.source.XYZ({
                        url: "http://t0.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=你的密钥",                        
                        wrapX: false
                    })                    
                }),
                new ol.layer.Tile({
                    title: "天地图矢量图层注记",
                    source: new ol.source.XYZ({
                        url: "http://t0.tianditu.com/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=你的密钥",                        
                        wrapX: false
                    })                    
                })
            ],
            //地图视图设置
            view: new ol.View({
                //地图初始中心点
                center: ol.proj.transform([103.23, 35.33], 'EPSG:4326', 'EPSG:3857'), //地图初始中心点
                //地图初始显示级别
                zoom: 4
            })
        });

二、加载百度地图

1.加载代码

//坐标参考系
        var projection = ol.proj.get("EPSG:3857");
        //分辨率
        var resolutions = [];
        for (var i = 0; i < 19; i++) {
            resolutions[i] = Math.pow(2, 18 - i);
        }
        var tilegrid = new ol.tilegrid.TileGrid({
            origin: [0, 0],
            resolutions: resolutions
        });
        //拼接百度地图出图地址
        var baidu_source = new ol.source.TileImage({
            //设置坐标参考系
            projection: projection,
            //设置分辨率
            tileGrid: tilegrid,
            //出图基地址
            tileUrlFunction: function (tileCoord, pixelRatio, proj) {
                if (!tileCoord) {
                    return "";
                }
                var z = tileCoord[0];
                var x = tileCoord[1];
                var y = tileCoord[2];

                if (x < 0) {
                    x = "M" + (-x);
                }
                if (y < 0) {
                    y = "M" + (-y);
                }
                return "http://online3.map.bdimg.com/onlinelabel/?qt=tile&x=" + x + "&y=" + y + "&z=" + z + "&styles=pl&udt=20151021&scaler=1&p=1";
            }
        });
        //百度地图
        var baidu_layer = new ol.layer.Tile({
            source: baidu_source
        });
        //地图容器
        var map = new ol.Map({
            target: 'container',
            layers: [baidu_layer],
            view: new ol.View({
                center: ol.proj.transform([103.23, 35.33], 'EPSG:4326', 'EPSG:3857'),
                zoom: 4
            })
        });

三、加载高德地图

1.加载代码

 var gaodeMapLayer = new ol.layer.Tile({
            title: "高德地图",
            source: new ol.source.XYZ({
                url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}',
                wrapX: false
            })
        });

        var map = new ol.Map({
            layers: [gaodeMapLayer],
            view: new ol.View({
                center: ol.proj.transform([103.23, 35.33], 'EPSG:4326', 'EPSG:3857'), //地图初始中心点
                projection: 'EPSG:3857',
                zoom: 4,
                minZoom: 1
            }),
            target: 'container'
        });

四、加载ArcGIS地图

1.加载代码

//实例化鼠标位置控件(MousePosition)
        var mousePositionControl = new ol.control.MousePosition({
            //坐标格式
            coordinateFormat: ol.coordinate.createStringXY(4),
            //地图投影坐标系(若未设置则输出为默认投影坐标系下的坐标)
            projection: 'EPSG:4326',
            //坐标信息显示样式,默认是'ol-mouse-position'
            className: 'custom-mouse-position',
            //显示鼠标位置信息的目标容器
            target: document.getElementById('mouse-position'),
            //未定义坐标的标记
            undefinedHTML: '&nbsp;'
        });

        //实例化Map对象加载地图
        var map = new ol.Map({
            //地图容器div的ID
            target: 'container', 
            //地图容器中加载的图层
            layers: [],
            //地图视图设置
            view: new ol.View({
                //地图初始中心点
                center: ol.proj.transform([103.23, 35.33], 'EPSG:4326', 'EPSG:3857'),
                //地图初始显示级别
                zoom: 4 
            }),
            //加载控件到地图容器中
            controls: ol.control.defaults({//地图中默认控件
                //                attributionOptions: /** @type {ol.control.Attribution} */({
                //                    collapsible: true //地图数据源信息控件是否可展开,默认为true
                //                })
            }).extend([mousePositionControl])//加载鼠标位置控件
        });
      
        arcGISLayers = new ol.layer.Tile({
            source: new ol.source.XYZ({
                url: 'http://server.arcgisonline.com/ArcGIS/rest/services/' + 'World_Topo_Map/MapServer/tile/{z}/{y}/{x}'
            })
        })
        //添加地图图层  
        map.addLayer(arcGISLayers); 

五、加载Bing地图

1.前提条件

加载Bing图前,需要先到官网注册并申请应用密钥,官网地址为:https://www.microsoft.com/en-us/maps

2.加载代码

//实例化Map对象加载地图
        var key = '你的密钥';
        var roads = new ol.layer.Tile({
            source: new ol.source.BingMaps({ key: key, imagerySet: 'Road' })
        });
        var map = new ol.Map({
            layers: [roads],
            target: 'container',
            view: new ol.View({
                center: ol.proj.transform([103.23, 35.33], 'EPSG:4326', 'EPSG:3857'),
                zoom: 4
            })
        });

六、加载OSM地图

1.加载代码

 //实例化Map对象加载地图
        var map = new ol.Map({
            //地图容器div的ID
            target: 'container',
            //地图容器中加载的图层
            layers: [
                //加载瓦片图层数据
                new ol.layer.Tile({
                    //图层对应数据源,此为加载OpenStreetMap在线瓦片服务数据
                    source: new ol.source.OSM() 
                })
            ],
            //地图视图设置
            view: new ol.View({
                //地图初始中心点
                center: ol.proj.transform([103.23, 35.33], 'EPSG:4326', 'EPSG:3857'),
                //地图初始显示级别
                zoom: 4 
            })
        });

七、加载Google地图

1.加载代码

//实例化map对象加载地图
        var map = new ol.Map({
            //地图容器div的id
            target: 'container',
            //地图容器中加载的图层
            layers: [
                //加载瓦片图层数据
                new ol.layer.Tile({
                    title: "谷歌地图",
                    source: new ol.source.XYZ({
                        url: "http://mt2.google.cn/vt/lyrs=m@167000000&hl=zh-CN&gl=cn&x={x}&y={y}&z={z} ",
                        wrapX: false
                    })
                })
            ],
            //地图视图设置
            view: new ol.View({
                //地图初始中心点
                center: ol.proj.transform([103.23, 35.33], 'EPSG:4326', 'EPSG:3857'),
                zoom: 4
            })
        });

  • 14
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
OpenLayers本身不支持直接加载百度地图,因为百度地图的API使用了一些特殊的加密方式,无法直接在OpenLayers中实现。不过,您可以通过使用第三方插件或者自己编写代码的方式,在OpenLayers加载百度地图。以下是两种常用的加载百度地图方法: 1. 使用第三方插件 有一些第三方插件可以让OpenLayers支持加载百度地图,例如ol-ext(https://viglino.github.io/ol-ext/),这个插件可以让OpenLayers支持加载百度地图高德地图等。 2. 自己编写代码 您也可以自己编写代码来实现在OpenLayers加载百度地图。具体来说,您可以使用百度地图API获取瓦片图层,并将其添加到OpenLayers地图上。代码实现可以参考以下示例: ``` // 创建百度地图图层 var baiduLayer = new ol.layer.Tile({ source: new ol.source.XYZ({ tileUrlFunction: function(tileCoord) { var x = tileCoord[1]; var y = tileCoord[2]; var z = tileCoord[0]; var url = "http://online{0-3}.map.bdimg.com/onlinelabel/?qt=tile&x=" + x + "&y=" + y + "&z=" + z + "&styles=pl&scaler=1"; return url; }, projection: 'EPSG:3857' }) }); // 创建OpenLayers地图对象 var map = new ol.Map({ target: 'map', layers: [baiduLayer], view: new ol.View({ center: ol.proj.fromLonLat([116.3975, 39.9087]), zoom: 10 }) }); ``` 需要注意的是,上述示例中的瓦片图层URL地址中的“online{0-3}”是百度地图提供的多个服务器地址,需要根据实际情况选择使用哪个地址
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

动立信息服务

您的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值