一 GeoJSON与SFS(简单要素规范)

SFS简单要素规范
一文看懂GeoJSON
SFS是OGC定义的关于描述客观世界的规范,主要包括两部分:common architecture和SQL option,在第一部分中描述简单要素的通用模型,定义了表示客观世界的体系结构,以及表示客观世界的术语,定义了几何对象模型,主要定义了点、线、面、多点、多线、多面、几何集合等地理要素数据结构,此外,还定义了一系列的空间操作;SQL option 这一部分主要描述了几何对象模型在空间数据库中的实现,包括预定义的 schema 和各种空间操作,对各种几何类型的表达支持等。

SFS简单要素模型的那个图画一下。

WKT格式举个例子,WKB格式稍微说说。

Point:字节序–要素类型–x--y

Polyline:字节序–要素类型–要素个数–x1–y1–x2–y2

GeoJSON基于JSON数据格式,是为表示客观世界的地理要素(也包括它们的非空间信息的属性要素)而指定的一个开放的标准,目的是对各种地理数据结构进行编码,可对点、线、面、多点、多线、多面和几何集合等地理要素进行描述,事实上,GeoJSON是对SFS的第一部分简单要素模型的实现,它不仅可以表达真实世界,还可以表示虚拟世界。GeoJSON的一般格式为:

一般格式表达一下:

FeatureCollection–Feature–Geometry|Properties

实习中,小组分别使用了RapidJSON和GDAL开源栅格&矢量地理数据读写库对GeoJSON数据进行了读取。

二 GDAL

一文入门GDAL2.0
GDAL是一个开源的栅格和矢量数据读写库,它为所有支持的文件格式提供了抽象数据模型,还附带了用于数据转换和处理的各种有用的命令行实用程序。

简要介绍一下栅格数据模型和矢量数据模型。

栅格数据模型:

GDALDataset–OGRSpatialReference–GDALRasterBand

矢量数据模型:

GDALDataset–OGRSpatialReference–OGRLayer–OGRFeature|OGRFeatureDefn–OGRGeometry

相应于SFS规范,OGRGeometry中封装了地理坐标信息,也提供了一些几何操作,并能转换为WKT or WKB数据格式,同时,类中还包含着空间坐标参考系统。OGRGeometry含有众多子类,如OGRPointOGRLineStringOGRPolygonOGRGeometryCollectionOGRMultiPolygonOGRMultiPointOGRMultiLineString

OGRGeometry的派生关系说一下:

可以明显看出OGRGeometry的设计严格符合SFS的简单要素模型设计。

读取矢量数据流程:

GDALRegister–GDALDriver–GDALDataset–OGRLayer–OGRFeature|OGRFeatureDefn–OGRGeometry–各种数据类型

