GIS简介
1,GIS的全名是Geographic Information System,中文全名是地理信息系统。有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
2,GIS是什么呢,说的最通熟易懂的就是,GIS是利用测绘生成纸制地图或者航拍以及卫星等生成影像后,将这些数据存储在计算机中,以地图或图片的形式表现出来,然后根据实际生产生活以及科研中的各种需求,进而提供具体的经过处理后的数据。
WebGIS简介
1,什么是WebGIS,就是将GIS这门学科所能提供的功能,以B/S技术展现给用户,使用户只需要在浏览器上便能使用这些GIS功能的一个应用方向。
(google地图和百度地图等服务提供商的大规模扩张便是最好的证明。)
2,对国内WebGIS行业的理解
目前使用WebGIS技术的公司可以大致分为两个方向:一个是互联网方向,一个是加粗样式行业应用方向。
国内的互联网方向里基本可以说已经被百度地图,搜搜地图,高德地图,三个巨头垄断。
WebGIS在行业上的应用也将越来越广泛,并且越来越能够服务政府、企业和人民,并且更能做出有真实价值的产品。
3,数据
WebGIS的数据大致可以分为三种,一种是地图、影像数据,一种是空间属性数据、一种是业务数据。
地图、影像数据一般是一些png或者其他格式的数据组成。而我们准备地图、影像数据时,也一般会首先对这些数据进行切图。
空间属性数据,是通过一些工具将已经整理好的数据进行入库。对于AGS,只有连接的是入库数据的mxd,才能发布成FeatureServer服务,以供数据的编辑。当然,空间数据入库后还可以支持业务逻辑的使用。
第三种数据,业务逻辑数据,是每个Web项目必须有的,它根据不同的业务需求将业务所需的数据进行采集和入库。
WebGIS前端地图显示之地图比例尺换算原理
必须了解,到底是如何将服务端一个一个瓦片变成浏览器里看到的一张完整的地图的。
1,地图比例尺中的Scale和Resolution
Scale表示的是比例尺,即地图上的一厘米代表着实际上的多少厘米。
Resolution表示的是分辨率。Resolution 的实际含义代表当前地图范围内,1像素代表多少地图单位,,地图单位取决于数据本身的空间参考。
Resolution跟 dpi有关系(dpi代表每英寸的像素数),跟地图的单位也有关系。
2,屏幕上1像素代表的实际距离是多少?
在计算瓦片的行列号之前,我们需要得到图上一像素代表实际距离多少米。现在假设地图的坐标单位是米,dpi为96 ;
1英寸=2.54厘米;
1英寸=96像素;
最终换算的单位是米;
如果当前地图比例尺为1:125000000,则代表图上1米等于实地125000000米;
米和像素间的换算公式:
1英寸=0.0254米=96像素
1像素=0.0254/96 米
则根据1:125000000比例尺,图上1像素代表实地距离是 125000000*0.0254/96 = 33072.9166666667米
影像金字塔简介
1,为什么要出现影像金字塔这个概念?
传统的做法就是首先将服务器中的1G影像下载到前端,然后浏览器加载渲染出图。但是大家想想,首先客户端下载1G的影像需要的时间一定是个漫长的过程,其次浏览器加载这么大的文件也多半会导致其崩溃。而最重要的一个问题是,我们的需求仅仅是浏览全图中的某一个区域下的某几个级别,现在却将全图下载完毕了,而这同样还导致了数据的不安全性(下载到本地),同时我们的每一次放大和缩小以及拖拽都将会使浏览器花上足够长的时间去渲染。
可见,传统的方式是不符合实际需求的。到后来,又有了新的解决方法,比如arcgis的IMS版本中提出了动态出图的概念。也就是当前端发出的请求里包含了需要显示的范围、显示窗口的大小等参数后,后台动态的在原始数据中切出一个符合需求的瓦片,然后将这个数据返回给前台,并且在服务器中对这个瓦片做缓存。
但是,这个方法前端出图依旧很慢,并且使地图服务器的压力过大。终于,我们的影像金字塔解决方案出现了。
2,影像金字塔原理
影像金字塔就是,我们首先将原始影像按照用户的需求,比如用户需要显示多少种比例尺下的数据,需要显示的是原始影像中的哪个区域的数据,将原始影像按照这些需求进行划分和提取。
最低层就是我们提取和划分出的比例尺最小的一级的瓦片,而最上层的则是比例尺最大的一级的瓦片。我们仔细观察可以发现这样的一个规律:比例尺越小的级别瓦片数据越少,反之则越大。而这个规律导致的结果就是:比例尺越小的级别切图的速度越快,同时,同样大小的瓦片所包含的影像范围越多。
当我们建立好了影像金子塔后,前端再请求地图时,则将只是在切好的瓦片缓存中,找到对应级别里对应的瓦片即可。然后在前端将这些请求到的瓦片拼接出来,便可以得到用户需要的级别下的可视范围内的瓦片了。
瓦片行列号的换算原理
1,为什么要换算瓦片行列号?
WMS请求中有一个Bbox的参数,而这个参数也与行列号的换算有关系。标准的WMTS请求中,TILEMATRIX、TILEROW、TILECOL这三个参数代表的就是瓦片的级别、行、列号。
由此可见,不管是针对哪种离线或在线的地图的瓦片请求中,得到瓦片的level、col、row是请求能够实现的核心。
2,瓦片行列号换算原理
假设,地图切图的原点是(x0,y0),地图的瓦片大小是tileSize,地图屏幕上1像素代表的实际距离是resolution。计算坐标点(x,y)所在的瓦片的行列号的公式是:
col = floor((x0 - x)/( tileSizeresolution))
row = floor((y0 - y)/( tileSizeresolution))
这个公式应该不难理解,简单点说就是,首先算出一个瓦片所包含的实际长度是多少LtileSize(tileSize*resolution),然后再算出此时屏幕上的地理坐标点离瓦片切图的起始点间的实际距离LrealSize(x0 - x),然后用实际距离除以一个瓦片的实际长度,即可得此时的瓦片行列号:LrealSize/LtileSize。
何为栅格数据,何为矢量数据?
1,在GIS中,对于数据格式的分类,我们一般会将其分为栅格数据和矢量数据两种类型。
我们把栅格数据和矢量数据的特点归纳如下:
(1)栅格数据是离散的,矢量数据是连续的。所以栅格数据多用二维数组(行、列)的方式组织。而矢量数据可以理解为一种向量,它用平面坐标(X、Y)的有序几何来组织。
(2)栅格数据的最小单位是像素,矢量数据的最小单位是要素。
(3)栅格数据的属性由像素的像素值来表示,矢量数据的属性由要素的属性来表示。
(4)拓扑关系是基于矢量数据的。
2,鼠标点击到图层上的某处,需要返回此时点击处的属性,栅格数据是由像素值来表示属性的,所以它是不能满足用户需求的。这里,我们只能用矢量图层来完成这个需求。
(1)WebGIS中,地形图等底图,是由栅格图层组成的。他们本身与用户无法进行复杂的前端交互。
(2)矢量图层可以满足用户的多种需求,在与要素属性、拓扑关系等有关的需求里,它是不二之选。
WebGIS中要素(Feature)的设计
1,在GIS中元素一般分为点元素,线元素,面元素以及symbol元素(特殊的点元素)等。与此对应,图层可以分为点图层,线图层,面图层以及标注图层等。
2,要素应该具有如下功能:
(1)能够绘制出矢量数据的Shape。
(2)能够存储矢量数据的atrributes。
(3)可以响应鼠标事件。
(4)可以响应自定义事件,如自定义的一系列地图事件。
(5)能够添加入Canvas组成一个矢量图层。
(6)要素是有很多种类的,比如点、线、面等。