Gis数据存储
零、前言
1、首先该篇文档主要是针对刚入坑的朋友,如果你对gis的存储结构谙熟于心,建议略过该篇
2、相信刚入坑gis的朋友一定会听到各种各样的数据存储格式,当别人聊起之时,自己却没有涉及,只能暂时记录然后自行百度解决,不仅耗时,书面的解释又晦涩难懂;
介于以上原因,此篇文档横空出世,立志让入坑gis的伙伴能够快速上手gis的数据存储格式,该篇文档会加入很多自身的理解,难免会存在不足,还望各位不要吝惜自己的所见所闻,一起完善这篇文档,毕竟前人种树,后人点火嘛
3、由于想要把本人的所知所想全部表达出来,所以本片文档的文字描述较多,还请耐心看下去,相信对小白还是有一定帮助的
4、本文涉及编程方面的知识,默认语言为java
5、学无止尽,gis的水深不见底,本人也只是一个在岸边停留的人,这篇文档也只是冰山一角
一、基础概念
1、首先得明确,如今(2023)主要的两种gis数据存储分为两大类:“矢量” 和 “栅格”,这两种下又有自己的具体存储形式(特定场景下可以相互转化);对这两种数据的处理是截然不同的,还望不要混淆
2、熟记1,其实久而久之,自然就能区分了,但是如果是刚入坑的对概念还很模糊,还请仔细区分
二、矢量数据
1、定义
矢量数据是在直角坐标中,用x、y坐标表示地图图形或地理实体的位置和形状的数据。矢量数据一般通过记录坐标的方式来尽可能地将地理实体的空间位置表现得准确无误(百度百科)
2、基础
(1)矢量是带方向(主要是顺/逆时针)的,一些图形(主要是环形)方向是有特殊含义的
(2)众所周知,二维图形可分为 点、线、面三个大类
这三大类下又可细分为各自的小类(实际使用时主要是针对这些小类)
点:单点(Point)
线:单线(LineString)、环线(LineString,首尾相连的线)
面:单面(Polygon)、环(Polygon,有内环的面)
(3)当然,在实际使用中,肯定会遇到由多个图形组成一个整体的图形
例如:一个群岛,他有很多互相隔离小岛,此时只靠一个面是无法精准描述这个群岛的样子了
这个时候,就引入了多面(MultiPolygon)的概念,同理还有多点(MultiPoint)、多线(MultiLineString)
这些带 "多" 的的图形,实际就是一个由任意数量,有相同类型的单个图形组成的一个"大"图形
(4)诶,这个时候就有吴彦祖要问了,如果一个图形他又有点,又有面该怎么办呢
当然这个问题,我们的前人也想到了,于是就有了几何集合(GeometryCollection)的概念
几何集合他其实就是一个任意数量,含有不同类型的单个图形组成的一个"大"图形
(5)到这,一个图形具体的表示方法就能归纳出来了(这里也只是列举了一些常用的,还有很多其他的就需要自行百度了)
点:单点(Point)、多点(MultiPoint)
线:单线(LineString)、环线(LineString,首尾相连的线)、多线(MultiLineString)
面:单面(Polygon)、环(Polygon,有内环的面)、多面(MultiPolygon)
混合图形:几何集合(GeometryCollection)
3、WBT/WKB
想要表示一个图形,我们就得有一套规范,这套规范就是 WKT(Well-Known Text) 和 WKB(Well-Known Binary),他们的关系:WKT就是文本样子的WKB,WKB就是二进制的WKT
这里主要介绍WKT,毕竟正常人也看不懂WKB,反正有办法可以互转(wkb/wkt互转),不必为难自己;说白了,WKT是给人看的,WKB是给计算机看的,在代码表现形式上两者都是字符串类型
哦,忘了,WKT说人话(我的理解)就是 一种可以用人类可读的文本来表示空间图形的一套规范,熟练之后其实很简单
言归正传,接下来将阐述如何使用WKT表达图形