赞
踩
GIS 是地理信息系统的简称,这里比较喜欢 ESRI 对它的解释:
地理信息系统 (GIS) 是一个创建、管理、分析和绘制所有类型数据的系统。GIS
将数据连接到地图,将位置数据(事物所在位置)与所有类型的描述性信息(事物在该位置的情况)集成到一起。这可以为适用于自然科学和几乎所有行业的制图和分析提供基础。GIS帮助用户了解模式、关系和地理环境。其优势包括改善沟通、提高效率以及更好地管理和决策。
人类的活动与位置息息相关,随着移动互联网飞速发展的今天,几乎我们每天都在跟位置信息打交道,不管是通勤驾车打车,还是餐饮外卖,又或是淘宝购物收发快递,都离不开位置信息。而 GIS 就是这样的一门工具学科,来帮助我们更好地利用空间数据与其他行业技术进行结合,从而进行有效而强大的辅助决策及管理应用,可以说应用面非常广泛,几乎能与各行各业相结合衍生更多应用方向。
首先 GIS 数据分为矢量
和栅格
,栅格这里就不讲了,可以理解为图片像素类的数据都可称为栅格数据,矢量主要常见的有以下几种:
该格式是 ESRI(美国环境系统研究所,相当于设计圈的 adobe 公司的地位吧)研制的一种工业界的标准交换格式,几乎所有的开源及商业软件均支持,感兴趣的可以官方的ShapeFile文件的白皮书,它必须至少由三个文件组成:.shp 要素几何、.shx 形状索引、.dbf 属性数据,通常还会包含以下文件:.prj 投影描述:
因此 shapefile 是表示一组文件的集合,所以在使用的过程中通常以压缩包的形式存在,切记拷贝的时候别只拷贝了一个文件!不过这种格式虽然作为标准格式但是也有着一些缺点,通常我们程序员们并不是很偏爱这个格式,这里就不过多介绍。使用上可以通过 https://github.com/calvinmetcalf/shapefile-js 等诸多开源库进行转换到 GeoJSON 进行使用。
这个就是我们程序员最常接触的格式了,GeoJSON 使用 JSON 的数据格式来表达地理数据,所以它本质上还是 JSON,只不过遵循特定的规范罢了,所以不要觉得它很长很难读,只要理解了其结构原理之后,它对你来说就是再普通不过了。GeoJSON 规范上描述有很多,这里不一一赘述,我们来讲一下最常用的格式要素集(FeatureCollection
):
GeoJSON 原则上包含类型type描述,要素集(FeatureCollection
) 顾名思义也就是要素(Feature
)的集合(Collection
),所以其类型(type)为 FeatureCollection,既然是要素(Feature)的集合,自然是有 features
这个属性,那么何为要素(Feature)呢?看下图:
其实要素(Feature)也就是几何(Geometry)加属性(Properties),为什么这么说?比如我们要去公司,那么公司的这个位置就是一个点的几何(Geometry),它是一个类型(type)为点(Point)的数据,我们对它的坐标(coordinates)可以使用 [经度,纬度] 来表示这个点,它的名称(name)就是其一个属性,当然它可以拥有一堆属性,使用key-value的格式进行描述即可。
相信读到这里,大家可以对这类我们常用的要素集(FeatureCollection) 形式的GeoJSON格式有一定的了解了,“属性(Properties)”大家可以理解,那么几何(Geometry)类型那么多,如何去描述线以及面呢?
GeoJSON 支持以下要素类型:
点(Point):
使用 [经度,纬度]来描述点的横纵坐标,在实际工作中我们很容易搞反这个经纬度,首先要记住经度(longitude)范围是[-180,180],纬度(latitude)范围是[-90,90],那么大于90或者小于90的一定不会是纬度,另外我们中国所覆盖的范围大约是经度73.66 ~ 135.05,纬度3.86 ~ 53.55,因此在国内项目上可以通过坐标范围来判定经纬度顺序,习惯上经度缩写为lng(取巧的记法就是,一般在国内很多地方情况下长(long)的为经度!),纬度缩写为lat。
线(LineString):
按照我们平时绘制折线的画法一样,一个点接着一个点的绘制,用 GeoJSON 的表达上就是一堆具有顺序的点 [[lng1,lat1],[lng2,lat2],[lng3,lat3]] 的集合。
面(Polygon):
在存储表达上跟线很像,比线多了一层[ ],细心的朋友可以发现其第一个点跟最后一个点是相同的,其实想想很容易明白,首尾相接的线段可不就是围成了一个面嘛,那为啥会多出一层呢?因为我们日常接触的面还会有中间带孔洞的形式,例如行政区划中很特殊的人文现象——飞地
另外,最新的 GeoJSON 规范上规定了第一个面必须是外环,其他的为内环,并且新的标准还规定了其必须遵循右手法则,也就是说,外环为逆时针方向,孔为顺时针方向,这块在使用 d3 或者在 WebGL 中使用一定要注意。
需要注意一点是,虽然要素集(FeatureCollection)并没有去约束存储的要素的几何类型,但是还是强烈建议大家在使用的时候,一个要素集(FeatureCollection)尽量存放同一种几何类型,避免点线面共存的情况。更多详细的 GeoJSON 格式介绍可以看 rfc7946 规范 https://datatracker.ietf.org/doc/html/rfc7946
TopoJSON 是 d3.js 作者发明的一种针对 GeoJSON 的紧凑的压缩格式,虽然在可读性上降低了,但是可以有效减少数据大小,并且保证拓扑上的正确,因其在编码的时候有效消除了冗余,通过共享边的形式存储,并且在存储上可以对整数坐标采用量化压缩,在简化数据需要保证原拓扑关系的时候相当有用,这里不再赘述,更多介绍可以查看作者的 https://github.com/topojson/topojson 这个库。
WKT(Well-known Text) 使用文本表达几何对象的一种标记语言。
WKB(Well-known Binary) 使用二进制表达几何对象的一种标记语言。
下图分表是使用WKT与GeoJSON分别描述同一几何的差异:
可以看出其主要还是为了表达几何对象,相较 GeoJSON 而言,其无法存储属性数据,这种数据格式在很多数据库中都用以表达几何数据类型,日常开发中可以方便地使用 https://github.com/cschwarz/wkx 来进行格式转换。
Keyhole Markup Language,谷歌地球等使用 xml 来表达地理数据的一种格式,这里我们只要知晓这种格式即可,不常用,如果遇到可以通过 https://github.com/mapbox/togeojson 来进行转换。
可以说坐标系也是理解 GIS 数据的一个很头疼的问题,这还仅仅只是我们在非专业 GIS 系统中接触到一部分就很让人晕头转向,比如:
那么结合这张图带大家梳理一下这些常见的坐标系:坐标系——一种用于表示地理要素、影像和观察值位置的参照系统,为定义真实世界的位置提供了框架。类型上又分为:
基于球体或旋转椭球体,地理坐标系(GCS)使用三维球面来定义地球上的位置,通常我们使用经纬度来表达位置。
由于地球是一个球面,而地图受限于存储介质(纸张、沙盘、书本、屏幕)原因,需要使用二维平面来表达三维的地球,而将地球表面展开成地图平面必然会产生裂隙或褶皱,因此需要采用一定的数学方法将曲面展成平面,而且使其变形较小,这就是投影坐标系的意义所在。
投影坐标系在二维平面中进行定义,投影坐标系始终基于地理坐标系,通过格网上的 x,y 坐标来标识位置,其原点位于格网中心。每个位置均具有两个值,这两个值是相对于该中心位置的坐标。一个指定其水平位置,另一个指定其垂直位置,在二维空间范围内,投影坐标系的长度、角度和面积恒定。
常见互联网坐标系
这里帮大家理一下关系:WGS84 通过国测局一次加密偏移后为 GCJ02(国测局2002)坐标系,BD09在此基础上进行了二次加密,而国家大地2000(CGCS2000)则是我们国家目前在推的标准规范平时精度要求不高,我们可以约等同于 WGS84。
投影坐标系:主流是墨卡托(Mercator)投影,另外有经纬度投影,主要被国家天地图所使用
墨卡托(Mercator)投影,又名“等角正轴圆柱投影”,荷兰地图学家墨卡托(Mercator)在1569年拟定,假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅标准纬线为零度(即赤道)的“墨卡托投影”绘制出的世界地图。
而 Web 墨卡托则是墨卡托投影的一种变体,将表示地球的参考椭球体也就是上图真实的声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。