一文搞懂常见的地图投影

一、概念(百度百科)

        地图投影(Map Projection),即把地球表面的任意点,利用一定数学法则,转换到地图平面上的理论和方法。书面概念化定义:地图投影就是指建立地球表面(或其他星球表面或天球面)上的点与投影平面(即地图平面)上点之间的一一对应关系的方法。即建立之间的数学转换公式。它将作为一个不可展平的曲面即地球表面投影到一个平面的基本方法,保证了空间信息在区域上的联系与完整。这个投影过程将产生投影变形,而且不同的投影方法具有不同性质和大小的投影变形。

二、原理(百度百科)

        由于投影的变形,地图上所表示的地物,如大陆、岛屿、海洋等的几何特性(长度、面积、角度、形状)也随之发生变形。每一幅地图都有不同程度的变形;在同一幅图上,不同地区的变形情况也不相同。地图上表示的范围越大,离投影标准经纬线或投影中心的距离越长,地图反映的变形也越大。因此,大范围的小比例尺地图只能供了解地表现象的分布概况使用,而不能用于精确的量测和计算。地图投影的实质就是将地球椭球面上的地理坐标转化为平面直角坐标。用某种投影条件将投影球面上的地理坐标点一一投影到平面坐标系内,以构成某种地图投影

三、常见投影方式

除了上面这几种方式还有一种特别常见的投影方式就是经纬度直投,这个网上的资料很少大致意思就是等间隔划分出多个小方块(实际上有点像梯形),然后直接平铺成一个平面

 

三、常见投影投影坐标系

1.经纬度投影

这个投影是最常见的,但也是最容易忽略的,实际上我们看到的网络上的WGS84的坐标系实际上就是经纬度投影,有些人可能不明白了,WGS84不是地理坐标系么,为什么变成投影坐标系了?那么假设它不是投影坐标系,一个三维球的坐标怎么展示在一个二维地图的平面上呢?如果想明白了这个问题就知道为什么好多平台的WGS84坐标系的地图为什么能显示在二维地图上了。通常来说经纬度投影使用的是经纬度直投的方式,但是像WGS84这种全球通用的坐标系,为了考虑一些地形复杂的小国家和地区,通常会做一些纠偏和微调,所以一般来说经纬度投影是一种基于经纬度直投的复杂投影,甚至有些地区会结合其它投影方式一起使用,这种投影综合来说拟合是比较好。像天地图底图的的经纬度投影也大致是这种方式,用EPSG:4326的方式就能直接加载

2.墨卡托投影

墨卡托投影在实际的开发工作中一般很少用到,至少我几乎没用用到过,用到的好多都是墨卡托的变种

经典的墨卡托投影一般是指等角正轴切圆柱投影,可以看下图

从上面图片可以看出来,赤道附近的变形几乎是0,但是纬度越高,它的变形也越严重,特别是快到南北极的时候,根本就没法投影到平面上,所以我们见到的好多墨卡托的投影的南北极都是别消减了一部分的(大致是南北纬85°到90°),

也好在南北极没有国家,也没有人提意见,不然就炸开锅了。

2.1 web墨卡托

经典的墨卡托投影是基于地球是个椭球体的,但好多地图厂商是比较懒的,特别是互联网上的,于是为了少一些复杂的运算,把地球当做一个正球体,于是就衍生出了web墨卡托,它由谷歌开创,又叫伪墨卡托投影,球面墨卡托,原理和经典墨卡托一样,操作和运算上简单了很多,并且拥有墨卡托永远等角的优点,在互联网上运用非常广泛,比如天地图、

2.2 高斯克里格

高斯-克吕格投影是横轴墨卡托投影的变种,与墨卡托投影类似,但不同之处在于高斯-克吕格的圆柱体沿经线而不是赤道接触球体或椭圆体。

从上面图片可以看出来,在圆柱和球挨着的地方变形很少,越靠近挨着的那个线,变形就越小,扩展的想一下,对全球的经度划分的细致一点儿,每隔几度就投影出一块区域,那么投影出来的平面误差就比较小了,然后就制定了投影带的这一概念,每隔3或者6度就做一个分度带。高斯-克吕格投影在长度和面积上变形很小,中央经线无变形,自中央经线向投影带边缘,变形逐渐增加,变形最大之处在投影带内赤道的两端。由于其投影精度高,变形小,而且计算简便(各投影带坐标一致,只要算出一个带的数据,其他各带都能应用),但是它也有一个缺点,因为离中央经线越远误差越大,不太适合大范围的地图展示,因此经常在大比例尺地形图中应用,比如用来表示某某市地图,某某县地图。。

2.3 UTM投影

全程是通用横轴墨卡托(Universal Transverse Mercator, UTM),其实质是等角横圆柱投影,它是以圆柱为投影面,使圆柱割于地球椭球体的两条等高圈上,然后按等角条件,将中央经线两侧各一定范围内的经纬线投影到圆柱面上,再将其展成平面而得。

