微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

geoserver+openlayer

早在二月份就接触到了geoserver,当时只是将自己转出的数据(postgre+postgis)存储。而geoserver则只是做一个大概的图形化检查工具。后来发现了c/s模式的开源软件qgis,就暂时把geoserver放在了一边。
这两天不停的折腾geoserver。当时只是成功的改写了sld,现在还没有找到当时写的文档,有空补起来。
今天想做的一个功能就是将几个layer叠加显示
首 先就是将geoserver生成的地图载入就出现了问题,不知道如何将wms载入进openlayer的layer对象,openlayer的说明文档又 实在是少的可怜。就看着那个api在哪里傻傻发呆。由于自己的机器只能上少数网站,在openlayer网站上下载的例子又基本不能看。所以很是郁闷。
后来查了很多资料,发现每个人说的都只是自己做对的部分,并没有什么解释。尤其是生成layer对象,解释实在是太少了。
没有办法,只有把geoserver的例图打开,然后在那个wms页面上,点击查看源代码,这样才知道如何生成一个从geoserver出来的wms
  1. tiled=newOpenLayers.Layer.WMS(
  2. "topp:road-Tiled","http://gttest:8080/geoserver/wms",
  3. {
  4. srs:'epsg:4312',
  5. width:'800',
  6. styles:'',
  7. height:'418',
  8. layers:'topp:road',
  9. format:'image/png',
  10. tiled:'true',
  11. tilesOrigin:"108.14681672590744,28.957956039271213"
  12. },
  13. {buffer:10000}
  14. );
这里面, "topp:road-Tiled"只是这个wms图层的名称而已, "http://gttest:8080/geoserver/wms"对应的是wms的服务器
layers: 'topp:road' ,这个才是要加载的图层。topp是图层所在的命名空间。其他参数还是比较容易明白。但tiled不知道是什么意思,在openlayer参数里面,有tiled和untiled两种layer。具体的意思不是太明白。
但是在map.addLayer时候,好像tiled的加不进去。tiled图层只能addLayers,以数组形式传入。
map.addLayer(untiled);
然后就是加入openlayer的控件。
  1. map.addControl(newOpenLayers.Control.PanZoomBar());
  2. map.addControl(newOpenLayers.Control.Navigation());
  3. map.addControl(newOpenLayers.Control.Scale($('scale')));
  4. map.addControl(newOpenLayers.Control.MousePosition({element:$('location')}));
  5. map.addControl(newOpenLayers.Control.LayerSwitcher());
  6. map.addControl(newOpenLayers.Control.NavToolbar());
  7. map.addControl(newOpenLayers.Control.OverviewMap());
  8. map.zoomToExtent(bounds);
最后一句就是缩放到一个范围。以前做的gis项目都是c/s模式,不管是c#+arcgis还是现在的c+++postgresql+postgis+qgis,没有涉及到网络。今天浏览生成的wms,也还是很慢。应该是服务器配置问题。在webgis这方面自己还很空白,需要多花时间学习。只是现在项目和这无关。只有先快点把其他的话干完,有空过来学习学习。

原文地址:https://www.jb51.cc/postgresql/197353.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