geoServer 入门到实战(安装,发布服务,wfs空间查询)

431 阅读5分钟

安装geoserver

安装环境:Windows 10 21H1,系统5位数版本为:19043.1052

1 安装JDK

  1. 首先需要安装Java运行时环境(JRE)。GeoServer需要Java 8或Java 11环境,由AdoptOpenJDK Windows安装程序提供,下载地址:adoptopenjdk.net/,我这里选择了8版本,点击下方按钮即可下载。

    这里是GeoServer官网推荐的安装包,也可以到Oracle官网下载JDK。

    在这里插入图片描述

  2. 安装则按默认设置即可,我们可以自定义安装位置(默认位置为C:\Program Files\Eclipse Foundation\jdk-8.0.302.8-hotspot\),我这里设置为了C:\Java\jdk-8.0.302.8-hotspot\。安装好之后会自动添加Path环境变量,无需手动设置,我们在命令行输入java-version命令即可验证。
    在这里插入图片描述

2 安装GeoServer

  1. 下载GeoServer安装包,地址:geoserver.org/download/,这里我们选择稳定版,点击【Production】选项卡,然后点击版本号即可跳转到该版本的下载页面。
    在这里插入图片描述
  2. 点击【Platform Independent Binary】选项下载独立的二进制安装包即可。
    在这里插入图片描述
  3. 下载完成后解压即可使用,解压位置例如:C:\geoserver-2.19.2

3 设置环境变量

  1. 设置JAVA_HOME环境变量:C:\Java\jdk-8.0.302.8-hotspot,这是安装JDK或JRE的位置,而Path变量在安装AdoptOpenJDK时会被自动添加,也可以将Path变量修改为%JAVA_HOME%\bin
  2. 设置GEOSERVER_HOME环境变量:我这里为C:\geoserver-2.19.2,这是安装GeoServer的位置;
  3. 设置GEOSERVER_DATA_DIR环境变量,默认为:%GEOSERVER_HOME%\data_dir,这是GeoServer数据目录的位置。

4 运行GeoServer

  1. 打开GeoServer的bin目录,双击运行startup.bat文件即可,将出现一个命令行窗口并持久存在。此窗口包含诊断和故障排除信息。此窗口必须保持打开状态,否则GeoServer将关闭。
  2. 打开浏览器输入默认访问地址:http://localhost:8080/geoserver,即可打开GeoServer Web管理界面。如下如所示:若打开欢迎页面则表示GeoServer已被成功运行。
    在这里插入图片描述

5 停止运行GeoServer

关闭命令行窗口或运行bin目录下shutdown.bat文件即可。

6 GeoServer的卸载

将GeoServer停止运行后删除其安装目录即可。

7 GeoServer的登录

  1. 在打开访问地址:http://localhost:8080/geoserver在页面顶部右侧输入:User name: adminPassword: geoserver,点击【登录】按钮即可。

  2. 登录后,欢迎屏幕将更改为显示可用的管理功能。这些主要显示在页面左侧的菜单中。例如点击【Layer Preview】选项。
    在这里插入图片描述

  3. 如下图,单击给定图层的【OpenLayers】选项进行预览,也可以在右上方搜索框搜索图层。在这里插入图片描述

  4. 单击列标题可以对图层进行排序
    在这里插入图片描述

发布shp服务

第一步:创建工作区

第二步:编辑工作区 输入工作区名称  输入一个URI地址点击提交

image.png

工作区是由一个名字和一个名称空间URI(统一资源标识符)定义。工作区的名称仅限于10个字符,不能包含空格。URI是类似于URL,除了的URI不必指向Web上的实际位置,并且只需要一个唯一的标识符。对于工作空间的URI,建议使用与项目相关联的URL。例如,www.openplans.org/topp是URI为“T…

第三步:创建store,发布shp数据文件夹

shp文件最好放到这里:

image.png

到这里一张地图就发布成功了,

地图是否发布成功了:

发布其他发shp文件作为服务

最后一点我们发布的是多个shp 刚才只是发布了一张剩下的需要接着发

最后一步:预览下

点击openLayers : 看到地图正常显示 表示成功.如果不能正常显示那就去改SRS就OK 了

image.png

