首页 > 其他分享 >WebGIS|OpenLayers加载Geoserver发布的图层数据

WebGIS|OpenLayers加载Geoserver发布的图层数据

时间:2023-03-14 10:12:40浏览次数:48  
标签:scale WebGIS source ol OpenLayers Geoserver var new

OpenLayers加载WMS服务总的来说有两种方式:ol.layer.Image+ol.source.ImageWMS和ol.layer.Tile+ol.source+TileWMS这两种方式加载都需要设定bounds(bbox)和projection。

openlayers-workshop下载

下载地址https://github.com/openlayers/workshop/releases

image-20230313211054583

启动npm服务

下载之后,切换到工程里…\openlayers-workshop-en内部执行

npm start 启动服务

添加页面

编辑index.html,这里使用的是Geoserver给出的示例代码。

image-20230313210312769

在index.html里编写代码,将Geoserver发布的数据加载至index.html:

var untiled = new ol.layer.Image({
  source: new ol.source.ImageWMS({
    ratio: 1,
    url: 'http://服务器的公网IP地址:geoserver对应的端口号/geoserver/tjl_webgis/wms',
    params: {'FORMAT': format,
             'VERSION': '1.1.1',  
          "STYLES": '',
          "LAYERS": 'tjl_webgis:point',
          "exceptions": 'application/vnd.ogc.se_inimage',
    }
  })
});
var tiled = new ol.layer.Tile({
  visible: false,
  source: new ol.source.TileWMS({
    url: 'http://服务器的公网IP地址:geoserver对应的端口号/geoserver/tjl_webgis/wms',
    params: {'FORMAT': format, 
             'VERSION': '1.1.1',
             tiled: true,
          "STYLES": '',
          "LAYERS": 'tjl_webgis:point',
          "exceptions": 'application/vnd.ogc.se_inimage',
       tilesOrigin: 109.6475 + "," + 29.495
    }
  })
});
var projection = new ol.proj.Projection({
    code: 'EPSG:4326',
    units: 'degrees',
    axisOrientation: 'neu',
    global: true
});
var map = new ol.Map({
  controls: ol.control.defaults({
    attribution: false
  }).extend([mousePositionControl]),
  target: 'map',
  layers: [
    untiled,
    tiled
  ],
  view: new ol.View({
     projection: projection
  })
});
map.getView().on('change:resolution', function(evt) {
  var resolution = evt.target.get('resolution');
  var units = map.getView().getProjection().getUnits();
  var dpi = 25.4 / 0.28;
  var mpu = ol.proj.METERS_PER_UNIT[units];
  var scale = resolution * mpu * 39.37 * dpi;
  if (scale >= 9500 && scale <= 950000) {
    scale = Math.round(scale / 1000) + "K";
  } else if (scale >= 950000) {
    scale = Math.round(scale / 1000000) + "M";
  } else {
    scale = Math.round(scale);
  }
  document.getElementById('scale').innerHTML = "Scale = 1 : " + scale;
});
map.getView().fit(bounds, map.getSize());

Geoserver 跨域处理与设置属性

Geoserver 跨域处理

配置完成后在其他设备可以通过ip地址访问服务器已经启动的GeoServer,但是通过前端调用服务器上的GeoServer发布的影像,需要处理跨域问题。基于tomcat安装的 geoserver2.18 war包版,给tomcat整体配跨域策略,可实现geoserver的跨域问题。

在tomcat中的lib文件夹下增加两个jar包。

image-20230313204343650

在tomcat中的conf文件夹下的web.xml文件中的web-app代码下增加如下代码:

<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET,POST,HEAD,PUT,DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Accept,Origin,X-Requested-With,Content-Type,Last-Modified</param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>Set-Cookie</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

重启tomcat,可以获取Geoserver发布的数据

image-20230313200331648

配置X-Frame-Options属性

在发布影像时,发现点击要素属性表不能出现,进入控制台发现报错:Refused to display in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'

