最近要搞个展示平台,正好整理一下geoserver的教程,方便大家学习。
geoserver介绍
geoserver确实是简单好用,不仅支持矢量和栅格的wfs和wms服务发布,还可以设置自己的配色方案。具体的还是看百度吧,比我说的清楚专业,哈哈哈。链接: geoserver百度百科。咱们直接切入正题。
java安装
- 因为geoserver是java编出来的所以要有java的开发环境或者运行环境,这里我们就下载jdk就可以了。下载网址 Java,我这里下载的是8,点击JDK下载就可以了。因为别的程序的原因我就只能用8,你们可以尝试以下最新的。
2. 默认一路安装下来,然后开始环境配置,计算机->属性->高级系统设置->环境变量->系统变量->新建三个变量
- 变量名输入:JAVA_HOME
变量内容输入:E:Program FilesJavajdk-12.0.2(根据JAVA的安装路径来确定,实际上是使用JAVA安装路径下JDK的目录) - 变量名输入:Path (这个变量可能已经存在,存在的话就加个;往后添加) 变量内容输入:%JAVA_HOME%bin
- 变量名输入:classpath 变量内容输入:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar (注意最前面的点 . 不要漏掉。)
测试以下,打开cmd,输入java - version,就可以了。我这里安装是JRE。其实安装哪一个都不影响geoserver的使用。
geoserver下载
- 打开geoserver官网链接: geoserver官网,选择稳定版最新的即可。既然有稳定最新的,当然用最新的啦。如下图所示。
2. 点击这里,下载安装包,这个应该是与平台无关的,主要是我还没在linux上尝试,所以这里暂时还不确定。
3. 下载后,恭喜你获得geoserver-2.17.1-bin.zip文件,解压缩,获得如下文件。
geoserver服务启动和停止
- 进入bin文件夹下,双击打开startup.bat就可以启动服务了,双击shutdown.bat就可以停止服务了。
2. 当你双击startup之后,弹出命令行,经过等待后得到这张图的时候,恭喜你,服务启动了。
3. 打开浏览器,输入默认网址http://localhost:8080/geoserver/就可以登陆了,初始的用户名是admin,密码是geoserver。
4. 登陆后点击左侧的layer preview,看到多个发布的图层,随便选择一个,点击openlayers展示。就可以看到展示的图层了。恭喜恭喜,你已经可以开启你的地图发布之旅了。p.s.我点击的是us population那个。
关于跨域问题解决
- 找到程序相对路径下 webappsgeoserverWEB-INF中的web.xml,搜索“cross-origin”,找到两个标签,全部去掉注释。
2. 修改成这样保存。
3. 接下来很多教程会交给你让你复制匹配的版本的jar包,我是没找到在哪看geoserver的版本和jar包版本对应的信息,如果有知道的小伙伴,麻烦留言告诉我,感激不尽。那我怎么来找到这些jar包呢?找到程序相对路径下的lib文件夹,打开进去,意不意外,惊不惊喜,全都在里面!把划红线的三个拷贝到webappsgeoserverWEB-INFlib下面就可以了。重新启动,跨域问题安排了~
X-Frame-Options跨域设置
X-Frame跨域用来设置GeoServer站点页面是否允许被其他网页使用iframe方式引用 X-Frame-Options三个参数:
1、DENY 表示该页面不允许在frame中展示,即便是在相同域名的页面中嵌套也不允许。
2、SAMEORIGIN 表示该页面可以在相同域名页面的frame中展示。如果没有设置的话,默认是这个。所以在本机上展示没有问题,用别的机子调用就会报错。
3、ALLOW-FROM uri 表示该页面可以在指定来源的frame中展示
4、ALLOW-ALL 可在所有来源的frame中展示,但是我最新查的没有这个选项了。使用第三个吧。
解决方案同样是打开web.xml,将这段代码复制进去即可。
<context-param>
<param-name>geoserver.xframe.shouldSetPolicy</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>geoserver.xframe.policy</param-name>
<param-value>ALLOW-FROM</param-value>
</context-param>
就行这样,找个contex-param标签附近,拷贝进去,保存,重启服务即可。
如果请求出现如下错误,这是因为ALLOW-FROM[uri]后面参数没设置,不影响使用
Invalid 'X-Frame-Options' header encountered when loading '。。。。。
326&format=application/openlayers': 'ALLOW-FROM' is not a recognized directive. The header will be ignored.