当前位置: 首页 > news >正文

GIS算法基础知识点总结

绪论

基本计算方法:穷举法、贪心算法、分治法、动态规划法、迭代法、分支界限法(Branch and Bound)

  • 穷举法:通过枚举所有可能的解来寻找最优解。优点是简单直接,缺点是计算量大,适用于小规模问题。

  • 贪心算法:每一步都选择当前最优的局部解,期望通过局部最优达到全局最优。优点是计算速度快,缺点是不一定能得到全局最优解。

  • 分治法:将问题分解为若干子问题,分别解决后再合并结果。(归并排序和快速排序)

  • 动态规划法:将问题分解为重叠子问题,通过保存子问题的解来避免重复计算。(背包问题和最短路径问题)

  • 迭代法:通过反复迭代逐步逼近问题的解。(牛顿迭代法)

  • 分支界限法(Branch and Bound):通过分支和界限策略来搜索解空间,常用于组合优化问题。(最佳工作序列)


空间数据编码

Morton码

  • 原理:将二维或多维空间中的点编码为一维的Morton码,便于存储和检索。通过将坐标的二进制位交错排列生成Morton码。

  • 过程:将每个坐标转换为二进制,然后按位交错合并成一个二进制数(行列行列行列...),最后转换为十进制数。

数据压缩

文字数据压缩:哈夫曼编码(Hoffman Coding)

  • 原理:基于字符出现频率构建最优前缀码,频率高的字符用短码,频率低的字符用长码。

  • 过程

    1. 统计字符频率。

    2. 构建哈夫曼树:每次选择频率最低的两个节点合并,直到所有节点合并为一个树。

    3. 从根节点开始,左子树路径标记为0,右子树路径标记为1,生成每个字符的编码。

矢量数据压缩(已考):间隔取点法、垂距法和偏角法、道格拉斯-普克算法(DP)

  • 间隔取点法:按固定间隔选取点,简单但可能丢失重要细节。

  • 垂距法:计算点到直线的垂直距离,保留距离大于阈值的点。

  • 偏角法:计算相邻线段之间的夹角,保留夹角大于阈值的点。

  • 道格拉斯-普克算法

    1. 连接起点和终点形成直线。

    2. 计算所有中间点到直线的距离,找到最大距离点。

    3. 如果最大距离大于阈值,则在该点处分割线段,递归处理。

    4. 否则,删除所有中间点。

栅格数据压缩:游程长度编码(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


http://www.mrgr.cn/news/82566.html

相关文章:

  • leetcode 面试经典 150 题:轮转数组
  • RISC-V学习笔记
  • 纯前端实现将pdf转为图片(插件pdfjs)
  • LeetCode 2241.设计一个 ATM 机器:模拟
  • 关于大一上的总结
  • 第一节:电路连接【51单片机+A4988+步进电机教程】
  • C++11编译器优化以及引用折叠
  • 《计算机网络A》单选题-复习题库解析-3
  • QML使用Popup实现弹出Message
  • VB.NET CRC32 校验
  • 关于游戏销量的思考
  • 默认ip无法访问,利用dhcp功能获取ip进行访问的方法
  • 使用FDBatchMove的几个问题总结
  • 【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 3:算法实现
  • 才气小波与第一性原理
  • SpringBoot集成MongoDB
  • 【老白学 Java】对象序列化
  • Qt:子线程在程序退出时的操作
  • 使用 PyTorch 自定义数据集并划分训练、验证与测试集
  • 第十一章 图论
  • C语言 - 理解函数栈帧
  • 服务器信息整理
  • Rosbag常见使用汇总
  • 一文讲清楚HTTP常见的请求头和应用
  • 【算法不挂科】算法期末考试【选择题专项练习】<多单元汇总>
  • C++例程:使用其I/O模拟IIC接扣(2)