GIS算法基础知识点总结
绪论
基本计算方法:穷举法、贪心算法、分治法、动态规划法、迭代法、分支界限法(Branch and Bound)
-
穷举法:通过枚举所有可能的解来寻找最优解。优点是简单直接,缺点是计算量大,适用于小规模问题。
-
贪心算法:每一步都选择当前最优的局部解,期望通过局部最优达到全局最优。优点是计算速度快,缺点是不一定能得到全局最优解。
-
分治法:将问题分解为若干子问题,分别解决后再合并结果。(归并排序和快速排序)
-
动态规划法:将问题分解为重叠子问题,通过保存子问题的解来避免重复计算。(背包问题和最短路径问题)
-
迭代法:通过反复迭代逐步逼近问题的解。(牛顿迭代法)
-
分支界限法(Branch and Bound):通过分支和界限策略来搜索解空间,常用于组合优化问题。(最佳工作序列)
空间数据编码
Morton码
-
原理:将二维或多维空间中的点编码为一维的Morton码,便于存储和检索。通过将坐标的二进制位交错排列生成Morton码。
-
过程:将每个坐标转换为二进制,然后按位交错合并成一个二进制数(行列行列行列...),最后转换为十进制数。
数据压缩
文字数据压缩:哈夫曼编码(Hoffman Coding)
-
原理:基于字符出现频率构建最优前缀码,频率高的字符用短码,频率低的字符用长码。
-
过程:
-
统计字符频率。
-
构建哈夫曼树:每次选择频率最低的两个节点合并,直到所有节点合并为一个树。
-
从根节点开始,左子树路径标记为0,右子树路径标记为1,生成每个字符的编码。
-
矢量数据压缩(已考):间隔取点法、垂距法和偏角法、道格拉斯-普克算法(DP)
-
间隔取点法:按固定间隔选取点,简单但可能丢失重要细节。
-
垂距法:计算点到直线的垂直距离,保留距离大于阈值的点。
-
偏角法:计算相邻线段之间的夹角,保留夹角大于阈值的点。
-
道格拉斯-普克算法:
-
连接起点和终点形成直线。
-
计算所有中间点到直线的距离,找到最大距离点。
-
如果最大距离大于阈值,则在该点处分割线段,递归处理。
-
否则,删除所有中间点。
-
栅格数据压缩:游程长度编码(Run-Length)、四叉树(QuadTree)
-
游程长度编码:将连续的相同值合并为一个值和一个计数值。适用于大量重复数据的压缩。
-
四叉树:将二维空间递归划分为四个象限,直到每个象限内的值相同或达到最小粒度。适用于稀疏数据的压缩。
空间索引
查找与目标距离小于50m的POI:暴力法->矩形过滤法->B-tree索引
-
暴力法:计算所有点与目标的距离,筛选出距离小于50m的点。
-
矩形过滤法:先筛选出目标点周围50m矩形区域内的点,再计算距离。
-
B-tree索引:适用于一维数据,通过B-tree定位经度范围,再定位纬度范围
n阶B树:[n/2(向上取整)-1,n-1],n阶R树:[n/2(向上取整),n]
B树的删除:删除非叶子结点转换为删除叶子结点;删除叶子结点时先看左右兄弟是否够借,够借则借,不够则合并(合并时也要考虑父结点是否会下溢出)。
B-tree不适合于二维索引的不足->R树、Spatial Fitting Curve
-
R树:将空间对象用最小外接矩形(MBR)表示,构建层次结构,支持高效的空间查询。
-
Spatial Fitting Curve:将多维空间映射到一维空间(Morton码)。
R树分裂策略:Linear Split、Quadratic Split、Exponential Split
-
Linear Split:线性选择分裂点,简单但效果一般。
-
Quadratic Split(已考):选择使两个新矩形面积和最小的分裂点,效果较好。
-
Exponential Split:考虑所有可能的分裂组合,选择最优解,计算量大但效果最好。
地图投影
兰伯特等角投影、墨卡托投影
空间度量算法
折线段拐向判断、判断点是否在线段上:向量叉积
判断点是否在多边形内部:射线法(Ray Casting algorithm)、Winding number algorithm(环绕数法)
-
射线法:从点引一条射线,计算与多边形边界的交点数目,奇数在内部,偶数在外部。
向上的线算起点,向下算终点;平行线不算; -
环绕数法:计算点与多边形顶点的环绕数,非零在内部,零在外部。
看环绕角度
计算点到直线距离、多边形面积量算(平面/地球椭球表面)
空间拓扑
拓扑关系生成过程:①弧段处理:检查是否除交点外没有相交;②建立结点弧段关系;③左转算法生成多边形,建立多边形与弧段关系;④建立多边形与多边形之间的关系。
左转算法、岛的判断
岛的判断:①计算所有多边形面积,没有负面积直接结束;②对正负面积多边形进行排序;③顺序取一个正面积的多边形,并依次取出负多边形,若包含则形成复杂多边形(含岛),并从负多边形集合中删去该多边形,直至所有负多边形都被访问。
这里要注意一个正多边形中可能包含多个岛。
包含的判断:先看面积。再看包围盒,最后看逐个点。
Voronoi生成算法:sweep line/plane
site event和circle event发生对应的变化
内插方法
普通克里金插值、Voronoi图插值(用面积比)
降水插值(已考)
降水插值公式、降水调整系数公式
步骤:①两两站点高程与降水数据,用最小二乘法求逐月降水调整系数;②定义虚拟面,用降水插值公式计算该虚拟面上每个站点的降水;③应用普通克里金插值得到虚拟面的降水插值结果;④再利用降水插值公式得到真实高度的降水插值结果。
地表温度插值算法(SCSG效应)
地形分析
坡度、坡向计算(Sobel梯度算子)
D8流向、D-ifinity
-
D8流向:将水流方向分为8个方向。
-
D-infinity:考虑水流方向的连续变化。
在3X3窗口中找最大坡度的三角形面(通过向量叉积求法向量,再求法向量与水平面夹角)
该坡度作为中心格网的坡度,由法向量得到坡向。
由三角形面以及坡向确定流量分配。
图论
期末考试时间安排问题->四色问题
贝肯数->最短路径问题
Dijkstra算法、A*算法
-
Dijkstra算法:通过贪心策略求解单源最短路径。[dist]、[path]
-
A*算法:通过启发式搜索求解最短路径。
证明A*算法中的(f(n)=g(n)+h(n))可以找到最短路径:
S为起点,T为终点。假设另一条路径Popt最短,则有
①f(T)opt=g(T)opt+h(T)opt=g(T)opt<g(T)A*;
②存在一个路径点n'不在PA*上;
③S->n1->n2->...->T,则有f(n1)<=f(n2)
假设从一个路径点之后,Popt经过点n',而PA*经过的点为n'',若f(n'')>f(n),则n'在PA*上,矛盾;若f(n'')<f(n'),则存在nk,使得f(nk)>f(n'),因此n’会被选入到PA*上,矛盾。
GWR and RF
信息熵、信息增益
空间优化算法
Hill Climber、Simulated Annealing、Genetic algorithm、Particle Swarm optimization、Ant colony optimization
下午看GWR、RF和PSO