地理数据主要分为栅格数据与矢量数据两种;栅格数据可以理解为图片信息和空间信息的组合,数据以行列(矩阵)像素值的方式记录数据,最常见的就是各种各样的遥感数据。矢量数据的特点是在坐标系中,以x,y坐标点的方式描述图形或者地理实体的形状和位置,同时也记录实体的属性信息。
在矢量数据的存储方面,如果以文件的形式进行存储,我们可以选择EsriShapefile、geojson、topojson等格式进行存储。但是文件存储更适合作为数据移动的媒介,不适合进行查询、展示等操作。通常,我们可以选用关系型数据库和非关系型数据库对矢量数据进行存储。
关系型数据库存储
关系型数据库存储矢量数据是一种传统的解决方案,各大主流数据库如Oracle、MySQL、PostGRES都提供了相应的空间引擎,支持矢量数据的存储。
笔者最常使用的是PostGRES+PostGIS的存储方案,其中PostGIS是Postgres的空间扩展插件,赋予了Postgres存储空间数据的能力。
非关系型数据库存储
在非关系型数据库存储方案中,ElasticSearch和GeoMesa是两种常见的方案,二者又有很大的区别。
ElasticSearch
es 是基于lucense的检索技术,提供全文检索的能力,通常用来构建搜索服务。在es中,提供了两种空间数据类型,geo_point和geo_shape。
-- geo_point 对应点数据
-- geo_shape 包含polygen、linestring、multilinestring等类型
因为es的空间能力,我们可以使用es来充当一个数据库,用来存储矢量数据。
GeoMesa