Openlayers+Geoserver使用纪要
Openlayers+Geoserver使用纪要
1 Geoserver图层发布流程
安装后Geoserver后,发布图层基本上是如下的一个流程:
1、使用管理员账户登陆。一般用户名和密码是admin/geoserver;
2、建立一个“新的工作空间”。此时可以指定改工作空间的名称及命名空间的Uri,如果原意使用默认的工作空间,就不用建立了~~
3、添加一个数据集合。Geoserver支持的数据源有很多种,如shapefile、postgis等等,在这里,笔者使用的是shapefile~~
4、选择后,可以指定该数据集合的工作空间、数据源名称、描述、shapefile的位置、字符集等等。
5、添加一个图层。在刚才添加完数据集合后,即可看到一个发布新图层的页面
6、同样也可以通过:所有图层->添加一个新的资源->选择Test:Test的方式打开发布图层的界面
7、点击发布,可以设定相关的信息,如名称、标题等,可以根据项目的实际需要进行设定。
2 参数设定
WfsUrl:Wfs服务的地址,如http://localhost:8080/geoserver/wfs
WfsNamespace:Wfs服务的命名空间,即上文的Test
WfsLayerName:Wfs服务的图层名称,即上文图中的states
FeatureIdKey:Wfs服务图层中字段的名称,如上文图中的STATE_NAME
SrsName:wfs图层数据的实际投影坐标系,即地图显示时设置的投影坐标系,如EPSG:2436
2.1 查询
2.1.1 范围查询
假定我们指定的查询范围为bbox,根据上述参数设定,进行范围查询的Url为:“WfsUrl?REQUEST=GetFeature&typeName= WfsNamespace : WfsLayerName &bbox=bbox&outputFormat=json”。bbox是怎么来的呢?bbox实际上描绘的是一个矩形,假定矩形左下角的点是Max(x1,y1),右上角的点是Min(x2,y2),则bbox是形如“x1,y1,x2,y2”的一个字符串。
2.1.2 属性查询
假定我们的查询条件是STATE_NAME为“北京”,则根据上述参数设定,此查询的url为:WfsUrl,同时需要将如下形式的参数信息,提交到服务器。如以post的方式,将参数信息写入HttpWebRequest的RequestStream中。
1 <w:GetFeature service="WFS" version="1.1.0" 2 xmlns:w="http://www.opengis.net/wfs" 3 xmlns:f=" WfsNamespace" 4 xmlns:g="http://www.opengis.net/gml" 5 xmlns:o="http://www.opengis.net/ogc" 6 x:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd WfsUrl/DescribeFeatureType?version=1.1.0&typename= WfsNamespace:WfsLayerName" 7 xmlns:x="http://www.w3.org/2001/XMLSchema-instance"> 8 <w:Query typeName="f: WfsLayerName "> 9 <o:Filter> 10 <o:PropertyIsEqualTo> 11 <o:PropertyName>f: FeatureIdKey </o:PropertyName> 12 <o:Literal>北京</o:Literal> 13 </o:PropertyIsEqualTo> 14 </o:Filter> 15 </w:Query> 16 </w:GetFeature>
由上文可以看出,PropertyIsEqualTo 意味着等于,其它的逻辑关系如大于、小于、不等于等等,可以参考Geoserver的官方网站的例子。
2.2 增加点
假定我们要添加的点信息如下:
1、经纬度为longitude, latitude
2、STATE_NAME为北京
则根据上述参数设定,此查询的url为:WfsUrl,同时需要将如下形式的参数信息,提交到服务器。如以post的方式,将参数信息写入HttpWebRequest的RequestStream中。
1 <w:Transaction xmlns:w="http://www.opengis.net/wfs" 2 xmlns:g="http://www.opengis.net/gml" 3 service="WFS" version="1.1.0" 4 x:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd WfsUrl/DescribeFeatureType?version=1.1.0&typename=WfsNamespace: WfsLayerName " xmlns:x="http://www.w3.org/2001/XMLSchema-instance"> 5 <w:Insert> 6 <f: WfsLayerName xmlns:f=" WfsNamespace "> 7 <f: FeatureIdKey >北京</f: FeatureIdKey > 8 <f:the_geom> 9 <g:Point srsName="SrsName"> 10 <g:coordinates decimal="." cs="," ts=" ">lonValue,latValue</g:coordinates> 11 </g:Point> 12 </f:the_geom> 13 </f: WfsLayerName > 14 </w:Insert> 15 </w:Transaction>
2.3 删除点
假定我们要删除的STATE_NAME为北京的点,则根据上述参数设定,此查询的url为:WfsUrl,同时需要将如下形式的参数信息,提交到服务器。如以post的方式,将参数信息写入HttpWebRequest的RequestStream中。
1 <w:Transaction xmlns:w="http://www.opengis.net/wfs" 2 xmlns:f="WfsNamespace" xmlns:g="http://www.opengis.net/gml" 3 service="WFS" version="1.1.0" xmlns:o="http://www.opengis.net/ogc" 4 x:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd WfsUrl /DescribeFeatureType?version=1.1.0&typename=WfsNamespace:WfsLayerName " xmlns:x="http://www.w3.org/2001/XMLSchema-instance"> 5 <w:Delete typeName="f:WfsLayerName "> 6 <o:Filter> 7 <o:PropertyIsEqualTo> 8 <o:PropertyName>f: FeatureIdKey </o:PropertyName> 9 <o:Literal>北京</o:Literal> 10 </o:PropertyIsEqualTo> 11 </o:Filter> 12 </w:Delete> 13 </w:Transaction>