OpenLayers 6.6.1调用ol.proj.transform转换EPSG:25832坐标报错怎么解决?
报错原因
你参考的是OpenLayers 3的旧教程,OpenLayers 6.x版本不再自动关联全局proj4对象,你通过proj4.defs定义的EPSG:25832投影没有被OpenLayers的投影模块识别,所以调用ol.proj.transform转换坐标时找不到目标投影,抛出空值错误。另外你的配置中minzoom参数不符合OpenLayers的驼峰命名规范,正确写法为minZoom,否则该缩放限制不会生效。
修复方案
在proj4.defs定义投影代码之后,添加proj4到OpenLayers的注册逻辑即可,修改后的完整main.js代码如下:
window.onload = init; function init(){ // 设置坐标系 var projname = 'EPSG:25832'; proj4.defs (projname, '+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs'); // 新增:将proj4注册到OpenLayers投影模块 ol.proj.proj4.register(proj4); // 初始化视图,默认中心为德国区域 var startview = new ol.View ({ projection: projname, center: ol.proj.transform ([10.5, 51], 'EPSG:4326', projname), zoom: 6, // 修正参数命名 minZoom: 6, extent: ol.proj.transformExtent([4, 46, 16, 56], 'EPSG:4326', projname) }) // 初始化地图 const map = new ol.Map({ view: startview, layers: [ new ol.layer.Tile({ source: new ol.source.OSM() }) ], target: 'js-map' }) }
如果需要限制视图不超出extent范围,可以给View配置添加constrainOnlyCenter: true,避免拖动时出现边缘空白。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

