3.4. Web要素服务

尽管结果看起来完全不同,但向WFS发送请求的工作方式与WMS输出选项几乎相同,只是URL格式不同。 这里有几个大的区别;请注意,格式参数名更改为 outputFormat

_images/wfs_xf8.png

图 3.6 输出格式

http://localhost:8080/geoserver/topp/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=topp:states&maxFeatures=50&outputFormat=csv

3.4.1. CSV

这是最常见的数据交换形式,逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。 纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。 但除非您计划导入电子表格(即Microsoft Excel)或导入其他图层输出格式不适用的外部数据库, 否则不太可能使用。

输出格式由 csv 作为 输出格式 参数值。

3.4.2. GML

地理标记语言(Geographic Markup Language)模型是基于OpenGIS的抽象规范。 在抽象规范中,定义一个地学/地理特征作为现实世界现象的一个抽象。 这样现实世界便可以通过一系列地学/地理特征来描述。地学/地理特征中包括几何属性。 OpenGIS的抽象规范对地学/地理特征模型和几何模型进行了定义。 地理空间互联网络作为全球信息基础架构的一部分,已成为Internet上技术追踪的热点。 许多公司和相关研究机构通过Web将众多的地理信息源集成在一起,向用户提供各种层次的应用服务,同时支持本地数据的开发和管理。 GML可以在地理空间Web领域完成了同样的任务。GML技术的出现是地理空间数据管理方法的一次飞跃。

这种格式似乎被谷歌更流行的KML格式所掩盖。 KML 格式有点基于GML;GML输出文件可以转换为KML,但总是相反。这两种格式都是基于XML的。 最明显的原因是GML处理基本的矢量图形,而KML则支持3D图形。

GML的内容

GML 2.1.1版以XML技术为基础,并使用 XML Schema文件定义技术, 目前GML以 Feature Schema、Geometry Schema、XLinks Schema等三个基本的schema来定义它的内容

  1. Feature Schema(feature.xsd)

Feature Schema定义feature的内容及结构。图1是以UML来描述Feature schema的内容及结构,从图中可以看到几何图形的属性(geometric property)被当作一个关联类别(association class),来将一个feature与一个几何图形(geometry)连结,例如PointProperty用来连结一个点(point)的几何图 形。

详细的 Feature Schema 内容请参考GML2.1.1规格书(http://opengis.net/gml/02-009/GML2-11.html)。

  1. Geometry Schema(geometry.xsd)

Geometry Schema 有关几何图形元素的类型的定义,包括点(point)、线(line)、多边形(polygon)等简单几何图形, 及复合类型 (complex type)的几何图形。 Feature Schema使用元素来将几何图形结构Geometry schema带进来,使得在定义feature type时可以引用:

GML 定义了几个基本的几何图形属性(Geometric property),用来将feature与几何图形连结。

  1. XLinks Schema(xlink.xsd)

提供XLink属性来作为数据链结使用。Geometry schema使用元素来引用XLink。 详细的XLinks schema内容请参考GML 2.1.1规格书。

Feature schema、Geometry schema及XLink schema三个基本schema之间的关系

输出格式由 GML2GML/3.1.1GML/3.2 作为 输出格式 参数值。

3.4.3. GML2(compressed GZIP)

这与GML-plain相同,只是顾名思义,它是压缩的。 这种格式可能比普通的GML输出更受欢迎, 因为在GML输出中带宽是一个问题,而且数据集很大。

输出格式由 GML-GZIP 作为 输出格式 参数值。

维基百科对GML及其使用有着很好的整体历史 ( http://en.wikipedia.org/wiki/Geography_Markup_Language

3.4.4. JSON

这种格式是GeoServer 非常理想的输出。 JSON 只是一个JSON格式的字符串,(JavaScript Object Notation, JS 对象简谱)是一种轻量级的数据交换格式。 它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。 带有地理空间数据的附加键。 例如,jQuery有一个名为 getJSON 获取(本地或远程文件)解析JSON字符串。 我们现在来看一下。输出格式由 json 作为 format 参数值。

解析 GeoJSON

您可能希望查询GeoServer 并分析jQuery中的功能。 我们正在解析一个JSON字符串。

1.转到“图层预览”屏幕,然后单击 在topp:states层的“所有格式”下拉菜单中。

2.选择 JSON 选项或直接使用以下URL获取输出。 注意,为了限制结果,我们使用 FEATUREID 参数。我们将在另一章中讨论过滤器。

http://localhost:8080/geoserver/topp/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=topp:states&featureid=states.1,states.2,states.3&maxFeatures=50&outputFormat=json

3.将此输出保存在名为 states.json .

4.用jQuery解析。以下是本章中包含的代码示例片段:

<script>
$.getJSON('states.json', function(data) {
$.each(data.features, function(key, val) {
$('body').append('properties.STATE_NAME ' + val.properties.STATE_NAME + 'geometry.coordinates ' + val.
geometry.coordinate);});});
});
</script>

3.4.5. GeoJSON

GeoJSON 是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法的地理空间信息数据交换格式。 GeoJSON 对象可以表示几何、特征或者特征集合。 GeoJSON 支持下面几何类型:点、线、面、多点、多线、多面和几何集合。 GeoJSON 里的特征包含一个几何对象和其他属性,特征集合表示一系列特征。

GeoJSON 总是由一个单独的对象组成。这个对象(指的是下面的 GeoJSON 对象)表示几何、特征或者特征集合。

  • GeoJSON 对象可能有任何数目成员(名/值对)。

  • GeoJSON 对象必须有一个名字为“type”的成员。这个成员的值是由 GeoJSON 对象的类型所确定的字符串。

  • type成员的值必须是下面之一:“Point”, “MultiPoint”, “LineString”, “MultiLineString”, “Polygon”, “MultiPolygon”, “GeometryCollection”, “Feature”, 或者 “FeatureCollection”。

  • GeoJSON 对象可能有一个可选的“crs”成员,它的值必须是一个坐标参考系统的对象。

  • GeoJSON 对象可能有一个“bbox”成员,它的值必须是边界框数组。

3.4.6. shapefile

这似乎是GIS数据交换中最常见的输出格式,是美国环境系统研究所公司(ESRI)开发的一种空间数据开放格式。 Shapefile文件用于描述几何体对象:点,折线与多边形。 但对于构建基于 WEB 的地图来说,这并不是很有用。 如果需要与其他人交换大型静态数据集,那么这可能是一个不错的选择。 输出文件是包含层详细信息的ZIP文件。 例如,考虑这个解压文件 topp:states 层。

image89

图 3.7 image89

输出格式由 SHAPE-ZIP 作为 format 参数值。

http://localhost:8080/geoserver/topp/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=topp:states&maxFeatures=50&outputFormat=SHAPE-ZIP