WEBGIS体系和OGC标准
- WEB地图
- 以数据为核心的巨头网站
- 指路导航网站
- 地图社区和其它重视兴趣点的应用
- GML:是一个基于XML之上的地理信息描述、转换、传输的标准。
- 打开天地图网站,运行搜索服务,点击浏览器调试工具,网络,可以看到xml下面GML的数据格式。
- 也可以在GeoServer(细节:端口7878)中看到点、线、面三种数据格式,并且在GeoServer中进行了展示
3.WMS(Web Map Service)
打开GeoServer,输入:127.0.0.1:7878/geoserver/web/→右边点击“WMS 1.1.1”(版本号),下载xml格式的标准文件。
[1] GetCapabilities(获取服务能力)
<Get></Get> <Post></Post> <GetMap></GetMap>(显示各种支持的地图格式)
[2] GetMap(获得地图)
点击“Layer Preview”→选择一个“sf:restricted”→Select one,WMS,GIF→浏览图层。可以将此时的游览器地址栏复制到EditPlus中可以清晰看到获取地图的参数:
- Request=GetMap 表示操作类型为获得地图
- Layers=layerName 表示需要获得图层名字为XX的地图,图层名字可以为多个图层,多个图层的名字用逗号进行分割
- Styles=styleName 表示获得图层的样式文件,如果值为空的话,说明当前的地图图层使用的是默认地图样式
- Bbox=589434.8564686741,4914006.337837095,609527.2102150217,4928063.398014731 表示根据地图的坐标范围获得对应的地图数据
- Width=256 表示获得的地图图片的宽度
- Height=256 表示获得地图图片的高度
- Srs=EPSG:26713 表示地图的空间坐标系的srid值 (坐标系的编号)
[3] GetFeatureInfo 获取对象信息
- WFS(Web Feature Service)
WFS是一个基于Web服务技术的地理要素在线服务标准。它主要实现了地理数据的Web服务和异构系统的互操作规范。同样可以在GeoServer中看到详细信息。
[1] GetCapabilities(获取服务能力)
[2] DescribeFeatureType(要素类型特征描述)
[3] GetFeature(获取对象)
GeoServer→Demos→Demo requests→WFS getFeature-1.1.xml(要输入admin 密码);同样可以用Layer Preview→sf:roads→WFS,GML3来测试。可以将此时的游览器地址栏复制到EditPlus中可以清晰看到获取地图的参数:
- Request=GetFeature 表示操作类型为获得地图要素的属性信息
- typeName=layerName 表示获取地理要素信息的图层名称
- maxFeatures=50 表示生成地理要素信息最多的条目数
- outputFormat=text/xml 表示生成地理要素的数据存储格式,一般为text/xml,即XML格式
[4] Transaction(事务处理包括增、删、修改要素)
GeoServer→Demos→Demo requests里面选择各种事件(如Delete等)查看参数。
[5] LockFeature(锁要素)
- GeoJSON
{ "type": "FeatureCollection",
"features": [
{ "type": "Feature",
"geometry": {
"type": "Point","coordinates": [102.0, 0.5]
},
"properties": {"prop0": "value0"}
},
{ "type": "Feature",
"geometry": {
"type": "LineString",
"coordinates":
[
[102.0, 0.0], [103.0, 1.0], [104.0, 0.0],[105.0, 1.0]
]
},
"properties": {
"prop0": "value0",
"prop1": 0.0
}
},
{ "type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
[100.0, 1.0], [100.0, 0.0] ]
]
},
"properties":
{
"prop0": "value0",
"prop1": {"this": "that"}
}
}
]
}
[1] JSON 是源于javascript 对象,javascript 对象(Object)就是用大括号括起来,中间以键/值的形式表现并用逗号分割,“键”就是对象的属性,而“值”就是该属性的值。javascript 中还有个数组(Array),用中括号括起来,中间只有单个的值并用逗号分割。不管是对象还是数组,其中的值可以是任何元素(对象,数组,字符串,数字等),这就是此中结构的灵活之处。JSON 与XML 很相似,也具有层次结构,是一种轻量级的解决方案。
[2] GeoJSON 保留了JSON 的结构,但增加了一些约束条件:
ü GeoJSON 总是由一个对象组成,这个对象可以为要素集合(featurecollection),要素(feature)或者几何体( geometry)。
ü GeoJSON 对象必须包含一个type 属性,type 的值可为 “Point”, “MultiPoint”, “LineString”, “MultiLineString”, “Polygon”, “MultiPolygon”, “GeometryCollection”, “Feature”, or “FeatureCollection”。
ü Geometry对象是那些type值为 “Point”, “MultiPoint”, “LineString”, “MultiLineString”, “Polygon”, “MultiPolygon”, “GeometryCollection”的GeoJSON 对象。Geometry 对象除了GeometryCollection 外必须包含一个coordinates 属性,其中包含一个点列表。
ü Feature 对象是type 值为”Feature”的GeoJSON 对象。Feature 对象必须包含一个geometry 属性,其值为一个Geometry 对象。Feature 对象必须含有一个properties 属性,其值可为一个JSON 对象。
ü GeometryCollection 对象是type值为”GeometryCollection”的GeoJSON 对象。代表一个几何型集合,与FeatureCollection 不同的是他包含的是Geometry 对象,而不是Feature 对象。GeometryCollection 对象必须含有一个geometries 属性,其中包含一组Geometry 对象。
ü GeoJSON 对象可以有一个”bbox”属性,是”[minx,miny,maxx,maxy]“的结构,他表示了该对象的显示范围。
[3] 如上面的例子,由大括号括起来的都是GeoJSON 对象,例子中是一个FeatureCollection 对象,他包含了一组Feature 对象,还可以添加这个集合的其他属性。每个Feature 对像都包含一个Geometry 对象和一个属性(JSON 对象),Geometry 对象有所不同,类型不同,coordinates 的数据结构也不同。
ü 点,表示点只需要经度和纬度,用中括号括起来代表一个点坐标。{ "type": "Point", "coordinates": [100.0, 0.0] }
ü 线,由一系列点组成,在一组有序点外面再括一个中括号。
{ "type": "LineString", "coordinates": [ [100.0, 0.0],
[101.0, 1.0] ] }
ü 面,在线的外面再加一个中括号,面列表中的线收尾必须一致。但为什么未免还要加个呢?为了表示面中的洞,第一项表示外围的圈,第二项(如果有的话)表示内围的圈。
{ "type": "Polygon",
"coordinates": [ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
[100.0, 1.0], [100.0, 0.0] ]
]
}
ü 除了以上还有多点,多线,多面就不多讲了,可以自己去看看。
[4] GeoJSON 基本上就这些内容,跟详细的可以去这里。GeoJSON 只是为更好数据通信提供一个标准,现在已有超过20个项目支持了GeoJSON,包括客户端的和服务器端的,而且大多数语言都支持JSON。如果你喜欢这种更轻量级的解决方案,那么就加入进来吧。更多请访问:
http://www.geojson.org/geojson-spec.html#appendix-a-geometry-examples
[5] 一个OpenLayers的简单例子:
//初始化map
var featurecollection = 'geojson对象';
//获得一个geojson的模板
var geojson = new OpenLayers.Format.GeoJSON();
var layer = new OpenLayers.Layer.Vector();
//用模板来解析这个geojson对象
layer.addFeatures(geojson.read(featurecollection));
map.addLayer(layer);
- KML——Google Earth数据格,用于保存用户添加的地标等数据。kmz是kml的压缩格式。保存的kml文件类似ArcMap中的mxd文件。具体格式写法可以用EditPlus打开。