WFS--空间查询

 WFS,即 Web 要素服务,支持对地理要素的插入,更新,删除,检索和发现服务。不同于 WMS(Web 地图服务)的是,该服务专注于要素的地理信息,而忽略其渲染信息,简化了返回信息。

       一个图层的 WFS 服务查看方法是在 Layer Preview 页面,选择 WFS 下的 GeoJSON(以 JSON 数据形式展现要素信息,方便解析),查看该图层的要素信息。

       

      解析的参数为:

http://localhost:28080/geoserver/topp/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=topp:states&maxFeatures=50&outputFormat=application%2Fjson

       其中各个参数意义可以参照此篇文章:www.cnblogs.com/naaoveGIS/p…

       这个请求,查询的是此图层的全量数据(返回要素数量受 maxFeatures 参数限制),我们可以添加过滤条件,得到我们想要的数据(非常强大的功能,可以实现非常多的地理查询操作),下面我就以几个空间查询的例子来举例说明一下。

1、划分区域,查询区域内的点

请求方式:

http://localhost:28080/geoserver/sf/ows?service=WFS&version=1.0.0
&request=GetFeature
&typeName=sf:bugsites
&maxFeatures=50
&outputFormat=application%2Fjson
&filter=  
<Filter xmlns="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">  
    <Intersects>
	<PropertyName>the_geom</PropertyName>
	<gml:Polygon>  
        <gml:outerBoundaryIs> 
	<gml:LinearRing>   
          <gml:coordinates>604264,4919992 604340,4913350 611059,4915487 604264,4919992</gml:coordinates> 
    </gml:LinearRing> 
        </gml:outerBoundaryIs> 
 </gml:Polygon>		
    </Intersects>
</Filter>

          空间关系

          

        参数说明

        A:此次采取的几何方式是 Intersects,即采用面与点相交,得到这个面里面的点数据

        B:多边形经纬度为一个数组,第一个点经纬度要与最后一个点一致,保证多边形的闭合

       C:过滤条件里有一个 PropertyName 属性,为必须字段,根据图层的属性来查看,具体查看方式为点击图层,然后点及要查询的图层名称,要素类型的第一个属性,即为该字段的值,过程如下图所示

       

         

         查询结果

         

2、  传入点坐标,查询该点所在的区域信息 

请求方式

http://localhost:28080/geoserver/topp/ows?service=WFS&version=1.0.0
&request=GetFeature&typeName=topp:tasmania_water_bodies&maxFeatures=50
&outputFormat=application%2Fjson
&filter=<Filter xmlns="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">  
    <Intersects>
	<PropertyName>the_geom</PropertyName>
	<gml:Point>   
          <gml:coordinates>146.200,-42.700</gml:coordinates> 
    </gml:Point> 	
    </Intersects>
</Filter>

         空间关系

      查询说明:

      A:此次采取的几何方式是 Intersects,即采用点与面相交,得到包含这个点的面数据

      查询结果:

     

3、  查看被线穿过的区域

请求方式:

http://localhost:28080/geoserver/topp/ows?service=WFS&version=1.0.0
&request=GetFeature&typeName=topp:tasmania_water_bodies&maxFeatures=50
&outputFormat=application%2Fjson
&filter=
    <Filter xmlns="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">  
        <Crosses>  
            <PropertyName>the_geom</PropertyName>  
            <gml:LineString>  
        <gml:coordinates>146.62903,-41.85171 147.27448,-42.18130</gml:coordinates>  
            </gml:LineString>  
        </Crosses>  
</Filter>

         空间关系

                 

         查询结果

           

注意

  1. 在使用geoserver的时候,传入的多个坐标是通过空格来进行分割的哦!!! 示例:
function test(coordinates) {
                let coordinatesText = coordinates.join(' ')
                let filter = `<Filter xmlns="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">
                <Intersects>
	                <PropertyName>the_geom</PropertyName>
	                <gml:Polygon>
                        <gml:outerBoundaryIs>
	                        <gml:LinearRing>
                                <gml:coordinates>${coordinatesText}</gml:coordinates>
                            </gml:LinearRing>
                        </gml:outerBoundaryIs>
                    </gml:Polygon>
                </Intersects>
            </Filter>`

                const geoServerPath = 'http://192.168.5.44:9000/geoserver/ChongQing/ows'
                // 发送请求获取geojson
                axios.get(geoServerPath, {
                    params: {
                        service: 'WFS',
                        version: '1.0.0',
                        request: 'GetFeature',
                        typeName: 'ChongQing:Shopping',
                        maxFeatures: '200',
                        outputFormat: 'application/json',
                        filter
                    }
                })
            }