尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

地图投影与数据降维:两个投影的数学本质与工程实践

发布时间:2026/9/29 5:09:57

资讯中心
01
ARTICLE

地图投影与数据降维:两个投影的数学本质与工程实践

地图投影与数据降维:两个投影的数学本质与工程实践
1. 两个“投影”一个讲位置的换算一个讲特征的压缩刚看到“投影与降维”这个题目我第一反应是这范围可太宽了。投影这词在不同的圈子里完全是两个物种搞GIS的人一听到投影想到的是坐标系、中央经线、变形、ArcGIS Pro里那一堆带数字的EPSG代码搞机器学习和数据分析的人一听到投影想到的是PCA、t-SNE、把一个高维矩阵压到二维坐标里画散点图。但有意思的是两个领域不约而同地用了同一个词——投影而且在数学本质上有非常相通的地方。这篇文章打算把这两条线一起聊透。先讲地图投影里实际干活时最常碰到的几件事怎么判断一个图层有没有投影信息怎么给数据定义和转换坐标系UTM投影的分带计算是怎么回事为什么ArcGIS Pro删除投影信息之后还能再补回来再讲数据降维里最常用的PCA、t-SNE和UMAP它们各自的适用场景、背后的几何直觉以及我在实际项目中总结的降维避坑经验。最后把这两个“投影”放在一起看你会发现思路惊人地一致都是把一个复杂的东西映射到一个我们能够理解和操作的坐标系里。适合谁看如果你是GIS从业者刚接触坐标系和投影转换今天的内容可以直接照着操作如果你是做数据分析和机器学习的想搞清楚降维算法到底在干什么、怎么选、怎么调参后面几节能省下不少试错时间。如果你两个方向都沾那这篇文章正好帮你把这两套知识串起来。2. 地图投影实操坐标系、UTM分带和ArcGIS里的转换地图投影的本质就是把地球表面那个不规则的椭球体按照某种数学规则展开到平面上。“投影”这两个字在GIS里从来不只是一个按钮它决定了面积、距离、方向哪些能保真哪些必须牺牲。实际项目里我见过太多因为投影没搞对而导致的“差之千里”——坐标偏移几万米、重叠分析完全对不上、面积算出来离谱最后排查半天问题往往就出在一个图层是WGS84地理坐标另一个图层的投影参数被随手赋错了。2.1 先分清“地理坐标系”和“投影坐标系”别把两者混为一谈这是新手最容易踩的坑。地理坐标系Geographic Coordinate System是用经纬度来表示位置的单位是度比如WGS84、CGCS2000它们描述的是球面上的位置。投影坐标系Projected Coordinate System是在地理坐标系的基础上通过投影算法把球面上的位置换算到平面上的X、Y坐标单位是米。同一个数据从地理坐标系变成投影坐标系本质上是做了一次数学变换不会改变数据本身的内容但会改变坐标值。举个例子北京的经纬度大约是东经116.4度、北纬39.9度。这是WGS84地理坐标。当你把它投影到Web MercatorEPSG:3857上坐标会变成X约12958175、Y约4853352这样的数值。如果你拿到一份数据打开属性表发现X坐标是一串8位左右的数字Y坐标是7位左右那大概率是有投影的如果X是116.4、Y是39.9这种带小数度的数值那说明它是地理坐标。判断一个数据到底有没有投影、是什么投影在ArcGIS Pro里最快的方式是双击图层切到“Source”选项卡看“Coordinate System”这一栏。如果是“GCS_WGS_1984”说明只有地理坐标系如果是“WGS_1984_UTM_Zone_50N”这种名字说明带了投影坐标系。线上还有一个常见问题打开矢量数据时系统弹“未知的空间参考”这种数据通常是没有写投影信息的——在ArcGIS Pro里右键图层属性你会发现Coordinate System显示为“Unknown”。这种时候需要先弄清楚数据的原始来源和实际位置范围再手动赋值而不是随便选一个坐标系去定义。2.2 UTM投影计算公式与分带选择怎么判断一个点在哪个带UTM通用横轴墨卡托投影是目前使用最广泛的投影方式之一。它的做法是把地球从西经180度起按经度每6度划分一个带总共60个带带号从1到60。中国横跨的带号大致在4354之间。UTM的横轴墨卡托投影在每带中央经线上长度比设为0.9996这样做的目的是让整个带内的变形更均匀。这里说一下UTM分带计算公式带号 取整((经度 180) / 6) 1。比如北京经度116.4度(116.4 180) / 6 49.4取整后是49加1得到50所以北京所在的UTM带号是50N。注意北半球用N南半球用S。关于UTM坐标还有几个必须记住的约定为了避免负坐标UTM在东坐标Easting上加了500000米的假东偏移也就是说中央经线的X坐标不是0而是500000南半球还会在Y坐标上加10000000米假北偏移。实际计算中如果你要手动验算坐标会用到底下这些参数序列k0 0.9996 a 6378137.0 // WGS84长半轴 f 1 / 298.257223563 // 扁率 e2 f * (2 - f) // 第一偏心率平方 ep2 e2 / (1 - e2) // 第二偏心率平方然后通过一系列展开公式计算经纬度对应的UTM平面坐标。实际上你不需要手动实现完整公式ArcGIS Pro、GDAL、pyproj都已经封装好了。但理解这个原理有好处比如当你看到某个坐标的X值是600000、Y值是4400000时能判断出这个点应该在中央经线以东100公里的位置且在北纬40度附近——这对于检查数据范围、排查坐标是否张冠李戴非常有用。在GIS软件里做投影转换最终要落地到单位上。这里补充一个常见的概念ArcMap和ArcGIS Pro都可以直接右键图层、选择属性、切到坐标系选项卡点“新建”来创建自定义投影但在做数据转换时更推荐用工具箱里的“Project”工具它会根据数据本身的坐标系和参数进行严格的变换计算而不是简单修改元数据。2.3 高热词盘点的三个操作删除投影信息、投影文件转化、立方体投影最近网上关于投影的高热问题里有一个很有代表性ArcGIS Pro里怎么删除投影信息。有些人从第三方拿到数据或者自己复制数据时不小心带上了错误的坐标系定义想清除掉重新定义。方法是在目录面板里右键数据选择“Properties”在“Source”选项卡里找到“Spatial Reference”然后点击右下角的“Clear”按钮也就是清除坐标系定义。清完之后数据的坐标值不会被改动只是元数据里没有坐标系了下一次打开时会提示未知坐标系。这个操作要特别谨慎如果数据本身是有正确坐标的只是少了定义清除之后会更麻烦等于把唯一能识别坐标系的信息也删了。正确做法应该是在确认数据坐标值正确的前提下用“定义投影”而不是“投影”工具把正确坐标系写回去。另一个高频操作是投影文件转化。这个指的是常见矢量或栅格数据在不同投影坐标系之间互相转换或者把带投影的数据转换成不带投影的数据再或者把shapefile的.prj文件去掉、单独导出坐标信息。ArcGIS Pro里对应的是工具箱里的“Project”和“Define Projection”两组工具。前者是真转换会重算每个点的经纬度并重新投影后者只是给数据挂一个坐标系标签不改变坐标值。实际工作中很多人把Define Projection当成万能工具来修坐标错位结果越修越偏——因为Define Projection不下发几何变换它只写元数据。投影文件转化还有一个常见场景就是跨平台在ArcGIS里定义好的.prj投影文件用QGIS打开时有时会提示无法识别这通常是因为.prj文件里用的WKT版本不一致QGIS更支持标准WKT2格式可以通过重新导出或在线投影库匹配来解决。立方体投影这个热搜词稍微冷门一些它指的是将三维的立方体表面展开到二维平面上的一种投影方法。在ArcMap的视频纹理映射、三维场景展示里偶尔会用到。实际项目中这类需求主要存在于将三维建筑物模型、球面全景影像投影成平面纹理以便统一处理。操作上ArcMap场景视图里并没有一键生成立方体投影的工具更多是借助CityEngine、Blender等三维软件来烘焙。如果你只是做普通GIS分析立方体投影用途有限知道有这么回事即可。2.4 Windows“投影到此电脑”安装无线显示器失败和GIS无关但值得一并解决搜索词里出现了一个很特殊的Windows“投影到此电脑”安装无线显示器失败。这其实跟地图投影没有关系是Windows系统的无线投屏功能“Project to this PC”在启用时提示安装无线显示器失败。这类问题我处理过几回最常见的原因是无线网卡驱动或显示驱动程序过旧系统无法启用Miracast功能。简单说一下排查思路先按WinR输入dxdiag打开DirectX诊断工具在“显示”选项卡里检查“Miracast”是否显示“Available”如果显示“Not Available”说明当前网卡或显卡驱动不支持无线投屏或驱动有问题去设备管理器更新网卡和显卡驱动如果驱动正常但还是装不上检查系统的“无线显示器”可选功能是否被精简掉了Win10/11可以在“设置→系统→可选功能→添加可选功能”里手动添加“无线显示器”。如果是DNS问题导致驱动下载失败可以尝试更换网络环境。以上方案只说系统层面不含任何第三方网络工具大家放心操作。如果所有方法都试过仍然失败还有一个偏方直接在控制面板的“程序和功能”里把“远程桌面服务”相关组件启用起来很多时候顺手就解决了组件缺失的问题。3. 数据降维不是“压缩一下”那么简单三种主流方法的几何直觉降维这件事在机器学习流程里属于数据预处理的一环。它的目标不是让数据变小、变快而是把高维空间中的数据降到低维空间同时尽量保留原始数据中最重要的结构和信息。为什么需要降维最直接的原因就是“维度灾难”——当特征维度高到一定程度样本会变得极其稀疏距离度量几乎失去意义模型也容易过拟合。另一个原因是可视化人类能理解的最高维度就是三维绝大多数图只能画二维你想看一眼数据长什么样就必须降维。3.1 PCA降维的“标准答案”假设是线性世界主成分分析是理解降维的起点。它的数学目标很清晰找到一组新的正交坐标轴使得数据在这些轴上的方差依次最大。第一主成分捕捉最大的方差方向第二主成分在与第一主成分正交的约束下捕捉剩余最大方差以此类推。因为方差最大意味着信息损失最小所以PCA做的就是你输入高维数据输出按信息量排序的几个主成分。从实现上看PCA的核心是对协方差矩阵做特征值分解或者对数据矩阵做SVD。用Python里的scikit-learn几行代码就能跑完import numpy as np from sklearn.decomposition import PCA import matplotlib.pyplot as plt X np.random.randn(200, 50) # 200个样本50维特征 pca PCA(n_components2) X_2d pca.fit_transform(X) plt.scatter(X_2d[:, 0], X_2d[:, 1], s5) plt.xlabel(PC1 (%.1f%%) % (pca.explained_variance_ratio_[0] * 100)) plt.ylabel(PC2 (%.1f%%) % (pca.explained_variance_ratio_[1] * 100)) plt.show()这里我要强调两个实操细节。第一个是PCA对特征尺度很敏感如果你跑之前不做标准化量纲大的特征会主导主成分方向结果很容易失真。所以建议PCA之前先做Z-score标准化或者至少做MinMaxScaler。第二个是n_components怎么定一般看累计解释方差比比如要保留85%以上的信息量就取累计解释方差比达到85%的最少维度数。常用做法是画出碎石图看特征值从哪个位置开始断崖下降。PCA的优点很明显计算快、有全局最优解、结果可解释性强可以看每个主成分的特征载荷适合作为降维的第一步尝试。但它的局限在于假设数据整体呈线性相关结构如果数据在各方向上呈非线性流形PCA的投影结果就像把一张卷起来的纸强行压平整会将本来在流形上相邻的点撕开得很远。3.2 t-SNE可视化专用的“非线性熨斗”t-SNEt-Distributed Stochastic Neighbor Embedding是目前最流行的可视化降维算法。它解决的是PCA处理非线性结构的不足。t-SNE的思路和PCA完全不同在原始高维空间中任意两个样本之间根据欧氏距离的相似度被转换成一个条件概率在低维空间中它也计算样本对之间的相似度然后优化低维空间中的概率分布让它尽可能逼近高维空间的概率分布衡量标准是KL散度最小化。t-SNE最核心的超参数是困惑度perplexity你可以把它理解为算法在计算每个点的相似度时考虑的“邻居”数量。困惑度太小降维结果会呈碎块状每个点只跟极少数点抱团困惑度太大全局结构会变得模糊小类簇丢失。我在实际项目中一般先用困惑度30做一次再尝试5、20、50比较不同结果的稳定性和可读性。t-SNE还有一个特点必须提醒每次运行结果都可能不同因为优化过程引入了随机初始化。想复现结果要固定random_state。t-SNE的代价在大数据集上尤为明显。它的优化复杂度是O(n²)样本量超过10万会跑得让人怀疑人生。我处理过20万个节点的业务数据用t-SNE跑了将近半小时内存占用一度冲到接近极限。后来解决方案是先用PCA降到50维再用t-SNE可视化效果稳定很多。实际调用代码比较简单但要注意参数别乱调from sklearn.manifold import TSNE tsne TSNE(n_components2, perplexity30, learning_rateauto, initpca, random_state42, n_iter1000) X_tsne tsne.fit_transform(X_pca) # X_pca建议是先PCA降维后的结果t-SNE适合做探索性数据分析帮你在图上发现类别是否有分群结构但它不是聚类算法降维后坐标的绝对距离没有意义只有相对远近和团簇分布值得参考。有一个非常经典的陷阱用t-SNE去判断两类数据是否可分其实很多时候很小的困惑度差异就能让结果从“两类分得很开”变成“混成一团”所以不要拿t-SNE的图去做严格定性结论。3.3 UMAP流形降维的当代实践速度和结构兼得UMAPUniform Manifold Approximation and Projection是比t-SNE更新的非线性降维算法它的理论基础建立在流形学习和拓扑学上原理上通过构建数据的模糊拓扑表示再在低维空间中寻找能保持该拓扑结构的低维表示。听起来很学术但效果确实能打运行速度比t-SNE快一个量级同时对全局结构的保留更好不会像t-SNE那样在不同的随机初始化下产生明显的“拼图”变化。UMAP有两个最主要的超参数n_neighbors和min_dist。n_neighbors控制局部邻域大小值越大越关注全局结构min_dist控制降维后点的最小间距值越小点越紧凑。实际操作经验是如果把两类数据希望分得比较开加大n_neighbors、减小min_dist如果想保留连续流形结构减小n_neighbors、增大min_dist。UMAP也建议先做标准化再跑降维。import umap reducer umap.UMAP(n_neighbors15, min_dist0.1, n_components2, random_state42) X_umap reducer.fit_transform(X_scaled)用了UMAP之后我再回头用t-SNE明显的感觉是UMAP的联合聚团效率更高而且可以做有监督降维传入标签参与构造图结构这对分类任务的探索非常有用。当然UMAP也有自己的坑它对n_neighbors非常敏感在同一份数据上从5调到50结果能像换了一份数据一样所以调参时不要只报一个固定数值要结合项目场景多跑几遍。4. 数据预处理之数据降维完整实操链路与调参心得这一节把上面提到的算法串成一套可以照着走的数据预处理流程。这套流程我在多个真实数据集上跑过从网络流量特征、业务画像到高维文本向量都反复验证过。4.1 第一步特征标准化——降维前最容易被忽略的环节降维对特征的尺度极其敏感。PCA中方差最大化的目标本质上是协方差矩阵的特征分解如果特征A的范围是0~1000特征B的范围是0~1特征A的方差天然就比特征B大PCA会不自觉地放大特征A的权重这对真实结构的刻画是偏离的。t-SNE和UMAP虽然用的是距离度量同样躲不开量纲问题。标准做法是先分离特征与标签再对特征列做StandardScaler让每一列均值为0、标准差为1。这里有一个容易出错的地方如果特征中存在缺失值标准化前要先处理缺失否则sklearn的StandardScaler直接报错或填充异常值。我的建议是拆分训练集和测试集后再做标准化避免用全量数据计算均值和方差造成数据泄露。当然在做探索性可视化时可以用全量数据先跑一版但在正式的建模流程里数据泄露是大忌。4.2 第二步pipeline整合——把降维单独封装成一步高效的做法是用sklearn的Pipeline把标准化的降维过程打包方便复用和调参。例如你要在PCA降维后接一个聚类或分类器Pipeline能让整个流程参数统一管理。from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA from sklearn.cluster import KMeans pipe Pipeline([ (scaling, StandardScaler()), (pca, PCA(n_components0.85)), (kmeans, KMeans(n_clusters5, random_state42)) ]) pipe.fit(X_train)这里特别说明一下n_components0.85的用法PCA允许直接传入保留方差比scikit-learn会帮你选择需要多少维才能解释85%的方差。这比硬性指定维度数更科学因为它根据数据本身的方差分布来确定降维程度不需要人工试错。4.3 第三步高维情形下的加速技巧和内存管理当特征维度很高例如文本TF-IDF矩阵维度轻松上万直接用PCA会非常慢因为它默认对稠密矩阵做SVD。这时候推荐使用TruncatedSVD它专门处理稀疏矩阵是PCA在大规模稀疏数据上的高效版本。from sklearn.decomposition import TruncatedSVD svd TruncatedSVD(n_components100, random_state42) X_reduced svd.fit_transform(X_sparse) print(svd.explained_variance_ratio_.sum())我处理过一份20万条文本数据特征维度12万直接用PCA内存大概率不够换成TruncatedSVD之后几十秒就跑完前100维。另外一个内存经验能不用DataFrame存高维数组就不要用numpy数组或scipy稀疏矩阵的内存占用能少三到五倍。UMAP在大数据上的处理办法也一样可以先TruncatedSVD降维到50维再进UMAP。很多人的UMAP在几十万数据上卡到崩溃其实不是UMAP不行是绕过SVD这步直接硬算高维图结构了。4.4 第四步降维结果的可视化检查与业务解读降维完成之后别急着一股脑画散点图。先检查三件事是否保留了我们业务上关心的分组信息比如用已知标签对降维结果着色时同一类的点是否聚拢、不同类是否分离降维坐标是否出现极端离群值比如有一两个点飞到极远处这时候要去原始特征里排查是真实异常值还是噪声降维坐标的尺度是否适合下游模型有的模型对输入尺度敏感必要时对降维后的特征再做一次标准化。可视化时我常用不同颜色区分业务分组。这里有一个容易被忽略的操作t-SNE和UMAP的散点图中点的坐标本身没有绝对意义只有相对距离和团簇分布有参考价值。因此不要把t-SNE的X轴坐标当作“分数”去建模这种迁移很危险。基于我自己的经验降维结果的泛化也有限在一批数据上做出来的UMAP结构放到新数据上结果不会自动对齐需要训练统一的embedding模型才可复现。5. 把两个“投影”放在一起看技术共通点与跨界感悟写到这里我越发觉得“投影与降维”这个题目的妙处在于它把两个看似无关的领域摆在一起时反思的空间特别大。地图投影是把三维旋转椭球体上的经纬度坐标通过数学变换映射到二维平面坐标这个过程必然伴随面积、角度、距离等某种属性的取舍数据降维是把高维特征向量映射到低维空间本质上也是一种“投影”同样要做信息取舍。5.1 地图投影和PCA的数学底层惊人相似地图投影的每次转换本质上是在定义一个从椭球面或球面到平面的映射函数它保持某种几何性质等角、等面积、等距离。而PCA是在寻找一个从高维空间到低维子空间的线性映射目标是“保持方差最大化”。两者都是在做“降维投影”区别只不过是把三维降到二维还是把N维降到M维。用线性代数的语言说都是在寻找一组合适的基向量把数据在这个新基下的表示简化出来。举个直观例子地球表面上一个城市的经纬度投影到UTM坐标系得到(X, Y)坐标这个过程保留了局部角度与形状但牺牲了全球面积一致性一个50维的客户特征向量降维到2维散点图保留了样本间在高维空间中的相对邻近关系但丢失了原始各特征的具体数值含义。放大到思路上都属于“挑我们认为重要的方向舍弃我们不在乎的细节”。5.2 GIS投影误区与降维误区的同构性我在GIS项目里见过有人给全国数据用一个错误的投影参数结果东北跟西南的数据叠在一起完全错位我也在机器学习项目里见过有人把三类不均衡样本用t-SNE降维结果因为困惑度没调好三类点完全混在一起于是得出“数据不可分”的错误结论。两者有一个共同的病根对“投影”本身的约束条件理解不透。GIS里常说的一句话是“没有正确的投影只有合适的投影”根据分析尺度、区域位置、分析目标面积、距离、方向选择不同投影降维领域其实也类似没有哪个降维算法永远最优只有根据数据量、结构复杂度、可解释性要求来选择PCA、t-SNE还是UMAP。很多人的困惑不是算法本身不会用而是没有先弄清楚“我要保留什么、可以舍弃什么”。这一条想清楚了无论地图投影还是特征降维都游刃有余。5.3 实际项目中的通用建议基于上面的分析我在项目管理里逐渐形成了一套思维套路。第一有明确业务目标再定投影方式。做面积统计就选等积投影做方向导航就选等角投影做降维也一样要做分类可视化就选UMAP/t-SNE要做解释性特征提取就选PCA。第二做任何降维或投影前先做数据质量检查。GIS数据要检查有没有定义坐标系、坐标单位是否正确特征数据要检查缺失值、异常值、量纲差异、类别特征是否需要编码。第三投影完成后的验证不能省。GIS里转换完成后在地图上叠加一个已知位置的参考图层来验证偏差降维后要关联已知标签做散点图或者用重构误差、解释方差比来量化信息保留程度。这两条线的“投影”做久了会发现真正靠谱的从业者不是工具背得多熟而是心里有一套观念不管在哪个领域投影本质上都是带约束的映射关键在于想清楚约束条件和代价函数。想明白这一点你在GIS里选投影、在机器学习里选降维就不再是死记参数而是有清晰的决策路径。最后分享一个小经验如果你在项目中被要求“把数据和另一个数据对齐”无论对方说的是坐标对齐还是特征对齐第一步永远不是跑工具而是先问对方“对齐的定义是什么、保准哪个属性不丢”。这个习惯帮我避免过至少三次返工也建议你下次遇到类似需求时先停一下想清楚这两个问题再动手。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。