image-20230313195432504 image-20230313195314186

X-Frame-Options是一个HTTP标头(header),用来告诉浏览器这个网页是否可以放在iFrame内。

可以配置的参数有两个:

  1. DENY:浏览器拒绝当前页面加载任何Frame页面。

  2. SAMEORIGIN:页面只能加载入同源域名下的页面。

  3. ALLOW-FROM uri:只能被嵌入到指定域名的框架中。

tomcat目录/conf/web.xml中的搜索httpHeaderSecurity配置(低版本不支持,需Tomcat 7.0.69以上),将其前面的注释去掉即可。

<filter-mapping>
      <filter-name>httpHeaderSecurity</filter-name>
      <url-pattern>/*</url-pattern>
      <dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter>
      <filter-name>httpHeaderSecurity</filter-name>
      <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
      <async-supported>true</async-supported>
      // 以下为额外添加
      <init-param>
        <param-name>antiClickJackingEnabled</param-name>
        <param-value>true</param-value>
      </init-param>
      <init-param>
        <param-name>antiClickJackingOption</param-name>
        <param-value>ALLOW-FROM</param-value>
      </init-param>
</filter>

修改配置后点击要素可以显示属性表。

image-20230313200503697

标签:scale,WebGIS,source,ol,OpenLayers,Geoserver,var,new
From: https://www.cnblogs.com/tangjielin/p/17213896.html

相关文章

  • OpenLayers 绘制带箭头的LineString
    <!--*********************************************************************Copyright©2000-2022SuperMapSoftwareCo.Ltd.Allrightsreserved.*************......
  • 银河麒麟安装GeoServer服务
    基于银河麒麟V10SP3下安装部署GeoServer地图服务一、环境 Java1.8.0_361Geoserver2.17.2GeoServer2.17.2下载:https://nchc.dl.sourceforge.net/project/geoserve......
  • Vue+Openlayers 试手(待更新)
    选用Vue2.0+Webpack+Openlayers。参考链接:https://blog.csdn.net/qq_43274430/article/details/102580903官方文档API(v6.15.1):https://openlayers.org/en/v6.15.1/apidoc......
  • C# 自动化发布GeoServer
    最近新接触了GeoServer,从零开始的研究也是折磨了好几天,发现GeoServer这块很多大佬分享各种解决方案,也是帮了我大忙,刚好告一个段落了,所以也贡献一下我这几天的研究成果,希望......
  • openlayers 在地图上绘制矩形框,非鼠标框选
    <!DOCTYPEhtml><html><head><metacharset="UTF-8"/><titledata-i18n="resources.title_tiledMapLayer3857"></title><scripttype="text/javascript"src="../js......
  • Openlayers 通过canvas渲染部分地图
    效果图实现原理简单描述Openlayers图层的渲染大多数都是通过canvas实现,在图层渲染前后事件中通过canvas控制渲染区域即可实现。代码点击查看代码componentDidMoun......
  • [openlayers07]——加载天地图为底图并展示GeoJSON
    [openlayers07]_加载天地图为底图并展示GeoJSON1.加载底图(得申请key)天地图2.创建地图、设置center和投影//创建地图constcenter=[114.1692,30.494];//EPSG:4......
  • [openlayers06]——根据features的属性设置style
    [openlayers06]_根据features的属性设置style1.说明Makingitlooknice我们会希望不同的要素展示成不用的样式(style),下面的内容:展示如何根据features自身的属性设......
  • [openlayers05]_——Downloading_features(下载功能)
    [openlayers05]_Downloadingfeatures(下载功能)1.说明Downloadingfeatures在用户上传数据并编辑之后,我们希望用户能下载结果。为此,我们将featuredata转为GeoJSON......
  • [openlayers04]——Drawing new features
    [openlayers04]_Drawingnewfeatures1.效果展示gif展示(有可能不展示):绘制结果2.完整代码js代码import'./style.css';importMapfrom'ol/Map.js';import......