UTM投影和高斯克吕格投影的区别:(引用地址

(1)中央经线长度比不同,UTM投影是0.9996,而高斯-克吕格投影是1。

(2)带的划分相同,而带号的起算不同。

(3)对于中、低纬度地区,UTM投影的变形优于高斯-克吕格投影。

(4)西方国家(美、英、德、法)多采用UTM投影作为国家基本地形图投影,东方国家(中、苏、蒙、朝)多采用高斯-克吕格投影作为国家基本地形图投影。

四、切片方案

在浏览器中访问在线的底图一般是访问的是地图的切片,也就是说对地图做缓存,分层级存成一块一块的小图片,其规则一般符合四叉树。

这个切片的规则和投影息息相关,一般常见的网络底图切片分为两大类,一是经纬度投影的切片方案,而是墨卡托的切片方案

4.1主流墨卡托投影方案

我上面有讲到,好多互联网地图厂商因为web墨卡托等角的优点以及其处理的便捷性而选择使用墨卡托投影,投影的南北极削减的那15度也不是随意定的,而是削减后的平面的高宽刚好是个正方形,方便做一层一层的四叉树分隔。使用墨卡托切片最经典的就是谷歌地图XYZ,在openlayers中使用XYZ的加载方式可以直接加载,然后还有TMSQuadTree 其方式大致类似,只不过编号的顺序不一样,详见下图

4.2主流经纬度投影切片

我们都知道经纬度的划分是经度一共是360度,纬度一共是180度,所以一般经纬度直投的话,地图是个2:1的长方形

如果还按照墨卡托的那种四叉树的话不是太合适,天地图就在四叉树的基础上做了一次改进,在第一级的情况下显示两个瓦片

 

对比天地图的第一级的墨卡托切片(和谷歌的墨卡托一致)

 

 

4.2.1 切片分辨率

一般最常用的切片方案就是谷歌的web墨卡托切片方案,大致思路就是计算某个瓦片(一般是256*256)一个像素代表的距离,因为是个正方形,所以经度和纬度计算起来都一样,计算方法如下

var projectionExtent = projection.getExtent();
const size = getWidth(projectionExtent) / 256;
let maxZoom = Number(this.maxZoom) || 22
var resolutions = new Array(maxZoom);
for (var z = 0; z < resolutions.length; ++z) {
    resolutions[z] = size / Math.pow(2, z);
}

但是当切片方案遇到EPSG:4326时就有了一个争议,就像上面的图片一样,它是个长方形,经度分辨率是360/256,纬度分辨率是180/256,处理这个问题就大致分为了两派,一个是谷歌和arcgis的派系,它们以经度为准,而geoserver派系的的则以纬度为准,以经度为准的话和其他的切图分辨率就一样了,以纬度为准的话计算方式如下

var resolution = 0.703125;
let maxZoom = Number(this.maxZoom) || 22
var resolutions = new Array(maxZoom);
resolutions[0] = resolution;
for (var z = 1; z < resolutions.length; z++) {
   resolution = resolution / 2;
   resolutions[z] = resolution;
}

其中0.703125是纬度180/256得来的

### YOLOv8 的主要特性和使用教程 #### 一、YOLOv8的主要特性 YOLOv8 是目标检测领域的一个重要进展,具有多个显著特点: - **轻量级跨尺度特征融合(CCFM)**:通过引入 CCFM 模块实现了更有效的多尺度特征提取和融合,提升了模型性能的同时保持了较低的计算成本[^3]。 - **改进的数据增强方式**:采用更加多样化且高效的数据增广手段来提高泛化能力,在不同场景下均能取得良好效果[^4]。 - **优化后的骨干网络设计**:相较于前代版本,YOLOv8 对其基础架构进行了调整与优化,使得整体效率更高,速度更快[^1]。 - **支持多种任务类型**:除了常规的目标分类外,还能够处理实例分割等复杂视觉识别挑战。 #### 二、YOLOv8 使用教程 ##### 安装依赖库并准备环境 为了顺利地安装和运行 YOLOv8 ,建议先创建一个新的 Python 虚拟环境,并按照官方文档中的指导完成必要的软件包安装工作。通常情况下这会涉及到 PyTorch 及其他辅助工具链的选择与配置。 ```bash conda create -n yolov8 python=3.9 conda activate yolov8 pip install ultralytics ``` ##### 准备数据集 准备好用于训练或测试目的图像资料集合非常重要;这些素材应该被妥善整理成标准格式以便于后续操作。对于自定义项目而言,则需参照特定框架的要求来进行相应预处理步骤。 ##### 编写配置文件 编写合适的 `.yaml` 文件以指定各项超参数设定以及输入源信息等内容。此过程可能涉及但不限于设置锚框尺寸、类别数目以及其他影响最终输出质量的关键因素。 ```yaml train: ./datasets/train/images/ val: ./datasets/valid/images/ nc: 80 names: ['person', 'bicycle', ... ] ``` ##### 启动训练进程 当一切准备工作就绪之后就可以调用命令行接口执行实际的学习任务了。这里需要注意的是具体选项可能会依据个人需求有所差异,请务必仔细阅读相关说明材料后再做决定。 ```python from ultralytics import YOLO model = YOLO('yolov8.yaml') results = model.train(data='coco128.yaml', epochs=100, imgsz=640) ``` ##### 进行预测评估 最后一步则是利用已经训练好的权重文件对未知样本实施推断作业,并据此作出合理的判断结论。同样可以通过简单的 API 接口轻松达成这一目标。 ```python predictions = model.predict(source="https://ultralytics.com/images/bus.jpg", conf=0.5) print(predictions) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿儿本无心

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值