OpenLayers 3 加载WMTS天地图

  • 设置空间参考坐标系
    使用哪个坐标系取决于加载的地图服务,如果坐标系与地图服务的不同,则可能出现无法加载地图的问题
var projection = ol.proj.get('EPSG:4326');//经纬度空间参考坐标系
var projection = ol.proj.get('EPSG:3857');//墨卡托投影空间参考坐标系
  • 设置地图缩放层级分辨率
var projectionExtent = projection.getExtent();
var size = ol.extent.getWidth(projectionExtent) / 256;
var resolutions = [];
var matrixIds = [];
for (var z = 2; z < 19; ++z) {
    resolutions[z] = size / Math.pow(2, z);
    matrixIds[z] = z;
}
  • 创建tile layer
var url = "http://www.sdmap.gov.cn/tileservice/SDPubMap";
var tiandimap = new ol.layer.Tile({
            source: new ol.source.WMTS({
                url: url,
                projection: projection,
                style: 'default',
                format: 'image/png',
                matrixSet: "EPSG:4326",
                layer: "1",
                tileGrid: new ol.tilegrid.WMTS({
                    origin: ol.extent.getTopLeft(projectionExtent);,
                    resolutions: resolutions,
                    matrixIds: matrixIds
                }),
            })
        });
  • 设置view
    如果不设置view,则地图无法加载
var view = new ol.View({
            projection: projection,//坐标系参数如果不设置,则默认为墨卡托
            //resolutions:resolutions,//分辨率层级数组
            //resolution: resolutions[8],//初始展示分辨率,若不设置该参数,则需设置zoom参数,否则地图无法加载
            center: [120.151527, 35.99825595],//必须参数,否则地图无法加载
            zoom: 9
        })
  • 加载地图
var map = new ol.Map({
        layers: [tiandimap] ,
        target: 'map',//为地图div的id
        controls: ol.control.defaults({//放缩控制组件
            attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
                collapsible: false
            })
        }).extend([ // homebutton
            new ol.control.ZoomToExtent({
                extent: [120.05144842, 35.95285152, 120.25160558, 36.04366038]
            })
        ]),
        view: view 
    });
  • 完整代码
<!DOCTYPE html>
<html>

<head>
    <title>WMTS</title>
    <link rel="stylesheet" href="https://cdn.bootcss.com/openlayers/4.6.5/ol.css" type="text/css">
    <!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
    <script src="https://cdn.bootcss.com/openlayers/4.6.5/ol.js"></script>
</head>
<style type="text/css">
#map {
    width: 100%;
    height: 100%;
}
</style>

<body>
    <div id="map" class="map"></div>
    <script>
    var projection = ol.proj.get('EPSG:4326');
    //var projection = ol.proj.get('EPSG:3857');
    var projectionExtent = projection.getExtent();
    var size = ol.extent.getWidth(projectionExtent) / 256;
    var resolutions = [];
    var matrixIds = [];
    for (var z = 0; z < 19; ++z) {
        resolutions[z] = size / Math.pow(2, z);
        matrixIds[z] = z;
    }

    var url = "http://www.sdmap.gov.cn/tileservice/SDPubMap";
    var tiandimap = new ol.layer.Tile({
            source: new ol.source.WMTS({
                url: url,
                projection: projection,
                style: 'default',
                format: 'image/png',
                matrixSet: "EPSG:4326",
                layer: "1",
                tileGrid: new ol.tilegrid.WMTS({
                    origin: ol.extent.getTopLeft(projectionExtent),
                    resolutions: resolutions,
                    matrixIds: matrixIds
                }),
            })
        });

	var view = new ol.View({
           projection: projection,//坐标系参数如果不设置,则默认为墨卡托
           //resolutions:resolutions,//分辨率层级数组
           //resolution: resolutions[8],//初始展示分辨率,若不设置该参数,则需设置zoom参数,否则地图无法加载
           center: [120.151527, 35.99825595],//必须参数,否则地图无法加载
           zoom: 9
       });        

    var map = new ol.Map({
        layers: [tiandimap],
        target: 'map',
        controls: ol.control.defaults({//放缩控制组件
            attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
                collapsible: false
            })
        }).extend([ // homebutton
            new ol.control.ZoomToExtent({
                extent: [120.05144842, 35.95285152, 120.25160558, 36.04366038]
            })
        ]),
        view: view
    });
    </script>
</body>

</html>
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值