ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ArcGIS中WGS_1984转Krasovsky_1940_Albers投影转换实战解析

ArcGIS中WGS_1984转Krasovsky_1940_Albers投影转换实战解析 做GIS数据处理的人十有八九都栽过投影的跟头。昨天还在用WGS_1984的全球数据做分析今天甲方甩过来一句“用Krasovsky_1940_Albers出图结算面积”你手里的数据瞬间就变了一副面孔。这篇文章就是一次挺典型的实战记录把一批基于WGS_1984的矢量数据通过ArcGIS完整地转到Krasovsky_1940_Albers投影坐标系下保证图形、面积、拓扑关系都不出岔子。整个过程包含原理层面的思考、ArcGIS工具链的具体操作、以及好几处不写文档但真实存在的坑。写出来做个存档也希望能帮到刚接触坐标转换的人。1. 先把概念理顺为什么这个转换不是“换个显示方式”那么简单很多人做投影变换打开ArcMap的“数据框属性”把坐标系从WGS_1984_Web_Mercator_Auxiliary_Sphere换到别的屏幕上图形看着“好像变了”但真正拿去做面积统计、空间连接、按图幅出图时结果全乱了。这里最容易被忽略的问题是你只是改了数据的“显示投影”并没有改变数据本身的坐标系定义。显示坐标系只是给你看的数据底子还是老样子。从WGS_1984转到Krasovsky_1940_Albers涉及到两类坐标系的叠加变化。一个是地理坐标系层面的基准面差异。WGS_1984是地心坐标系椭球体长半轴6378137米扁率1/298.257223563Krasovsky_1940使用的是克拉索夫斯基椭球长半轴6378245米扁率1/298.3。这两个椭球在空间上并不重合两个地心坐标系之间存在平移和旋转的差异。另一个是投影坐标系层面的数学映射。Albers等积圆锥投影有自己的双标准纬线、中央经线、坐标原点这些参数你要把经过基准面变换后的坐标点再通过Albers投影公式映射到平面坐标上得到才是带单位的、能算面积的平面坐标值。这就能解释为什么不能跳过“地理变换”如果不做基准面转换直接拿WGS_1984经纬度套进Krasovsky_1940_Albers的投影参数椭球体不统一结果可能差出上百米。制图小比例尺看不出来一旦做地籍、确权、工程测量这类高精度要求的工作偏差就是事故。所以在ArcGIS里操作之前脑子里要主动建立一个两层模型地理坐标系层面把WGS_1984的经纬度坐标转换为Krasovsky_1940椭球下的经纬度坐标。投影坐标系层面把Krasovsky_1940椭球下的经纬度坐标通过Albers圆锥投影映射到平面直角坐标。这两个层面全部走通才算真正完成一次“数据坐标转换”而不是表面改个属性的事。2. 参数选择与工具链没有现成的“一键转换”按钮打开ArcToolbox输入“投影”二字你会发现有“投影”“投影栅格”“定义投影”“创建自定义地理变换”等一大堆工具。面对从WGS_1984到Krasovsky_1940_Albers这个具体场景关键是先搞清楚数据和目标坐标系之间在地理基准层面有没有内置的变换方法。打开ArcMap或ArcGIS Pro的坐标系列表你会在 Geographic Coordinate Systems 下找到 Asia 目录里面有 GCS_Krasovsky_1940。Projected Coordinate Systems 下也有一堆 Albers 投影比如 Asia 目录下的 Asia_Lambert_Conformal_Conic、Krasovsky_1940_Albers。但是系统中预置的“地理变换”列表里通常没有直接定义 WGS_1984 到 GCS_Krasovsky_1940 的标准变换参数因为这种变换参数是区域性、本地化的你必须自己动手创建。创建自定义地理变换是这整个任务里最核心、最影响精度的一步。ArcGIS里最常用的是“三参数法”或者“七参数法”的坐标转换模型。三参数模型只做三个方向上的平移适合小范围、精度要求不高的情况七参数模型在平移基础上增加三个旋转角和一个尺度变化适合大范围、高精度需求。但这里有个认知层面的坑你拿到的“转换参数”是某个控制网、某个地区、某个测绘部门根据该地的公共点解算出来的。不同来源的参数用在同一个任务里结果可能相差很大。比如同样是WGS_1984转Krasovsky_1940网上流传一些“经验参数”但用的时候务必先确认适用区域和模型我见过有人拿别的省标的七参数来处理东北的数据出来结果偏了四五公里还不知原因。站在实操角度我建议按下面这个优先级来选择坐标转换策略如果数据来源方直接提供了七参数并且说明适用区域与本次数据范围一致那就用七参数选COORDINATE_FRAME这是最标准的策略。如果没有参数但数据本身范围不大比如一个县、一个市区不妨试试“三参数”将平移参数设置为零效果很多时候也够用。最不推荐的做法不做任何地理变换直接在投影工具里强行转换。刚才提到的工具在ArcGIS里对应的处理路径是Data Management Tools → Projections and Transformations → Create Custom Geographic Transformation。填写的表格里需要选择从GCS_WGS_1984到GCS_Krasovsky_1940方法选三参数或七参数然后填入参数值起个名字。这个新建的变换会出现在你的地理变换下拉列表里方便投影工具调用。3. 矢量数据从WGS_1984到Krasovsky_1940_Albers的完整实操我拿手头一份省级行政区以及土地利用类型的混合shp来演示。数据初始坐标系全部是GCS_WGS_1984最终目标是Krasovsky_1940_Albers投影坐标系中央经线105°E双标准纬线25°N和47°N单位为米。3.1 工欲善其事先核对数据源坐标定义这一步看起来不起眼却是大头。很多数据在分发时坐标信息缺失或者字段写成了“Unknown”但实际的坐标值却是某种特定的坐标系。如果你拿到的shp打开后在ArcMap里显示不出来图形或者图形跑到太平洋里大概率是坐标“没定义”或“定义错了”。具体操作是在图层上右键 → Properties → Source查看“Geographic Coordinate System”一栏。正常应该显示GCS_WGS_1984。如果显示 Unknown你需要先用“定义投影”工具Define Projection手动指定为GCS_WGS_1984。此处必须给个独立提示“定义投影”不改变任何坐标数值它只是告诉软件这组数对应的是哪个坐标系。只有几何坐标值与定义完全匹配时才能使用否则就别动它先搞清楚真实来源再定义。我遇到过的情况是一份数据源命名是“wgs84_utm50”但坐标字段的数值跟相邻区域的WGS_1984地理坐标相差很远。最后排查发现数据秘书把它从Web地图上直接导出成了Web墨卡托投影下的“伪经纬度”。直接在源数据不做正确修正后面每一步都是白用功。3.2 创建自定义地理变换完成基准面转换假设原始数据没问题坐标系就是标准的GCS_WGS_1984。现在创建一个七参数自定义变换步骤打开 ArcToolbox进入 Data Management Tools → Projections and Transformations → Create Custom Geographic Transformation。“Geographic Transformation Name”填“WGS_1984_To_Krasovsky_1940_7P”。“Input Geographic Coordinate System”选 GCS_WGS_1984。“Output Geographic Coordinate System”选 GCS_Krasovsky_1940。“Method”选 COORDINATE_FRAME。下方参数框分别填入DX、DY、DZ、RX、RY、RZ、M。根据你收集的区域参数填写。比如有些区域的经验值大约为 DX28.6、DY-144.9、DZ-74.2旋转参数会按弧度给或按角秒给注意ArcGIS里用的是“角秒”不是弧度填错数值直接导致发散。如果手头只有三参数就把旋转和尺度全部填0。这样的精度在几百平方公里内大概能控制在几米内出图完全没问题。3.3 使用“投影”工具做矢量数据坐标转换打开 Data Management Tools → Projections and Transformations → Feature → Project。输入要素选择待转换的shp。输出要素事先确定好建议输出为新的gdb里的要素类避免直接在原shp上覆盖。“Output Coordinate System”点旁边的图标打开坐标系属性对话框。选择 Projected Coordinate Systems → Continental → Asia → Krasovsky_1940_Albers。如果你有自己的中央经线、标准纬线要求比如说这次需要120°E中央经线、25°N和47°N但没有预置可以点“New → Projected Coordinate System”自己创建。创建自定义的Krasovsky_1940_Albers投影时注意Name取一个不冲突的名称ProjectionAlbersFalse_Easting常填0False_Northing常填0Central_Meridian填105Standard_Parallel_1填25Standard_Parallel_2填47Latitude_Of_Origin填0Linear Unit选MeterGeographic Coordinate System选GCS_Krasovsky_1940。“Geographic Transformation”一栏选刚才建好的“WGS_1984_To_Krasovsky_1940_7P”。这一步不要漏。漏了ArcGIS会用默认的不存在的转换方法很多情况下会弹出警告。点OK执行。执行完把新要素加进地图打开属性表检查SHAPE_Area字段面积值单位变成了平方米且与理论面积在一个合理范围内。同时再叠加一份其他来源的参考数据看位置一致性。作为习惯转换完成后建议顺手做一次拓扑检查Topology重点是查重叠和缝隙。坐标转换本身不改拓扑但如果在转换过程中你勾选了“保留空间关系”或者数据本身存在拓扑错误会在后续空间分析时给你致命一击。3.4 栅格数据转换的特殊处理很多项目里的影像、DEM也是WGS_1984坐标。栅格数据做投影变换用的工具是 Data Management Tools → Projections and Transformations → Raster → Project Raster。参数中需要注意Input Raster 选影像或DEMOutput Coordinate System选Krasovsky_1940_AlbersGeographic Transformation选同一套自定义变换Resampling Technique常规影像选Bilinear双线性内插DEM选Cubic三次卷积如果是分类数据则选Nearest Neighbor最邻近法避免类别值被插值污染。还有一个很隐蔽的参数是“Output Cell Size”。ArcGIS默认会根据输入输出坐标系自动调整但自动调整的结果往往不精确。建议根据你需要的分辨率手动填写比如30分辨率写成30。否则可能出现像元尺寸变成29.9999的情况后续面积统计或重采样全是麻烦。4. 避坑指南我踩过的和见过的那些“投影陷阱”坐标变换这个活儿原理说穿了就那两下子但实际操作中栽跟头往往是在特别细枝末节的地方。列几个典型的场景4.1 数据框投影干扰你判断很多人做完投影变换把新数据拖进ArcMap顺手把数据框坐标系从缺省的“WGS_1984_Web_Mercator_Auxiliary_Sphere”改成Krasovsky_1940_Albers然后一看图层属性显示的坐标单位变成米就以为“转换成功”。其实这只是显示层面的动态投影你如果右键图层导出数据导出选项里选“same as data frame”才是把显示结果固化成Krasovsky系。但如果你选“data frame”另一部分数据可能又被替换了一遍。要区分的是图层本身“Source”里的坐标系才是真正的原始坐标系。4.2 搞错椭球导致面积差得离谱Albers是等积投影前提是投影的椭球参数正确。如果你在创建自定义投影时地理坐标系里偶然选到了GCS_WGS_1984即虽然投影写的是Krasovsky_1940_Albers但属于变体“Krasovsky_1940_Albers on WGS84”那出来的面积跟Krasovsky_1940下的面积是不同的。在ArcGIS预置列表里有几个名称相近的坐标系比如“Krasovsky_1940_Albers”和“Krasovsky_1940_Albers_GOEPEL”。我见过有人选后者因为名字后面不带后缀习惯性就点了结果整个区域的坐标全部偏离。选的时候一定要点开看它的Geographic Coordinate System到底是不是GCS_Krasovsky_1940。4.3 参数单位问题导致结果完全放飞七参数里旋转参数的单位有角度秒与弧度之分很多外部参数表给的是“秒”比如RX 1.3421秒。在ArcGIS界面中填的是“秒”没错但如果你的转换方法选择的是“Position_Vector”那旋转参数符号方向反了坐标会偏得非常离谱。Position_Vector与Coordinate_Frame两种方法的旋转参数符号恰好相反。正确做法是把参数带入前先查阅转换方法说明如果是从GNSS解算软件拿到的一组七参数软件通常明确标注用的是哪种旋转约定要和ArcGIS的方法匹配。4.4 大数据量转换效率低下可以用批处理项目里如果有一千多个图斑文件、几十个gdb要素类需要统一转换一个个点Project工具太累了。ArcGIS支持“批处理投影”工具选择多个输入统一设置输出坐标系与地理变换跑完以后会生成一整套输出。更省事儿的方式是把“Project”工具拖进ModelBuilder中对要素数据集批量循环处理。实际做的时候通常先建一个gdb把所有shp导入同一要素数据集然后对整个要素数据集定义投影、投影变换拓扑一致性能得到保证。5. 结果验证与精度评估你还没到家呢做完转换不是终点。判断转换是否成功至少要做一道完整的验证。5.1 空间位置合理性检查把转换后的数据与在线影像、或者与本地区已知平面坐标控制点叠加目视确认位置没有大的错位。更科学的做法是选取至少5个均匀分布的已知控制点高精度坐标计算转换后坐标与已知平面坐标在X、Y方向上的差值得出中误差RMSE。如果RMSE在几米内说明转换参数合理如果几十米到上千米说明参数有问题回去检查七参数单位、符号、方法。5.2 面积量算逻辑与方法Albers是等积投影转换前后的面积量测结果应当保持稳定。在原始WGS84地理坐标数据上直接计算面积ArcMap默认用的椭球面积算法得到的结果与Krasovsky_1940_Albers投影后计算出的平面面积会有微小差异这是因为椭球参数不同。如果你的目标是出成果图、面积统计表那就以最后的平面米制坐标为准。5.3 有更严格精度要求的场景怎么办如果你在做县级不动产、水利测量、林业确权这类应用建议不要用自行编造的七参数而是联系省市级测绘地理信息主管部门获取本区域的坐标转换参数。多数地区有官方向外发布的转换成果或者使用“坐标转换工具”先统一整体转换一次。站在数据安全与合规的角度涉密测绘成果的使用必须要符合国家有关规定。5.4 动态投影与距离计算误区转换完成后如果数据框仍是WGS_1984_Web_Mercator_Auxiliary_Sphere你在图上拉一条线测量距离拿到的数是用Web墨卡托算的会出现距离虚高尤其在高纬度区域。测量距离前数据框坐标系务必切成Krasovsky_1940_Albers。这是一个非常容易造成数据误判的日常操作。6. 工具变体补充ArcGIS Pro中的路径差异这几年很多人从ArcMap迁到ArcGIS Pro坐标转换的入口和界面上有变化但底层逻辑一致。ArcGIS Pro里定制地理变换的路径是Analysis → Tools搜索“Create Custom Geographic Transformation”。投影栅格工具的地理变换选择会以“绿色加号”提示你选择自定义变换。Pro里处理不同坐标系叠加分析的能力更智能它会自动提示“the geographic coordinate system of the input data does not match...”并引导你选择一个变换方法但没有自己定义变换时仍然需要提前创建。Pro的“动态投影”显示速度比ArcMap快很多但依然不会改变源数据真实坐标系导出或保存要素类时需要留意“Save As”的坐标系选项。我在Pro上做大数据量栅格投影时明显感觉内存占用更理性任务运行时间相对较快尤其是在使用后台地理处理工具时输出会直接写入gdb。Pro里另一个好处是坐标系属性对话框更容易看清椭球与投影参数ArcMap那种折叠菜单找老半天的事省了不少。7. 最后再分享一个能救命的跨图层小技巧有些时候你拿到的数据不止一套而是有几套不同来源、不同坐标系的图层需要叠加。比如一套是WGS_1984另一套是Xian_1980_GK_Zone_20。直接把它们拖到同一数据框里ArcGIS会默认动态投影到数据框坐标系。如果数据框设成了Krasovsky_1940_Albers那两套数据按说都能“显示正确”但只要你做空间连接或相交软件会提示坐标系不一致甚至直接失败。遇到这种情况我的习惯是先把所有待融合数据统一转到一个投影坐标系下再做任何空间分析。不要依赖ArcGIS的on-the-fly动态投影来处理空间分析动态投影只管显示不管计算精度。稳妥起见投影统一之后可以再抽几个地物点去交叉验证面积和方向都吻合才算过关。另外还有一个小众但很实用的小操作ArcMap/Pro里可以把坐标系信息写进图层属性通过“Create Spatial Reference info”字段。这样数据发给别人时别人打开属性表就能看到每一行的坐标参考信息避免别人接手时再猜一遍坐标是哪种特别适合多人协作和工序交接。这些年我处理过各种奇奇怪怪的坐标问题从一些小范围林业图斑到省级要素集都碰过。总结下来坐标转换这件事急不得也别想偷懒绕开地理变换。你把原理模型想清楚参数来源搞明白再动工具出错概率能降一大半。希望这篇实战记录能帮你在下次面对Krasovsky_1940_Albers时少几分手忙脚乱多几分笃定。
返回列表