尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

投影与降维:地图坐标、PCA与无线投屏实战解析

投影与降维:地图坐标、PCA与无线投屏实战解析 投影这个词这几年我在好几个完全不同的场景里撞见过。搞GIS的朋友一说投影指的是一套带参数的数学变换把地球椭球面搬到平面上做机器学习的朋友一提投影说的又是主成分分析里怎么把高维数据往低维方向投射再往前翻翻Windows设置有个“投影到此电脑”说白了是把无线投屏模块叫成了投影。三种说法底层都是“高维信息压到低维表达”的思路但实操起来每一条都有自己的坑。这篇文章就围绕“投影与降维”这个话题从空间坐标投影、数据降维到无线投屏把背后的原理、计算思路和我在实际项目里踩过的坑一起盘一遍。无论你是做GIS数据处理、搞数据分析预处理还是纯粹被Windows那个“无线显示器安装失败”提示卡住的人都能在里面找到能直接上手的经验。1. 空间坐标里的投影从UTM公式到ArcGIS Pro实操指南1.1 用一句话先理解地图投影地图投影这个事很多人第一次接触是在《测量学》或者《地图学》课上老师会说“地球是个椭球体纸是平的要把球面画到平面上就得投影”。但这句话背后有一个很多人没意识到的关键点球面是不可能无变形展开成平面的这就像你没法把一个篮球皮完整地压平而不撕开任何地方。所以任何地图投影都是在做取舍要么保角度要么保面积要么保特定方向上的距离不可能全保。按变形的性质投影大体分三类等角投影比如UTM、高斯-克吕格角度关系不变小范围形状逼真适合导航测量等积投影比如阿尔伯斯等积圆锥投影面积比例正确适合人口密度、土地利用这些做面状统计的图等距投影在特定方向上距离不变适合某些工程距离量测。那么在ArcGIS里选投影的时候我自己的习惯是先问三个问题这个数据要覆盖多大范围是用来做距离/面积的精确计算还是只看个形状趋势最终出图的幅面是省、国家还是全球这三个问题定了投影选起来就不纠结。拿全国范围的数据来说很多人一上来就习惯用Web Mercator因为在线地图都是它。但Web Mercator是伪墨卡托面积变形极大在高纬度地区一个像素代表的实际面积和低纬度差很多倍。所以做全国性专题图、统计图的时候业界更常用阿尔伯斯等积圆锥投影Albers Equal Area Conic国内很多标准和图集也默认用这个。它有两个标准纬线常见的参数是25°N和47°N中央经线105°E这样全国范围面积变形控制在比较小的范围适合做面状统计和叠加分析。如果你只是做经纬度坐标的简单可视化不量距离不算面积那用WGS84地理坐标也行不一定非得投影。1.2 UTM投影计算公式拆解别死记公式记住三个参数UTM是很多工程和测绘项目里绕不开的投影网上搜索“UTM投影计算公式”的人也特别多。我刚接触UTM的时候也想把完整的正反算公式背下来后来发现完全不必要。你只要理解它怎么分带、中央经线怎么算、比例因子和偏移量怎么用就能看懂坐标、检查数据剩下的计算交给软件。UTM的全称是通用横轴墨卡托投影Universal Transverse Mercator。它的思路是把地球按经度每6度划分为一个带从西经180度开始编号一共60个带。每个带选一条中央经线以这条线为基准做一个横轴圆柱投影。有一个关键点UTM并不是让中央经线的长度比为1而是统一用了0.9996的比例因子相当于把圆柱面向地球内部收缩了一点。这样做的好处是中央经线附近略有变形但带的边缘变形不会像严格相切时那么剧烈整体误差更均匀。具体计算一个点在哪一带公式很简单。以北京为例经度约116.4°E。东半球UTM带号 floor((经度 180) / 6) 1代入就是 floor((116.4 180) / 6) 1 floor(49.4) 1 50所以北京落在UTM 50N带。中央经线 6 x (带号 - 1) - 180 3代入就是 6 x 49 - 180 3 117°E。也就是说北京的UTM投影计算是基于东经117度中央经线经差 ΔL -0.6度。知道了中央经线剩下的计算思路可以这样理解UTM在数学上属于等角横轴墨卡托投影正算公式就是把经差换算成平面距离。你可以用近似方式估算坐标量级。北京纬度39.9°N赤道到这一纬度的子午线弧长大约是4420公里UTM北坐标在4400多公里这个量级。东坐标方向经差0.6度换算成地面距离大约是 6378137 x (0.6 x π / 180) x cos(39.9°) ≈ 51.1公里然后UTM要加500000米的东偏false easting所以北京东坐标大概在448900米左右。如果你在ArcGIS里把坐标读出四五十万的X、四千四百多万的Y那大概率就是UTM 50N。UTM投影里还有两个容易忽视的参数南半球北坐标要加10000000米意思就是不出现负值坐标格式里“50N”这种是带号加南北纬半球标识。真正给ArcGIS用的时候完整坐标描述长这样WGS 1984 UTM Zone 50N它代表坐标参考系是WGS84椭球、UTM 50N投影。如果你把带号写错同一个经纬度算出来的坐标可能错好几百公里这种低级错误在数据交接里我见过不止一次。1.3 ArcGIS Pro里投影转换与删除投影信息最容易踩的坑ArcGIS Pro现在已经是GIS数据处理的主流工具了但很多人对它和ArcMap在投影处理上的差异不太适应。网上相关热词里就有“arcgis pro删除投影信息”和“gis文件投影转化”这两个操作确实是高频需求但也是最容易出事的两个点。先搞清楚两个工具的区别Project投影工具和Define Projection定义投影工具。Project工具是真正重新计算坐标把数据从一个坐标系换算到另一个坐标系输出的是新坐标值。比如你的数据本来是WGS84地理坐标系经纬度单位度你想把它变成WGS 1984 UTM Zone 50N单位米用Project工具软件会根据椭球参数和投影公式重新算出每个点的平面坐标。另一个场景是你拿到一份CAD导出的数据坐标数字是以米为单位的但文件里没写坐标系ArcGIS把它当作未知坐标系。这时候你如果直接叠到别的数据上位置肯定不对。正确做法是先用Define Projection告诉软件“这份数据是Xian 1980 3-degree GK Zone 38这种坐标系”然后再用Project转到WGS84或目标坐标系。注意顺序不要反很多人一上来就Project结果因为没有源坐标信息而报错或者软件默认按GCS_WGS_1984去算导致坐标完全错位。删除投影信息也是一个常见需求。有人希望在ArcGIS Pro里把数据的投影信息去掉让它变成“裸坐标数值”。这个操作其实不推荐在生产数据上做因为去掉之后很容易搞不清数据到底是什么坐标系。但确实有些下游系统或旧软件不认投影信息只认纯坐标那就必须去掉。实现方式大致有几种如果是shapefile可以直接在文件目录里删掉同名的“.prj”文件这样图层就变成Unknown坐标系如果是地理数据库要素类或者FGDB可以用ArcGIS Pro里的Define Projection工具把坐标系选择为Unknown未知还有一个更稳妥的办法是复制一份数据在副本上操作避免原始数据被污染。删除投影信息听起来简单但有个隐藏风险ArcGIS有时候会自动猜测坐标系。比如一份数据坐标范围跟WGS84 Web Mercator很像软件可能在没有.prj文件的情况下默认按WGS84处理叠加时仍然不会报错但结果是错的。所以我的建议是删除投影信息前先把坐标范围、单位、数值量级截图存档至少留个备注后面真出了问题还能追溯。网上还看到有人搜“立方体投影arcmap”这个说法其实有点歧义。ArcMap本身并没有一个叫“立方体投影”的工具。如果是要把空间数据以三维立方体或3D模型方式展示用的通常是ArcScene、ArcGIS Pro的3D视图或者3D Analyst扩展模块。那种“看起来是立体的”效果本质上是三维图形学里面的透视投影把三维场景投到你的电脑屏幕上跟地图投影的数学原理不是一回事。如果你是要在ArcMap里对三维体数据进行某种投影操作我更倾向理解成你有一份带高程的数据想做一个透视分析或二维化展示那可以用“3D Analyst工具→转换→从要素类转出”这一类流程。总之先分清你要的是数学投影还是图形学投影不要在工具上绕圈子。2. 数据预处理里的投影思维降维到底在降什么2.1 降维的本质寻找方差最大的若干个投影方向数据预处理里有一类经典操作叫“数据预处理之数据降维”在很多机器学习项目、统计建模、数据可视化中都会用到。降维这个词听起来很玄但如果你已经理解了前面地图投影的思路降维其实就是另一种形式的投影把高维空间里的点往一个更低维的方向/平面上投射同时尽量保留原有信息。为什么投影能保留信息关键在于方差。想象二维平面上有一堆点分布成一个拉长的椭圆长轴方向拉得很开短轴方向几乎没什么差异。如果你要把这些点压到一维直线上你会选择哪个方向肯定是长轴方向因为沿着长轴投影点与点之间仍然分得很开能保留最多的差异如果沿着短轴方向投影所有点都挤在一起信息几乎全部丢失。主成分分析PCA做的事情本质上就是找一组正交方向让数据在这些方向上的方差依次最大。第一主成分就是方差最大的方向第二主成分是在与第一主成分正交的前提下方差最大的方向以此类推。有人说PCA是在“旋转坐标轴”这也没错。但更准确的画面是原始的高维空间中数据可能沿着某个方向有最大的延展PCA就是在找这个方向然后把数据投影上去。投影到第一主成分上得到一维数据投影到前两个主成分张成的平面上得到二维数据。画散点图的时候用PCA把几十维的特征降到二维目的就是让人眼能看到数据结构。理解这一点比背一百行公式都管用。2.2 手把手做一次PCA从中心化到特征向量PCA的计算流程看起来很数学但实际操作起来就是五个步骤。我用一个小例子演示一次比你光看公式直观得多。假设有两个特征X1和X2一共3个样本(1,1)、(2,2)、(3,3)。第一步是数据中心化也就是每个特征减去该特征的均值。X1均值是2X2均值也是2中心化后变成(-1,-1)、(0,0)、(1,1)。中心化的目的是让数据的中心落在原点不然第一个方向会和均值混在一起PCA找出来的方向就不纯粹。第二步计算协方差矩阵。对中心化后的数据两个特征之间的协方差矩阵表示各个方向的离散程度。3个样本、2个特征协方差矩阵是2x2的。这里我说个简单的实际情况如果数据沿着yx方向分布协方差矩阵的非对角元素会很明显特征向量就会偏向(0.707, 0.707)这类方向。第三步求协方差矩阵的特征值和特征向量。这一步不用手算用Python的NumPy几行就出来。关键的输出是特征向量它代表主方向特征值代表这个方向上的方差大小。第四步按特征值从大到小排序取前k个特征向量组成投影矩阵W。比如这里k1就取最大的特征值对应的特征向量方向大约(0.707, 0.707)。第五步用 Z X_centered 点乘 W 得到降维后的数据。中心化后的数据是(-1,-1)、(0,0)、(1,1)点乘(0.707, 0.707)后得到一维坐标约(-1.414, 0, 1.414)。这就是从2维降到1维的结果。在真实项目里如果你用Python做核心调用通常是import numpy as np from sklearn.decomposition import PCA X np.array([[1, 1], [2, 2], [3, 3]], dtypefloat) pca PCA(n_components1) X_reduced pca.fit_transform(X) print(X_reduced)但是注意sklearn的PCA默认会做中心化你不用再手动减均值。另外sklearn里的PCA对象有components_属性就是投影方向explained_variance_ratio_是每个主成分的方差贡献率可以用来判断选几个维度。实际选k的时候一个常用标准是累计贡献率达到85%到95%。比如前两个主成分解释了总方差的92%那降到2维就够用了。还有一个办法是看碎石图scree plot把特征值大小画成折线找到拐点的位置拐点之前的维度一般都有实际意义。2.3 常见误区什么时候降维反而会翻车PCA虽然经典但翻车场景太多了。我总结几个自己踩过或者帮别人排查过的坑。第一特征没标准化就硬上PCA。PCA找的是方差最大方向如果一个特征量纲是“万元”另一个特征量纲是“元”前者方差天然大很多倍PCA会把几乎所有权重压到它身上结果降维出来的“主成分”实际只代表一个特征。正确做法是先做标准化比如z-score让每个特征均值0、方差1然后再做PCA。第二只看累计贡献率不看业务解释。有的场景下前三个主成分贡献率很高但你完全说不清它们代表什么这时候强行用它进模型模型解释性会很差。PCA适合做压缩、去噪、可视化但在需要向业务方解释“为什么这个客户被分到这一类”的场景里替代方案可以考虑保留原始特征或用线性判别分析LDA之类的方法。第三用线性降维处理非线性结构。PCA本质是线性投影如果数据分布是一个“马蹄铁”形或者螺旋结构线性投影会把这些结构搅在一起。这时候t-SNE、UMAP这类基于流形学习的方法更适合但要注意t-SNE和UMAP并非常规意义上的“投影”它们是嵌入。什么意思PCA一旦训练好得到一个投影矩阵新样本可以直接用矩阵去算而t-SNE是在低维空间里重新摆放样本位置让概率分布逼近高维没有显式的投影矩阵新样本没法直接映射进来。所以你如果要对新数据做实时降维还是优先考虑PCA这类有解析解的方法。第四样本量太小也容易过拟合。PCA的参数特征向量数量跟特征维度有关如果只有几十个样本却有几千个特征PCA找出来的方向可能只是噪声方向。这种情况下先用特征选择把维度降下来或者用带正则化的降维方法比如稀疏PCA会比裸PCA靠谱。3. 系统里的“投影”无线显示器安装失败排查全记录3.1 “投影到此电脑”到底是个什么东西Windows设置里有一个选项叫“投影到此电脑”第一次看到的人可能以为这是显示器设置实际上这是一个无线投屏接收端功能。它的作用是让其他设备通过Miracast或无线显示协议把屏幕画面直接展示到这台电脑上。你可以把电脑当作一个“无线显示器”来用。这跟前面说的地图投影、PCA投影原理上当然不一样但它的名字里确实带“投影”两个字所以也被搜索“投影”的人频繁翻到。网上的热词里有“我的windows 打开投影到此电脑 安装无线显示器提示安装失败”这个问题我真的在好几个笔记本和一体机上遇到过。症状很典型系统设置里点开“投影到此电脑”提示需要安装“无线显示器”功能但点安装之后要么一直转圈要么直接报错“安装失败”甚至提示“你的硬件不支持”。很多人第一反应是“微软又在抽风”但实际排查下来绝大多数是驱动、系统组件或服务的问题。3.2 安装无线显示器失败的5个排查步骤第一步先确认“无线显示器”这个可选功能是否存在。Windows 10/11的无线投屏接收功能并不是默认装好的它是一个按需功能FODFeatures on Demand。你可以按 Win R输入optionalfeatures打开Windows功能窗口看看“无线显示器”有没有出现。如果没看到去“设置 → 应用 → 可选功能 → 添加功能”里搜索“无线显示器”手动安装。这是最基础的一步但很多人直接在系统设置里点“投影到此电脑”没反应却不知道要去可选功能里装。第二步用命令行检查网卡是否支持Miracast。这个非常关键。在管理员命令行里执行netsh wlan show drivers输出信息里重点看“支持的接口类型”和“支持的无线显示器Miracast”这几个字段。如果显示“支持的无线显示器: 否”或者“Miracast: 不支持”那说明无线网卡本身就不支持Miracast你装多少次功能都没用。这种时候要么换一块支持Miracast的无线网卡要么用USB无线显示适配器。笔记本上很多旧Intel无线网卡早期驱动不支持更新驱动后可能就好了所以先别急着判断硬件不行。第三步检查显卡驱动与WDDM版本。Windows的无线显示功能要求显卡驱动支持WDDM 1.3及以上Windows 10初期。你运行dxdiag在“显示”标签里找到驱动程序型号看WDDM版本。如果版本太低去显卡官网更新驱动。第四步检查相关系统服务。无线显示和Wi-Fi Direct依赖几个服务比如WLAN AutoConfigWlanSvc、WWAN AutoConfig、Device Setup Manager。在“服务”services.msc里确认它们是自动启动状态。Wi-Fi Direct这块有些省电策略会禁用虚拟无线网卡也会影响投屏。第五步如果你已经走到“可选功能安装失败”这一步可以试试直接用PowerShell命令安装。管理员PowerShell执行Add-WindowsCapability -Online -Name Print.WirelessDisplay~~~~0.0.1.0这个命令会把无线显示器功能包手动拉取并安装。执行前确保系统更新已连网。装完重启再回到“投影到此电脑”设置里看状态。如果这一步报错0x800f0954之类的错误码多半是系统更新或组件存储出现问题这时候可以先用DISM命令修复系统映像DISM /Online /Cleanup-Image /RestoreHealth然后再重新安装一次。3.3 连接成功之后依然黑屏/卡顿怎么办安装好了、手机或笔记本也能搜到这台电脑了不代表万事大吉。我遇到过一个情况投屏连接成功但目标电脑上画面黑屏或者延迟到没法看。这种问题的常见原因里“双频路由器干扰”占了很大比例。Miracast用的是Wi-Fi Direct如果电脑同时连着5G Wi-Fi无线信号互相干扰会很严重。可以试试关掉电脑的Wi-Fi连接用网线上网让无线网卡专门跑投屏。另一个原因是显卡驱动里开启了高分辨率高刷新率投屏对带宽要求很高。如果对方设备输出的是4K 60Hz而接收端电脑带不动可以先在源设备上把投影分辨率调到1080P试试。调低刷新率也一样有效。没必须为了无线投屏去追求4K 60帧稳定流畅比参数好看重要得多。4. 投影与降维的常见问题速查表与独家避坑心得4.1 常见问题速查表场景典型问题原因分析解决思路地图投影转换后数据整体偏移几百米到几公里中央经线、带号或椭球参数设置错误核实源数据坐标系确认UTM带号与椭球必要时用控制点校验地图投影数据没投影信息叠加位置不对缺少.prj或坐标系字段丢失先用Define Projection指定正确坐标系再投影到目标坐标系地图投影全国范围数据用UTM拼接出现明显变形跨多个6度带单带投影不适合大区域改用阿尔伯斯等积圆锥投影或兰伯特等角圆锥投影数据降维PCA第一主成分几乎只由单一特征主导特征未标准化量纲影响方差降维前做z-score标准化或归一化数据降维降维后数据点混杂无法分类数据是非线性流形线性PCA不适合改用t-SNE、UMAP或先做核变换再PCA数据降维新样本无法通过已有模型映射到低维空间使用了t-SNE等非参数嵌入方法换用PCA或训练一个回归/编码器来模拟映射Windows无线投影“无线显示器”可选功能安装失败系统更新或组件存储损坏、驱动不支持用PowerShell安装功能检查网卡Miracast支持修复系统组件Windows无线投影能连接但黑屏显卡驱动/协议兼容问题或分辨率太高更新显卡驱动降低投屏分辨率与刷新率4.2 我踩过的坑和一直用的习惯做空间数据这么些年我最大的感受是投影问题90%不是公式算不出来而是坐标系信息在传递过程中丢了。从一个同事手里拿到一份shapefile图层右键属性里显示Unknown这时候别急着转先根据数据范围、尺度、历史沿革判断它大概率是哪种坐标系然后定义回去再转换。我也保留了一个习惯所有原始坐标系信息除了写在数据元数据里还会单独建一个TXT说明放在同目录免得过几个月连自己都忘了。降维这块我现在的习惯是先做“业务判断”再做“数学判断”。降维是为了可视化、压缩、还是噪声过滤如果是为了可视化2维3维都可以如果是为了建模更推荐先用PCA看特征值贡献率但最终模型还是需要可解释性的话我会保留一批原始特征做备选不让降维成为黑箱。无线投屏这个场景虽然跟数据处理无关但排查逻辑是通用的先分硬件和系统再用命令拿日志再动手改。很多人一遇到“安装失败”就重装系统其实是没必要的。按前面那个排查清单走一遍大多数问题都能定位到网卡驱动或系统组件上。5. 写在最后的一点个人体会我个人在实际操作中的一个体会是不管叫地图投影、PCA降维还是无线投屏里的“投影”本质上都在做同一件事——把复杂的、多维的信息用你能接受的低维方式表达出来。关键是每一步都要清楚自己在保留什么、舍弃什么。地图投影保留了角度就得放弃面积PCA保住了方差就得牺牲部分业务可解释性无线投屏为了画面流畅就得降低分辨率。所有方案都是取舍而判断取舍对不对取决于你的应用场景。做GIS数据时我会花最多时间确认坐标系是否统一做数据分析时我会提醒自己先理解特征含义再跑算法系统出问题时我习惯性地先收集信息再下结论。希望这篇文章能让你在处理“投影”这个看似分散的话题时少走一些弯路。最后再分享一个小技巧无论你多急着做投影转换都先把原始数据备份一份这个习惯救过我太多次了。
返回列表