Geoserver发布图层服务和地图影像服务

首页

image

主页主要分为左侧的功能目录区,中间Geoserver各项指标统计区和服务类型指示区。我们大多的操作会在功能目录区和Geoserver各项指标区,当然实际使用时,这部分会由功能决定。

使用步骤

Geoserver的使用步骤和ArcGIS Server的使用步骤少有不同,这个不必在意。Geoserver的结构式在工作区中上传发布数据。所以一般情况下,我们先要创建工作区,然后上传数据,最后再发布服务,进行切图等操作。

具体操作

  • 创建工作区
    创建工作区可以在主页指标区点击“创建工作区”,进行创建,还可以点击功能区的工作区,进入如下页面,点击顶部的“添加工作区”,填入相应的信息即可完成创建。

image

  • 注意
    Name为工作空间名称,命名空间 URI为你发布服务后调用服务时用的,测试环境可以用localhost或127.0.0.1代替,但在生产环境请使用完全限定域名(fqdn)。

image

创建完成

image

  • 添加数据
    打开数据存储功能,点击“添加新的数据存储”即可。

image

Geoserver支撑很多类型,我们选择shapefile

image

进入添加矢量数据源页面后,点击浏览,浏览到Geoserver安装目录下的data_url文件夹中,然后找到要发布的shapefile文件,点击即可。

image

字符集使用utf-8(GeoServer发布shapfile字段名和值乱码问题解决DBF charset为GBK或者GB2312均可),填入相应的名称和url并保存。

完整如下

image

  • 发布服务
    上传完数据源,页面自动跳转到发布页面,

image

点击发布,页面跳转值编辑图层页面,

image

在定义SRS的查找中查找4326,然后点击查找到的结果

image

接下来分别点击边框栏中的“从数据中计算”和“Compute from native bounds”

image

最后点击保存即可发布成服务。

  • 浏览
    服务发布完即可在Layer Preview中看到刚才发布的数据,点击“OpenLayers“即可用OpenLayers进行浏览。

image

在OpenLayer中打开的效果。

image

地图影像切片

代码中加载影像地图的各个参数配置获取方式:localhost/geowebcache/

基于Tomcat部署的Geoserver配置Geowebcache,并转发ArcGIS切片

1、将GeowebCache的war包解压到tomcat的webapp下,打开war包中的WEB-INF中的web.xml文件,同时创建一个你想保存geowencache的切片的空文件夹,例如我命名叫arcgis

 web.xml文件中 添加<context-param>节点,param-value是你所建的文件夹

2、在重启动tomcat 之后我们在arcgis文件夹中可以看到:

 3、打开geowebcache.xml文件,在<layers>…</layers>节点中添加如下节点:

 4、配置完以后如果无法启动geowebcache,日志报错,找到geowebcache-core-context文件,往里面添加:

<bean id="gwcArcGIGridsetConfigutation" class="org.geowebcache.arcgis.layer.ArcGISCacheGridsetConfiguration"/> 

5、加完之后可以在geowebcache的list中查看到自己添加的瓦片

6、重启一下服务,刷新一下,代码如下

