解决OpenLayers调用GeoServer图层时出现不对齐的问题

问题描述:

笔者在将GeoServer发布的WMS图层利用OpenLayers加载到地图上时出现地图和图层显示坐标系相同但不对应的情况,OpenLayers加载地图源坐标为EPSG:3857,在GeoServer中发布的本地图层投影坐标系也为EPSG:3857,添加调试信息并打印当前加入图层的坐标系和当前地图所用坐标系后,显示坐标系相同但图层和地图不能对应。

一、问题详细描述 

在GeoServer上发布WMS图层,未检测到本机SRS,为图层手动定义坐标系统为EPSG:3857,将发布的图层利用OpenLayers加载显示。

以下为JavaScript中添加GeoServer发布的图层到页面上的代码:

//添加geoserver图层
var wmsLayer = new ol.layer.Image({
    source: new ol.source.ImageWMS({
        url: 'http://localhost:8338/geoserver/geoserver/wms',//8338为笔者自己定义的端口号
        params: {
            'LAYERS': 'geoserver:china',//此处为 'LAYERS':'你的工作区名:你的图层名'
            'TILED': true,
        },
        serverType: 'geoserver',
        crossOrigin: 'anonymous'
    }),
});

笔者在HTML中采用checkbox复选框设置显示WMS图层的响应,代码如下:

 <input type="checkbox" id="china">
        <label for="china">显示地图</label>

在JavaScript中添加响应,当选中复选框后,显示WMS图层,代码如下:

// 图层控制监听复选框变化
    document.getElementById('china').addEventListener('change', function () {
        if (this.checked) {
            map.addLayer(wmsLayer);
        } else {
            map.removeLayer(wmsLayer);
        }
    });

加载结果如下图所示,显然坐标不对应。

 在JavaScript中添加如下调试代码,检验图层和地图所用的坐标系是否对应:

  // 调试信息:打印当前加入图层的坐标系和当前地图所用坐标系
    if (baseLayer instanceof ol.layer.Group) {
        console.log('当前加入图层的坐标系:', baseLayer.getLayers().item(0).getSource().getProjection().getCode());
    } else {
        console.log('当前加入图层的坐标系:', baseLayer.getSource().getProjection().getCode());
    }
    console.log('当前地图所用坐标系:', map.getView().getProjection().getCode());
}

在网页中点击F12→控制台,可以看到当前加入图层坐标系和地图所用坐标系相同。 

 笔者经过研究后得到如下解决方案,仅供参考。

二、解决方案建议

在ArcMap中打开发布的WMS图层,查看其属性发现该图层仍未定义坐标系,尽管在GeoServer中为其定义SRS,但实际上该图层的坐标系仍未Unknown,因此需要我们为该图层定义投影坐标。在ArcToolBox中的数据管理工具→投影和变换→定义投影,将该图层定义为WGS 1984 Web Mercator (Auxiliary Sphere)EPSG:3857对应的投影坐标系。

修改过后在GeoServer上发布,可以看到此时GeoServer上可以识别到图层的本机SRS,利用OpenLayers调用即可和地图重叠。


欢迎交流🌹🌹

请问在openlayers中如何删除Layer中的marker 3 在层中加了一个标记怎么永久的存到地图上 3 OpenLayers 如何设死地图边界 3 谁写过openlayers解析xml 3 openlayer.popup 3 OpenLayers 怎么做字段标注 4 字段标注不是用OL做的,而是你在SLD中定义用数据表的哪个字段做标签就可以了 4 OpenLayers 中画最短轨迹 4 使用TileCache配合OpenLayers 4 openlayers如何准确测距 9 openlayers简单实用例子 9 关于TileCache函数 13 openlayers 有函数说明的类图 14 go 14 Maker 一多,客户端就死掉 15 OpenLayers 怎么实现 AJAX 16 openlayer 要怎么研究才会应用得比较自如 16 改良OpenLayers的Popup 16 在openlayers的地图中要添加地图搜索功能一般采用什么方法 17 openlayers中如何访问geoserver发布的图片 18 什么是TMS? 18 怎样设置瓦片的大小 18 画一条线,数据量太大,怎么办? 18 怎么在图层上动态画点 20 GeoExt集成google map ,地图偏移 21 用JavaScript为OpenLayers.Marker的加上单击显示详细信息的功能 21 改良OpenLayers的MousePostion 25 使用OpenLayers实现一个在鼠标点击处添加标记的效果 27 openlayers 利用google maps的卫星地图 29 openLayers集成google map ,点标注错位 30 openlayers可以做出谷歌效果的地图吗? 31 用OpenLayers API和类来画点、线、面 32 OGC标准术语介绍WMS、WFS、WCS 35 如何控制地图的放缩 37 openLayers链接WMS的代码探讨 37 openlayers 2.5 矢量层在ie下闪烁的问题 38 openLayers 在地图上添加一个点并保存 39 openLayers 各个参数的意义 42 geoserver能搞出这种风格的图来吗? 43 关于SLD的线切割后的设置 43 GEOSERVE 标注铁路,使用 SLD 44 geoserver 发布.shp 中文乱码问题 怎么解决啊 45 Geoserver怎么连postGreSql 数据库 48 Geoserver连Oracle Spatial 52 GeoServer架构浅谈 53 Geoserver发布地图无法显示问题 57 WebGIS相关的OpenGIS规范 58 geoserver中地图以外的区域以自定义图片填充 62 怎样修改 geoServer 的用户名密码 65 GeoServer中的WMS服务生成的png图片背景色为透明 65 比例尺 65 需不需要一个layer对应一个store 66 如何部署shp 66 用GeoWebCache后Marker错位 66 标签太大导致不能显示? 67 geoserver把两个shapefile格式的图叠 67 GeoServer 能够集成 Google Map? 68 gwc地图切片的缓存路径在web.xml中设置么 68 如何实现地图查询? 68 sld文件怎么用 69 在sld中怎么控制路名的间隔? 69
OpenLayers是一个开源的JavaScript库,用于在Web上创建交互式地图应用程序。它支持加载各种地图图层,包括Geoserver图层。下面是使用OpenLayers加载Geoserver图层的一般步骤: 1. 引入OpenLayers库文件。你可以从OpenLayers官方网站下载最新版本的库文件,并将其引入到你的HTML文件中。 ```html <script src="path/to/openlayers.js"></script> ``` 2. 创建地图容器。在HTML文件中创建一个具有唯一ID的`<div>`元素,用于容纳地图。 ```html <div id="map"></div> ``` 3. 初始化地图对象。在JavaScript代码中,使用OpenLayers的`Map`类来创建一个地图对象,并指定地图容器的ID。 ```javascript var map = new ol.Map({ target: 'map' }); ``` 4. 创建Geoserver图层。使用OpenLayers的`TileLayer`类来创建一个Geoserver图层,并指定Geoserver图层URL。 ```javascript var geoserverLayer = new ol.layer.Tile({ source: new ol.source.TileWMS({ url: 'http://your-geoserver-url.com/geoserver/wms', params: { 'LAYERS': 'your-layer-name' } }) }); ``` 5. 将Geoserver图层添加到地图中。使用`addLayer`方法将Geoserver图层添加到地图对象中。 ```javascript map.addLayer(geoserverLayer); ``` 6. 设置地图视图。使用`View`类来设置地图的中心点和缩放级别。 ```javascript var view = new ol.View({ center: ol.proj.fromLonLat([longitude, latitude]), zoom: 10 }); map.setView(view); ``` 以上是使用OpenLayers加载Geoserver图层的基本步骤。你可以根据自己的需求进行进一步的定制和配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>