以GDAL读取shapefile为例,我们使用GDAL的驱动GDALDriver打开[shapefile][https://blog.csdn.net/qq_40996400/article/details/103739143]返回GDALDataset实例化对象,GDALDataset中存储着shapefile中的空间信息和非空间属性信息,使用OGRDatasetGetLayer方法获得OGRLayer对象,该对象存储着很多地理要素,通过OGRLayerGetNextFeature方法获得OGRFeature对象,该对象存储着空间信息和非空间属性信息,其中空间信息存储在OGRGeometry对象之中,非空间信息使用GetFieldAsXXX(i)方法获得,通过OGRLayerGetLayerDefn方法获得OGRFeatureDefn对象,该对象存储图层的元数据信息,通过GetFieldDefn方法可以获得每个字段的描述对象OGRField,通过该对象的GetNameRef方法可以获得属性的名称。

形象地说,我们可以将GDALDataset看作一个数据库,OGRLayer就是数据库中的许多表,OGRFeatureDefn是描述表的元数据也就是表头的信息(除了空间字段),OGRFeature是表中的每一行,每一行有一个或多个空间信息字段,有若干个非空间信息字段。

三 QT

Qt是一个旨在简化桌面、嵌入式和移动平台的应用程序开发和用户界面创建的完整开发框架。

Qt集成了一系列组件,如OpenGL、WebEngine、https/http、XML、JSON、chart、3D、SVG格式等。

Qt的信号与槽机制也使得Qt的动作响应机制十分良好,一个信号可以对应多个槽函数,一个槽可以响应多个信号。

四 OpenGL(作用、仿射变换)

OpenGL核心模式详细讲解
一般而言,我们认为OpenGL是一个API即应用程序编程接口,它内部定义了一系列图形绘制函数,允许程序员指定着色程序、对象和涉及到生成高质量图形图像(特别是三维对象的彩色图像)的操作,OpenGL是一个规范性的东西,它严格规范了函数的功能,函数的执行流程以及输出值,但并不规定函数的内部实现,函数的内部实现由开发者自行决定(所以有不同的显卡),只要其功能和结果与规范相匹配即可。

在OpenGL核心模式中,数据到图像主要经历了顶点着色器-图元装配-几何着色器-光栅化-片段着色器-测试与混合六个阶段,顶点着色器执行完毕之后,数据应为标准化设备坐标,顶点着色器中进行了坐标的变换过程,主要涉及到局部坐标系-世界坐标系-观察坐标系-裁剪坐标系,顶点着色器执行完毕之后,即进入光栅化阶段经过视口变换转换为屏幕坐标,其余阶段不叙述。

而仿射变换主要发生在观察坐标系-裁剪坐标系的转换过程,主要包括正射投影和透视投影两个部分。

五 空间索引(格网索引与四叉树索引)

空间索引的目的是对空间数据进行分类组织,以达到快速检索。

网格索引:

对地理空间进行网格划分,划分成大小相同的网格,每个网格对应着一块存储空间,记录落入该网格的空间对象。

假如我们要查询某一空间范围内有哪些空间对象,我们可以很快根据这一空间范围计算出与它相交的网格,分别到这些网格之中查找空间对象,最终与其相交的空间对象。

假如我们要查询包含某一点的空间对象,就要查询这一点在哪个网格,然后循环网格内存储的空间对象,判断该空间对象是否包含这个点,如果包含,就返回。

四叉树索引:

四叉树,是二叉树的高维变体,适合对二维数据进行查询和存储。

常规四叉树的结构如图所示,地理空间对象都存储在叶子节点上,中间节点以及根节点不存储地理空间对象。

img

四叉树对于区域查询,效率比较高。但如果空间对象分布不均匀,随着地理空间对象的不断插入,四叉树的层次会不断地加深,将形成一棵严重不平衡的四叉树,那么每次查询的深度将大大的增多,从而导致查询效率的急剧下降。

因此实习中对传统四叉树进行了改进,将地理实体信息存储在完全包含它的最小矩形节点中,每个地理实体只在树中存储一次,避免存储空间的浪费。首先生成满四叉树,避免在地理实体插入时需要重新分配内存,加快插入的速度,最后将空的节点所占内存空间释放掉。改进后的四叉树结构如下图所示。四叉树的深度一般取经验值4-7之间为最佳。

img
六 核密度估计

核密度估计
参数估计(parameter estimation)是根据从总体中抽取的样本估计总体分布中包含的未知参数的方法。

非参数估计是已知样本所属的类别,但未知总体概率密度函数的形式,要求我们直接推断概率密度函数本身。

核密度分析是一种非参数估计,它的目的是获得能够近似表示数据分布的密度函数的每一点的值,从而表示出数据的分布情况。它是频率直方图的进一步拓展,把数据分为若干相等的区间,区间中数据的个数与总个数的比值就是每个区间的概率值,通过核函数进行平滑,从而获得每一点的概率密度大小。常用的核函数有高斯核函数、余弦核函数、均匀核函数、三角核函数。

一维核密度分析公式推导:

写一下

带宽的选择是令人十分困惑的一个问题,太大不符合h->0的原则,太小数据量少。

实习中,对于二维核密度分析,我们采用esri官方给出的带宽的选择方案,公式比较复杂不列出。

七 PostGIS

PostGIS概述
PostGIS是一个开源程序,它是对象-关系型数据库PostgreSQL的一个扩展,为其提供了存储空间地理数据的支持,使得PostgreSQL成为了一个空间数据库,能够进行空间数据管理、数量测量和拓扑分析。PostGIS实现了OGC所提出的SFS规范。

  • 完整实现了SFS简单要素模型,包括点、线、面、多点、多线、多面等;
  • 实现了一些拓扑关系的运算;
  • 实现了空间距离度量;
  • 利用R-tree和Gist实现了空间索引,加快了正交查询的速度;
  • 尚不支持在数据库中存储栅格数据。

实习中,使用GDAL对于postgis数据库中的数据进行了查询,存储方式是WKB方式。

八 Sld

Styled layer descriptor,是指图层样式描述文件,是一种描述地图图层样式的标准,一个地图不仅包含数据源,还需要对数据进行符号化和渲染,SLD就是定义地图图层符号化和渲染信息的标准。

SLD是风格化图层描述器(Styled Layer Descriptor)的简称,是2005年OGC提出的一个标准,这个标准在一定条件下允许WMS服务器对地图可视化的表现形式进行扩展。在没有SLD之前,只能使用一些已经在服务器上规定好的样式来对地图进行可视化。而当使用了实现了SLD标准之后,它允许我们从客户端来对地图进行定义自己的样式,分级显示等操作,极大的扩展了地图可视化的灵活性。

九 QOpenGLWidget

QOpenGLWidget用于呈现OpenGL图形。

QOpenGLWidget是QT中用于绘图的窗口,集成了opengl绘图的方法,使用initializeGL()、resizeGL()和paintGL()三个函数对opengl绘图顺序进行控制。

initializeGL–resizeGL–paintGL

在自己定义的方法中绘图之前,要先执行makecurrent函数使OpenGL处于当前上下文。

update

在这里插入图片描述

十 文本索引

将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引

文本索引是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。

常常需要建立字索引和词索引,一种方法是倒排索引,倒排索引是属性到文档的索引,倒排表的每一项是关键字及该关键字出现的文档ID和位置,对于词索引,特别是中文文章,我们还需要进行分词操作。

具体检索方法如:

  • 输入一个字,编码这个字,获得这个字的值,然后通过二分法查询倒排表即可找到这个字在文章中的位置,即返回;

  • 输入一个词,那么通过中文分词器,分词完毕之后,通过二分法查询每一个分词在倒排表中的位置,求交集即可找到位置,即返回。

Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