本篇不讨论矢量栅格数据的结构,也不讨论矢量与栅格的区别(即设定读者有这方面的基础)。html
版权声明:原创。博客园/B站/小专栏/知乎/CSDN @秋意正寒前端
转载请标注原地址并声明转载: http://www.javashuo.com/article/p-trhfcgfu-by.htmlnode
本文系概念性很强的博客,但对GIS项目有帮助,对在读的学生也有必定帮助。web
尽管从物理的角度,只有独立数据文件(shp、geojson、tif等)或者数据库(esri geodatabase的gdb、geopackage等)这两种数据库
可是,从学科角度,即从GIS的视角看,地理数据并无那么简单。json
为解释简便,使用shapefile、geojson、tif栅格和gdb、postgis,辅助ArcMap/QGIS 3.10作解说。数组
地理数据=空间数据+非空间数据;也叫地理信息。例如:一座医院;一所学校;一条道路;一条河流缓存
即几何数据,描述坐标、形状的数据;也叫空间信息。例如:形状、坐标tomcat
即属性数据,描述与空间位置无关的一类数据。例如:成绩单、医院名称列表服务器
这类数据的特色是,若是脱离了地理位置也有它自己本身的含义。
[暂空,过年前写完]
不妨这样想:每一层均为子一层的容器。大鱼吃小鱼,小鱼吃虾米。
这是矢量数据的最底层,有两个类别:几何层或者属性层。
前阵子写了一系列坐标系有关的博客,咱们假定在某个坐标系下,存在某个点P(x0,y0),这个点在这个肯定的坐标系下,就是独一无二的。
那么,若是这个点表明的是一个咖啡店,仅仅知道这个点的坐标(x0,y0)是不够的。
不一样的用户关心不一样的信息,有人关心这个店的电话号码,有的人关心它所在的城市和行政区,有的人关心它的地址,有的人关心它的人均消费。
这个时候,信息就能够分化成两个种属:几何的,属性的。
上大学的时候,系主任说:地理数据区别于其余行业的数据,最大的区别是它具备空间数据!
咱们刚明确了几何数据是什么,属性数据是什么,那么多出来的一系列名词又是什么?
作如下规定:
这样就不乱了。
如今讲概念其实很枯燥,那么一个具体的矢量数据文件,好比geojson或者shp,如何判断哪些是几何数据,哪些是属性数据呢?
咱们取一个geojson文件,只有一个点,没有属性数据。它在QGIS里长得像这样:
它数据长这样:
是WGS84下的一个点,在广州城区。
咱们能够很快聚焦到"geometry"这个键上,它下列有两个子键"type"和"coordinate",这两个子键的值就是这个geojson矢量数据的几何信息。
读者能够想象获得,若是type是“Polyline”,那么coordinate将是一堆折线段的集合,type的值还有其余几个,点线面都有。
可是,geometry的值的的确确就是上面说起的“表征位置信息的坐标数据”。
我编辑了一下这个geojson,使其拥有三个属性数据:所在城市是"Guangzhou",编辑者是"秋意正寒",邮政编码是"510000".
属性表长这样:
文本变成了这样:
咱们不难看到,和geometry键并列的多了一个键:"properties"。
它翻译过来就是属性的意思,别的数据可能叫“attributes”等。
这就很清晰明了的看到了在geojson中,“几何层”、“属性层”是如何组织的了。
shp文件至少要有3个文件构成,*.shp、*.shx、*.dbf
由于这些是二进制文件,不能用文本格式查看,因此直接给出结论:
*.shp文件记录的是几何数据
*.dbf文件记录的是属性数据
*.shx连接两者是索引数据
咱们将2.1.1中的geojson文件在QGIS中导出shp并在ArcMap里打开其属性表:
发现多了两列属性,其中Shape属性不管给这个shp文件加多少个点,它的值写在属性表里的都是一个汉字“点”。
并且,FID和Shape属性是没法在属性表里编辑的。
实际上,这个Shape属性列,就是几何数据,ArcMap把它“写”在了属性表而已。咱们编辑它仍是得靠编辑工具。
ArcMap的属性表经过“显示”Shape列,告诉用户几何数据和旁边city、editor、adcode三列是并排的,也即“几何数据”、“属性数据”是同级别的数据,只不过几何数据可能很复杂,在属性表上一个格子写不完就干脆展现这个几何信息的类别“点”罢了。
要素层很简单。
先下定义:一个要素表示一个地理实体,一个要素有其本身的几何数据和属性数据。
咱们依旧是上面的点json来说解。
不难看到,properties和geometry键都是"features"这个数组键的某个元素下的子键。
这意味着,一个{"type": “Feature”, ...}就是一个"feature",即一个要素。
因为有了几何和属性的分割,一个要素固然能够有n个属性,一个要素的几何也能够是n个点/线/面构成的复杂几何图形。
n个属性好理解,n个点/线/面构成的复杂几何图形又是什么意思呢?
这里再也不展开描述,有兴趣的朋友能够去参考ogc的Geometry标准,它规定了几何体的复杂构成。之后有机会必定会写一篇ogc标准下的geometry标准。
咱们注意到了,"features"下的每一个要素的properties的子键都是同样的(名称、类型)。
仍是以上文的geojson为例。
咱们说,n个具备共同类型和数量属性的"feature"(即每个feature的"properties"的子键名称一致,类型一致),加上一些元数据(坐标系信息,四至等,每种数据格式不太同样),构成一个矢量数据。
这个矢量数据已经上升到磁盘文件级别了,咱们为了复用,不可能一个一个要素分别存在独立的文件里的,由于属性的数量、类型一致,因此要素能够存在一个文件(或者容器)里。
咱们把这个容器所在的级别,叫作“数据层”。
我为何不说一个矢量数据文件就是一个“数据层”的实现呢?
由于,一个矢量数据当然能够是一个geojson文件,一个shp文件(由多个同名子文件组成),一个gml文件,一个csv文件...固然一个矢量数据也能够是数据库里的一个表,或者一个要素类(ArcGIS里的gdb)。
咱们讨论的是“分层”,而不是物理文件构成。
一般来讲,咱们传递的大多数都是数据层。好比,咱们传递一个“中国省级行政区划”的shp文件,或者传递一个“广州市医疗机构点位”的geojson文件。
咱们不多传递一个“要素”,传递一个“几何面”——代码层面除外。
咱们把一个矢量数据(geojson/shp/数据库里某张地理数据表等)拖到任何一个GIS客户端软件中,必定能看到它的样子,软件会给咱们画出来,它这个时候,叫作“图层”。
由于数据和图层分担着各自不一样的任务,图层负责渲染、显示数据,数据被图层引用。
这就比如,帐本专心管理财务流水,报表ppt专心负责回报财务流水的各类趋势比例。
咱们GIS软件依靠图层将数据符号化,好比给某个点数据设定了符号是一个尺寸是15的红色五角星,给某个线数据设定了标注是它的“name”字段,经过图层查看一个数据的元数据等...
什么是地图层?
咱们有了数据层,就能够进行地理数据的分析、展现、交互了。
咱们为了组织起地理数据,须要将数据排列顺序,符号化,设计出一张地图。
地图这一层包括了n个数据(也即n个图层,每一个图层引用一份数据)。
固然,咱们还能够为数据作分组。
咱们知道ArcMap中,有个“数据框”的概念,其实一个数据框就是一个地图,数据框就是地图层这一级别的容器。
你们可能看中国地图会观察到右下方一般会有一个“南海诸岛图”,其实中国大陆主体地区和右下方的“南海诸岛图”用两个数据框就能够表示了。
事实上,QGIS也有同样的概念,在布局窗口中,咱们能够插入一个地图:
一样能作到“南海诸岛图”和大陆图在同一个布局里显示的效果。这里插入的“地图”就是“地图层”的一个活生生的案例。
GIS客户端软件会使用“工程文件”的手段,把n个“地图”包裹在一块儿。
[暂空,过年前写完]
[暂空,过年前写完]
[暂空,过年前写完]
地图层与矢量数据的地图层一致,都为n个栅格数据按必定顺序、符号化构成。
GIS服务,与普通网络服务是同样的。
咱们常见的Web服务器软件,有IIS、Apache、Nginx、tomcat等,也能够用Java/nodejs等工具语言编写本身的服务器后台软件。
GIS服务器软件基于HTTP等协议(作webgis的,若是连http协议都不知道,建议先补补课),也有一些受欢迎的:开源的GeoServer、MapServer,商用的Esri的ArcGIS Enterprise套件等。
GIS服务器能够是独立的软件,也能够是某个Web服务器的一个插件。例如,ArcGIS Enterprise套件就是自成一家,GeoServer就是Tomcat的一个war包插件。
Q:GIS数据必定要放在GIS服务器上吗?
A:不必定。诸如geojson这样的文本类型数据,能够直接放到普通web服务器上,经过http的get或post请求交换数据;诸如gltf这种3dtiles规范的三维数据,开源服务器还没有支持三维服务,OGC组织也没有3DGIS服务规范,只好放在普通web服务器上。可是,成熟的二维数据,作成GIS数据服务是有利于前端开发者进行调用、渲染、数据查询、云处理的。
扯了半天,那什么是GIS服务呢?
一般来讲,咱们说的GIS服务就是GIS数据服务。可是,其实GIS服务还能够提供计算服务,也即GIS处理服务,做为4.3的内容讲解。
WMS,Web Map Service,网络地图服务。
一个WMS是一个“地图层”的实现,只不过限制了网络请求的功能。
它容许将n个数据发布成一个“GIS服务”,1个数据被叫作1个图层,由于要对web提供访问,因此用图层这种带符号化的形式来描述“数据层”比较合适。
它提供了如下几大功能,有兴趣的朋友能够参考博客园李晓辉的博客,或者直接查阅OGC官方文档(列在参考文档中了):
[暂空,过年前写完]
WFS,Web Features Service,网络要素服务。
WFS强化了WMS中关于矢量数据的访问,提供了增长、修改、删除、查询矢量要素的功能。
WMS对矢量数据的查询,局限在了“识别”这一功能上。
咱们从功能上就能看出,WMS有一个功能是“getFeaturesInfo”,而WFS直接给出了"getFeature"、“”等功能。
WFS的主要功能以下:
[暂空,过年前写完]
笔者对WCS了解很少,以粗鄙的文笔写写和WMS、WFS的区别。
[暂空,过年前写完]
WMS能给前端返回一张位图,和咱们在GIS软件里对一个地图直接截个图(不通过制图)相似。
若是这张位图体积过大或者网络传输很差,那么极有可能前端是拿不到的,就渲染不出来。
分治思想刺激WMS演进,即WMTS,原理很简单,即把这张位图实现按网格切好,在不一样的分辨率下,把这些切好的图(都缓存在地理服务器上)按前端指定的范围,挨个传递。
这样,一张小图可能体积并不大,保证了前端的体验。
迄今为止并未有三维地理数据服务标准,只有三大地理三维数据格式标准:
其中,前两个被ogc认可,且主推i3s。
i3s由Esri(就arcgis家)主推,以slpk文件为交互文件,在自家的ArcGIS Enterprise服务器生态中,已经研发出“SceneService”这种场景服务了。
3dtiles由开源项目Cesium主推,目前只有数据文件,即gltf文件,号称是三维数据界的jpg,目前开源的商业的gis服务器还没有支持三维服务,cesium本身是直接前端调用gltf文件建立视图。
s3m是国内北京超图主推的一个标准。
三者共同的特色是用树结构来组织数据,用json文件描述数据,用二进制文件来存储具体数据。
遵循一种规范,能够将繁重的处理任务交由服务器运行,而后根据规范,将处理结果返回给前端。这在普通的web服务中是理所固然的事情,只不过加上GIS数据这个壳儿,事情就变得有点复杂了起来。
其实OGC组织是有这么一个规范的,叫WPS——Web Process Service。
[暂空,过年前写完]