<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="imagetoolbar" content="no">
<title>ChaoYangRoadVector EPSG:2436_ChaoYangRoadVector image/png</title>
<style type="text/css">
body { font-family: sans-serif; font-weight: bold; font-size: .8em; }
body { border: 0px; margin: 0px; padding: 0px; }
#map { width: 85%; height: 85%; border: 0px; padding: 0px; }
#info iframe {border: none;}
.ol-scale-value {top: 24px; right: 8px; position: absolute; }
.ol-zoom-value {top: 40px; right: 8px; position: absolute; }
</style>
<script src="../rest/web/openlayers3/ol.js"></script>
<link rel='stylesheet' href='../rest/web/openlayers3/ol.css' type='text/css'>
<script type="text/javascript">
function init(){
function ScaleControl(opt_options) {
  var options = opt_options || {};

  var element = document.createElement('div');
  element.setAttribute('id', 'scale');
  element.className = 'ol-scale-value';

  ol.control.Control.call(this, {
    element: element,
    target: options.target
  });

};
ol.inherits(ScaleControl, ol.control.Control);
ScaleControl.prototype.setMap = function(map) {
  map.on('postrender', function() {
    var view = map.getView();
    var resolution = view.getResolution();
    var dpi = 96.0;
    var mpu = map.getView().getProjection().getMetersPerUnit();
    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;
  }, this);
  ol.control.Control.prototype.setMap.call(this, map);
}

function ZoomControl(opt_options) {
  var options = opt_options || {};

  var element = document.createElement('div');
  element.setAttribute('id', 'zoom');
  element.className = 'ol-zoom-value';

  ol.control.Control.call(this, {
    element: element,
    target: options.target
  });

};
ol.inherits(ZoomControl, ol.control.Control);
ZoomControl.prototype.setMap = function(map) {
  map.on('moveend', function() {
    var view = map.getView();
    document.getElementById('zoom').innerHTML =  'Zoom level = ' + view.getZoom();
  }, this);
  ol.control.Control.prototype.setMap.call(this, map);
}

var gridsetName = 'EPSG:2436_ChaoYangRoadVector';
var gridNames = ['EPSG:2436_ChaoYangRoadVector:0', 'EPSG:2436_ChaoYangRoadVector:1', 'EPSG:2436_ChaoYangRoadVector:2', 'EPSG:2436_ChaoYangRoadVector:3', 'EPSG:2436_ChaoYangRoadVector:4', 'EPSG:2436_ChaoYangRoadVector:5', 'EPSG:2436_ChaoYangRoadVector:6', 'EPSG:2436_ChaoYangRoadVector:7'];
var baseUrl = '../service/wmts';
var style = '';
var format = 'image/png';
var infoFormat = 'text/html';
var layerName = 'ChaoYangRoadVector';
var projection = new ol.proj.Projection({
code: 'EPSG:2436',
units: '',
axisOrientation: 'neu'
});
var resolutions = [38.21834518669038, 19.109040301413938, 9.554387858775717, 4.777061637456608, 2.3886631106595546, 0.5971657776648887, 0.2984505969011938, 0.1492252984505969];
baseParams = ['VERSION','LAYER','STYLE','TILEMATRIX','TILEMATRIXSET','SERVICE','FORMAT'];

params = {
  'VERSION': '1.0.0',
  'LAYER': layerName,
  'STYLE': style,
  'TILEMATRIX': gridNames,
  'TILEMATRIXSET': gridsetName,
  'SERVICE': 'WMTS',
  'FORMAT': format
};

function constructSource() {
  var url = baseUrl+'?'
  for (var param in params) {
    if (baseParams.indexOf(param.toUpperCase()) < 0) {
      url = url + param + '=' + params[param] + '&';
    }
  }
  url = url.slice(0, -1);

  var source = new ol.source.WMTS({
    url: url,
    layer: params['LAYER'],
    matrixSet: params['TILEMATRIXSET'],
    format: params['FORMAT'],
    projection: projection,
    tileGrid: new ol.tilegrid.WMTS({
      tileSize: [256,256],
      extent: [-5123300.0,286890.90678181313,531792.1005842015,1.00023E7],
      origin: [-5123300.0, 1.00023E7],
      resolutions: resolutions,
      matrixIds: params['TILEMATRIX']
    }),
    style: params['STYLE'],
    wrapX: true
  });
  return source;
}

var layer = new ol.layer.Tile({
  source: constructSource()
});

var view = new ol.View({
  center: [0, 0],
  zoom: 2,
  resolutions: resolutions,
  projection: projection,
  extent: [-5123300.0,286890.90678181313,531792.1005842015,10002300.0]
});

var map = new ol.Map({
  controls: ol.control.defaults({attribution: false}).extend([
    new ol.control.MousePosition(),
    new ScaleControl(),
    new ZoomControl()
  ]),
  layers: [layer],
  target: 'map',
  view: view
});
map.getView().fit([499475.1334838867,293614.9572753906,524636.3444824219,327119.98010253906], map.getSize());

window.setParam = function(name, value) {
  if (name == "STYLES") {
    name = "STYLE"
  }
  params[name] = value;
  layer.setSource(constructSource());
  map.updateSize();
} 

map.on('singleclick', function(evt) {
  document.getElementById('info').innerHTML = '';

  var source = layer.getSource();
  var resolution = view.getResolution();
  var tilegrid = source.getTileGrid();
  var tileResolutions = tilegrid.getResolutions();
  var zoomIdx, diff = Infinity;

  for (var i = 0; i < tileResolutions.length; i++) {
      var tileResolution = tileResolutions[i];
      var diffP = Math.abs(resolution-tileResolution);
      if (diffP < diff) {
          diff = diffP;
          zoomIdx = i;
      }
      if (tileResolution < resolution) {
        break;
      }
  }
  var tileSize = tilegrid.getTileSize(zoomIdx);
  var tileOrigin = tilegrid.getOrigin(zoomIdx);

  var fx = (evt.coordinate[0] - tileOrigin[0]) / (resolution * tileSize[0]);
  var fy = (tileOrigin[1] - evt.coordinate[1]) / (resolution * tileSize[1]);
  var tileCol = Math.floor(fx);
  var tileRow = Math.floor(fy);
  var tileI = Math.floor((fx - tileCol) * tileSize[0]);
  var tileJ = Math.floor((fy - tileRow) * tileSize[1]);
  var matrixIds = tilegrid.getMatrixIds()[zoomIdx];
  var matrixSet = source.getMatrixSet();

  var url = baseUrl+'?'
  for (var param in params) {
    if (param.toUpperCase() == 'TILEMATRIX') {
      url = url + 'TILEMATRIX='+matrixIds+'&';
    } else {
      url = url + param + '=' + params[param] + '&';
    }
  }

  url = url
    + 'SERVICE=WMTS&REQUEST=GetFeatureInfo'
    + '&INFOFORMAT=' +  infoFormat
    + '&TileCol=' +  tileCol
    + '&TileRow=' +  tileRow
    + '&I=' +  tileI
    + '&J=' +  tileJ;

  if (url) {
    document.getElementById('info').innerHTML = 'Loading... please wait...';
    var xmlhttp = new XMLHttpRequest();    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == XMLHttpRequest.DONE ) {
           if (xmlhttp.status == 200) {
               document.getElementById('info').innerHTML = xmlhttp.responseText;
           }
           else {
              document.getElementById('info').innerHTML = '';
           }
        }
    }
  xmlhttp.open('GET', url, true);
  xmlhttp.send();
  }
});
}
</script>
</head>
<body onload="init()">
<div id="params"></div>
<div id="map"></div>
<div id="info"></div>
</body>
</html>

 

 adminGoeserver-geowebcache=secured

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值