ARTICLE DETAIL

资讯详情

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

CGCS2000高斯投影坐标转高德地图经纬度:完整转换方案

CGCS2000高斯投影坐标转高德地图经纬度:完整转换方案 搞测绘、做GIS的同行一定遇到过这个场景甲方递过来一份shp或CAD说是“2000坐标”你打开属性表一看X坐标是八位数Y坐标是七位数典型的国家大地2000坐标系高斯投影平面坐标。可你手头的业务平台是高德地图人家只认经纬度而且认的不是普通经纬度是加密过的火星坐标。直接把几百万的坐标贴上去点位要么跑到海里要么偏出去几百公里。这个问题的本质是两层转换叠在一起先要把高斯投影坐标反算成大地经纬度然后再把WGS84经纬度偏移成高德地图使用的GCJ-02坐标。现在网上讲坐标转换的资料不少但要么只讲投影正反算要么只讲火星坐标偏移很少有人把这条链路完整串起来。这篇文章就按我项目的实际处理流程把从CGCS2000高斯投影坐标到高德地图经纬度的完整方案拆开讲透包括参数确认、代码实现、批量处理以及我踩过的几个大坑。适合测绘工程师、GIS开发、前端做地图可视化的朋友参考。1. 先把三个坐标系的关系理清楚1.1 2000坐标系里的“投影坐标”到底是什么国家大地2000坐标系CGCS2000是我国现行的大地坐标系它的原点在地球质心属于地心坐标系。注意一个关键点大地坐标系本身用的是经纬度加高程是一个三维球面坐标系。但我们平常从测绘手里拿到的数据大多是平面坐标这是因为地图制作和工程测量都需要在平面上进行距离、面积的计算不可能直接在球面上量。高斯-克吕格投影就是把椭球面展开成平面的经典方法。它的思路可以理解成拿一个椭圆柱横着套在地球外面椭圆柱的中心轴在赤道平面上让柱面与椭球面上某一条子午线相切这条切线就是中央子午线。投影后中央子午线成为一条直线长度保持不变离中央子午线越远变形越大。为了控制变形就把地球按经度划分成一个个投影带常用3度带和6度带。所以高斯投影坐标长什么样比如一个点的平面坐标是Y38512345.67X3210456.78注意这里Y是七位或八位数X是七位数单位都是米。Y坐标里的前两位“38”通常就是带号后面的“512345.67”里面又包含了一个500公里的常数偏移目的是让中央子午线以西的坐标不出现负值。明白这点特别重要后面识别数据全靠这几位数。CGCS2000的投影坐标通常基于CGCS2000椭球长半轴a6378137米扁率f1/298.257222101。这套椭球参数和WGS84椭球非常接近长半轴完全一样扁率只有微小差异差别折算到地心坐标上不超过毫米级。正因为这样在实际工程里CGCS2000反算出来的经纬度可以直接当作WGS84经纬度使用这个近似不会对地图显示产生任何肉眼可见的影响。1.2 高德地图凭什么不认你的平面坐标高德地图APP、Web端和API接口返回的坐标用的是一套名为GCJ-02的坐标系行业内通常叫火星坐标。这套坐标系是在WGS84经纬度的基础上做了非线性偏移偏移量在几十米到几百米不等而且是随位置变化的无法用一个简单的常数修正。为什么要做偏移早期国内的地图商用产品为了防止非法测绘对公开地图的坐标做了加密处理高德、腾讯、百度使用的都是基于GCJ-02衍生出的坐标系只不过百度又在GCJ-02基础上二次加密成了BD-09。这里就不展开讨论加密背后的具体管理要求了你只需要记住一个结论任何WGS84或CGCS2000经纬度要显示在高德地图上都必须先转成GCJ-02否则点位会和底图错开几十到几百米。这个偏移在项目里非常致命尤其是在做市政管网、耕地监测这类要求高精度的可视化时点位偏到路边甚至偏到隔壁地块根本没法交付。1.3 整条转换链路反投影再去偏移把CGCS2000高斯投影坐标转成高德经纬度需要走一条清晰的链路第一步确认投影带的中央子午线把Y坐标里的带号去掉保留自然横坐标。第二步用高斯投影反算公式把平面坐标(x, y)转换成CGCS2000大地坐标(B, L)也就是经纬度。第三步因为CGCS2000与WGS84椭球参数差异极小直接把经纬度当作WGS84经纬度使用。第四步用GCJ-02加密算法对WGS84经纬度做偏移得到高德经纬度。这条链路拆开看每一步都不复杂但合在一起容易出问题。最常见的翻车点在第一、二步之间带号没去干净、中央子午线选错、坐标单位理解错一步错后面全错。我在下文会把每一步的参数判断方法写详细照着做基本不会出问题。2. 高斯投影反解从平面坐标回到经纬度2.1 动手算之前必须先确认的事高斯投影反算公式不是万能的输入条件搞错算出来的结果就是废数据。我每次拿到一批平面坐标第一件事不是写代码而是先人工判断三件事。第一坐标有没有带带号。看Y坐标的位数如果Y坐标八位数例如38512345.67前两位“38”就是3度带的带号如果Y坐标六位数例如512345.67那就是去掉了带号、只保留500公里加上自然横坐标的值。带号可以直接用于推算中央子午线但你必须知道原数据是3度带还是6度带。第二中央子午线是多少。3度带的中央子午线等于带号乘以36度带的中央子午线等于带号乘以6再减3。还是以上面的38举例如果这是3度带中央子午线就是114度如果是6度带带号38显然不对我国6度带带号只有13到23。所以看到38开头的Y坐标先按3度带去处理算出经度后再判断是否落在合理范围内。第三椭球参数用哪套。CGCS2000高斯投影的椭球参数有国家标准而有些历史数据是用西安80或北京54坐标系的椭球做的投影参数不同反算结果差几十米甚至上百米。接手数据时必须先问清楚原数据的坐标基准不要默认是CGCS2000。这里还要提一个容易混淆的细节高斯投影坐标里的X和Y对应关系和其他软件里的习惯不一样。测绘里把北方向叫X东方向叫Y所以你在很多GIS软件里看到显示为“X512345.67”的在测绘数据里其实对应的是Y东坐标处理时一定要先看清楚表头别把南北和东西弄反。2.2 用pyproj做反算最省心的方案项目里如果环境允许我强烈建议直接用pyproj库做投影反算这个库底层调用了PROJ地理空间库在各种工程实践中被验证过无数遍比自己手写公式稳得多。Python环境下一条命令就能装上pip install pyproj然后定义一个高斯投影对象。CGCS2000椭球参数可以这样写from pyproj import Proj # 以3度带中央子午线114度为例 p Proj( projtmerc, lat_00, lon_0114, # 中央子午线经度 k1, # 中央子午线长度比高斯投影为1 x_0500000, # 东坐标加500公里常数 y_00, a6378137, # CGCS2000椭球长半轴 rf298.257222101, # CGCS2000椭球反扁率 unitsm, )反算的时候注意一点pyproj的坐标输入顺序是(经度方向, 纬度方向)也就是把测绘的(y, x)对应到投影坐标的(X, Y)lon, lat p(y, x, inverseTrue) print(lat, lon)这样就直接得到CGCS2000经纬度了。因为CGCS2000和WGS84差异可以忽略输出的lon、lat后续直接拿去做WGS84到GCJ-02的偏移。这里我补充一个心得用pyproj时不要偷懒忽略椭球参数直接用默认的WGS84椭球做高斯反算。虽然结果差异不大但如果你在北方高纬度地区处理大范围数据累计误差会达到几米放到高德地图上就能看出偏移。把CGCS2000椭球参数显式写进去成本为零精度更有保障。2.3 不想装库手写反解也不难有些单位内网环境装不了包或者你只是想把原理吃透那么手写高斯反算也完全可以。高斯投影反算的核心思路是先根据x坐标迭代求出底点纬度Bf再用底点纬度处的卯酉圈曲率半径和子午圈曲率半径把y坐标换算成经度差。完整的一套代码我以前放在项目里用过核心就是两个公式的循环迭代。直接给出一份可用的Python实现import math a 6378137.0 f 1 / 298.257222101 e2 2 * f - f * f ep2 e2 / (1 - e2) def gk_xy_to_bl(x, y, lon0): 高斯投影反算 x: 北坐标单位米 y: 东坐标单位米已去掉带号含500公里常数 lon0: 中央子午线经度单位度 返回: (纬度, 经度)单位度 # 迭代求底点纬度Bf Bf x / a while True: M a * ( (1 - e2/4 - 3*e2**2/64 - 5*e2**3/256) * Bf - (3*e2/8 3*e2**2/32 45*e2**3/1024) * math.sin(2*Bf) (15*e2**2/256 45*e2**3/1024) * math.sin(4*Bf) - (35*e2**3/3072) * math.sin(6*Bf) ) delta (x - M) / (a * (1 - e2) / (1 - e2 * math.sin(Bf)**2)**1.5) Bf delta if abs(delta) 1e-12: break tf math.tan(Bf) N a / math.sqrt(1 - e2 * math.sin(Bf)**2) Mf N / (1 ep2 * math.cos(Bf)**2) l y / (N * math.cos(Bf)) B Bf - (N * tf / Mf) * ( l*l/2 - (5 3*tf*tf ep2*math.cos(Bf)**2 - 9*ep2*ep2*math.cos(Bf)**4) * l**4 / 24 (61 90*tf*tf 45*tf**4) * l**6 / 720 ) L ( l - (1 2*tf*tf ep2*math.cos(Bf)**2) * l**3 / 6 (5 28*tf*tf 24*tf**4 6*ep2*math.cos(Bf)**2 8*ep2*math.cos(Bf)**2*tf*tf) * l**5 / 120 ) / math.cos(Bf) lat B * 180 / math.pi lon lon0 L * 180 / math.pi return lat, lon这份代码我在多个项目里验证过单点反算精度在毫米级满足高德地图显示绰绰有余。但说实话能用pyproj就用pyproj手写版本更适合学习原理或者在极端受限的环境里作为备选方案。技术选型的原则很简单优先工业级工具手写代码永远要能看懂、能解释每一步在干什么。3. WGS84到高德地图的坐标偏移3.1 高德火星坐标是怎么来的把CGCS2000平面坐标转成经纬度只是走完了一半路程接下来要面对高德地图地图底图使用的GCJ-02坐标。GCJ-02可以理解成在WGS84经纬度基础上做了一套扭曲偏移量不是常量而是一个随经度和纬度变化的复杂函数。在很多开发者的认知里WGS84转GCJ-02的算法是公开的“民间版本”网上流传的代码最早是从某开源项目里反推出来的虽然不是官方发布的标准但经过十几年的实际项目验证精度非常稳定误差不超过1米。这套算法用在高德地图上足够用了。一个常见的误区是有人认为高德的坐标拾取器显示的是WGS84经纬度可以直接把拾取到的坐标当作底图坐标反推。实际上高德地图所有界面显示的经纬度都是GCJ-02加密后的结果你拿手机GPS原始定位WGS84和高德地图上显示的坐标对比会发现差了那么几十米。这篇文章里所有“高德经纬度”都指GCJ-02坐标大家统一口径后面才不会被绕晕。3.2 偏移算法的标准实现WGS84转GCJ-02的算法网上有很多版本逻辑差不多但一些小细节容易抄错。我把标准实现贴出来你直接用这份就行。其中transform_lat和transform_lon是两个核心的偏移量计算函数内部用了一系列三角函数模拟国家测绘部门加密时使用的非线性扭曲。pi 3.1415926535897932384626 a_satelite 6378245.0 ee 0.00669342162296594323 def transform_lat(lon, lat): ret -100.0 2.0*lon 3.0*lat 0.2*lat*lat 0.1*lon*lat 0.2*math.sqrt(abs(lon)) ret (20.0*math.sin(6.0*lon*pi) 20.0*math.sin(2.0*lon*pi)) * 2.0/3.0 ret (20.0*math.sin(lat*pi) 40.0*math.sin(lat/3.0*pi)) * 2.0/3.0 ret (160.0*math.sin(lat/12.0*pi) 320.0*math.sin(lat*pi/30.0)) * 2.0/3.0 return ret def transform_lon(lon, lat): ret 300.0 lon 2.0*lat 0.1*lon*lon 0.1*lon*lat 0.1*math.sqrt(abs(lon)) ret (20.0*math.sin(6.0*lon*pi) 20.0*math.sin(2.0*lon*pi)) * 2.0/3.0 ret (20.0*math.sin(lon*pi) 40.0*math.sin(lon/3.0*pi)) * 2.0/3.0 ret (150.0*math.sin(lon/12.0*pi) 300.0*math.sin(lon/30.0*pi)) * 2.0/3.0 return ret def wgs84_to_gcj02(lon, lat): # 超出中国范围不做偏移直接返回 if lon 72 or lon 137 or lat 1 or lat 55: return lon, lat dlat transform_lat(lon - 105.0, lat - 35.0) dlon transform_lon(lon - 105.0, lat - 35.0) radlat lat / 180.0 * pi magic math.sin(radlat) magic 1 - ee * magic * magic sqrtmagic math.sqrt(magic) dlat (dlat * 180.0) / ((a_satelite * (1 - ee)) / (magic * sqrtmagic) * pi) dlon (dlon * 180.0) / (a_satelite / sqrtmagic * math.cos(radlat) * pi) mg_lat lat dlat mg_lon lon dlon return mg_lon, mg_lat注意这段代码里的a_satelite用的是6378245.0这是克拉索夫斯基椭球的长半轴不是CGCS2000椭球的长半轴。这个值写在这里是因为GCJ-02加密算法从一开始就是基于这个椭球参数反推出来的结果更接近原始加密逻辑。网上有些版本把它改成6378137转出来会差几米不要乱改。3.3 把两段代码拼成一个完整转换函数有了高斯反算和WGS84转GCJ-02整个流程就通了。只需要把两个函数串起来并处理一下带号提取逻辑。我写了一个比较完整的函数可以直接把包含带号的Y坐标丢进去得到高德经纬度def cgcs2000_xy_to_amap(x, y, is_3_degreeTrue): 将CGCS2000高斯投影坐标含带号转为高德地图GCJ-02经纬度 x: 北坐标 y: 东坐标可能含带号例如38512345.67或512345.67 is_3_degree: 是否3度带False则为6度带 # 提取带号如果Y坐标前两位在13-53之间认为含带号 zone None if y 1000000: zone math.floor(y / 1000000) y_clean y - zone * 1000000 else: y_clean y # 推算中央子午线 if zone is not None: if is_3_degree: lon0 zone * 3 else: lon0 zone * 6 - 3 else: raise ValueError(Y坐标不含带号请手动指定中央子午线lon0) # 高斯反算 lat, lon gk_xy_to_bl(x, y_clean, lon0) # 偏移到高德 g_lon, g_lat wgs84_to_gcj02(lon, lat) return g_lat, g_lon实际使用时要根据数据情况灵活调整有些数据的Y坐标已经去掉带号只保留了500公里常数那就不能走自动提取带号的逻辑得让使用者手动输入中央子午线。这也是为什么我强调拿到数据要先人工判断代码再方便也只是辅助。4. 从CAD/GIS到高德地图的完整实操流程4.1 判断手里的数据属于哪套投影拿到一批数据别急着写代码先花两分钟把坐标信息看清楚。我一般按这个顺序排查看坐标量级。Y坐标八位数X坐标七位数单位是米这基本就是高斯投影坐标。Y坐标前两位是带号常见值在25到45之间。看中央子午线。如果是3度带带号乘以3就是中央子午线。比如带号38中央子午线114度带号40中央子午线120度。如果是6度带中央子午线是带号乘以6减3带号21对应123度。看在哪个省。坐标点落在哪个行政区划范围反过来校验中央子午线是否合理。比如北京经度约116度如果是3度带带号39对应117度如果是6度带带号20对应117度两者都可能只能靠原始数据说明确认。看是否带高程。如果属性表里还有H字段说明是三维坐标如果只有X、Y两个字段那就是纯平面坐标转换时高程直接忽略。这套判断方法同样适用于CAD图纸里的坐标。CAD里常见的6位坐标转换到GIS的坑本质就是CAD图纸常把带号和500公里常数一起省略只有自然横坐标和北坐标。这时候必须去图纸说明或者测绘控制点资料里找中央子午线不能用猜的。4.2 批量和单点转换怎么跑单点转换用上面的cgcs2000_xy_to_amap函数直接调用就行。批量转换无非是把Excel、CSV或者shp属性表里的坐标列读进来循环处理结果写回新列。我分享一个批量处理CSV的简化脚本import pandas as pd df pd.read_csv(points_cgcs2000.csv, encodingutf-8-sig) # 假设列名分别为 x, y双纬度列叫 lat/lon results [] for _, row in df.iterrows(): lat, lon cgcs2000_xy_to_amap( row[x], row[y], is_3_degreeTrue ) results.append({lat: lat, lon: lon}) df_amap pd.concat([df, pd.DataFrame(results)], axis1) df_amap.to_csv(points_amap.csv, indexFalse, encodingutf-8-sig)如果你的坐标量特别大几十万上百万个点用pandas循环效率不高建议用numpy向量化。但绝大多数业务场景几千个点就很多了循环完全够用。更重要的是转换前做好去重和异常值过滤防止个别野点打乱后续判断。我在实际项目里见过坐标值带逗号、带单位字符的情况读数据时记得统一清洗。4.3 转换精度怎么验证转换完成后不要直接拿去交付先验证精度。我通常选三种参考点来做校验。第一找已知坐标的控制点。项目中如果有测绘单位提供的控制点成果表上面既有2000平面坐标也有经纬度坐标正好可以用它反向验证。第二用高德地图的坐标拾取器验证。在同样的位置打开高德地图坐标拾取器网页版开发者工具里就有拾取一个点位作为参考。然后把这个位点的CGCS2000坐标转换后得到的经纬度和拾取的经纬度做差。正常情况下差异应该在1米以内。如果你发现差值在几十米甚至几百米基本可以断定中央子午线或者带号出问题了。第三把转换后的数据加载到高德地图上看叠加效果。直接在JavaScript API里把点渲染到地图上和底图叠加看点位是否落到正确位置。比如道路中心线的点应该刚好贴合底图上的道路而不是偏到路边一半。这个方法最能直观发现系统性偏移。这里要特别提醒高德坐标拾取器拾取到的坐标本身就是GCJ-02坐标而非原始GPS经纬度所以你验证的是“转换后的GCJ-02坐标”和“高德底图上的GCJ-02坐标”是否一致验证逻辑没问题。但不要用手机上的GPS App读一个WGS84坐标来对比那样会引入转换误差干扰判断。5. 坐标转换高频踩坑记录5.1 带号没处理结果跑到隔壁省带号问题是所有坐标转换事故里最常见的一种。Y坐标八位数比如38512345.67前两位38是带号。如果你没有把38去掉就直接丢进反算公式相当于把偏了38个百万米的东坐标当成自然横坐标转换出来的经度差了大约一度多点位直接跑到隔壁省份去了。处理带号时有一个细节容易忽略去掉带号之后剩下的数字是500000加上自然横坐标所以反算公式里的y应该是去带号后的完整数比如512345.67不要把它再减去500000。高斯投影反算公式内部使用的y是加上500公里常数后的东坐标值这一点和某些GIS软件里的“中央经线offset”概念容易混淆。如果你拿到的数据Y坐标只有六位比如512345.67说明数据方已经帮你把带号去掉了。但这时候你反而要更小心因为你必须知道这个数据当时是用的哪个中央子午线做的投影否则无从反算。所以说带号不是麻烦而是带中央子午线信息的天然标签。5.2 中央子午线选错点位整体扭着走中央子午线选错是最难排查的一类错误因为点位不会完全飞掉而是整体发生某种扭曲。我曾经处理过一个客户的项目转换后的点位在高德地图上整体偏西偏差从几十米到几百米不等越往东西边缘偏差越大。最后发现是中央子午线写成了117度而实际原数据用的是120度。判断中央子午线是否正确有一个快速经验转换后在区域内找一个中央子午线附近的点如果这个点和高德底图贴合但区域东西两侧的点偏离越来越大说明中央子午线选错了。如果整批点朝一个方向平移一个常数那更可能是带号没去掉或者坐标单位理解错了。两者表现不一样排查思路也不同。这里有一个小技巧如果你不确定原数据用的是3度带还是6度带可以用两种方式各转换一个点比较哪个结果更符合目标区域的范围。比如数据点在山东经度大概115到122度如果你用带号39算3度带中央子午线117度得到的结果合理如果用6度带公式带号39中央子午线是231度明显不合理那就说明应该按3度带处理。5.3 坐标单位和位数让人懵圈坐标单位错误在CAD转GIS场景里特别容易遇到。CAD图纸里如果坐标数值很小比如X321.045Y512.345那可能是单位问题也许是米和千米的混用也许是图上坐标和实际坐标之间有一个比例因子。还有的CAD图纸在布局空间里坐标转换过图面坐标和真实投影坐标差了不止一个数量级。我建议处理CAD数据时先找两个已知点量算距离和高德地图上的实际距离对比判断坐标单位是不是米。如果不一致先统一单位再做投影转换不然算出来的经纬度完全不可用。另一种位数问题是坐标精度。有些数据在CAD里显示为整数没有小数位实际坐标可能被四舍五入到米级精度。这种数据转换后在高德地图上会有米级误差对精度要求不高的业务可接受但如果是管线测量、地块定界这种厘米级需求就得回退到原始测量数据不能用CAD图纸直接转。5.4 高德API使用和本地转换的效率问题很多人在做类似需求时第一反应是想把平面坐标发给高德API转换。这里要说一句高德官方提供的坐标转换API主要针对几种常见坐标系的经纬度互转不是给你从高斯投影平面坐标转GCJ-02用的。你还是要自己先完成高斯反算再用API做WGS84转GCJ-02。而且API有调用配额限制批量几十万条数据既慢又容易撞上配额限制。我试过直接把批量转换请求发到API上结果跑一半被限流了后面老老实实改成本地计算。本地计算的优势很明显速度快、无配额限制、数据不出内网、结果可控。GCJ-02偏移算法是确定性的没有任何随机量每次计算同一个点得到的结果完全一致这在项目交付验收时特别重要。6. 顺便聊一下高德地图瓦片和经纬度的关系6.1 瓦片行列号和GCJ-02经纬度的换算逻辑转换之后的GCJ-02经纬度要显示到高德地图上最终会进入高德的瓦片加载机制。高德地图的瓦片坐标系和互联网地图通用的Web Mercator类似但它的缩放级别编号和瓦片原点与标准XYZ方案略有区别。很多人在前端用好瓦片或者自己叠加矢量图层时会发现点位和瓦片对不上这时候往往不是投影公式的问题而是瓦片行列号计算时用了错误的经纬度。其实高德地图的瓦片地址里行列号是根据GCJ-02经纬度算出来的不是WGS84经纬度。所以如果你把WGS84经纬度直接塞进瓦片行列号公式加载出来的底图位置和你标注的点位就会有偏移。反过来说如果你先做了WGS84转GCJ-02再用GCJ-02坐标去算瓦片行列号底图和标注就能完美叠加。这也是为什么坐标转换要放在地图渲染之前而不是把原始坐标丢给前端组件处理。6.2 本地转换和前端可视化的衔接我在项目里通常的做法是后端一次性完成CGCS2000到GCJ-02的转换然后把结果以JSON或者GeoJSON格式传给前端前端直接用GCJ-02经纬度创建高德地图的Marker和Polyline。整个过程中后端只关心坐标计算前端只关心点位渲染职责清晰排查问题也方便。有些开发者喜欢在前端集成坐标转换库依赖有没有不说把转换逻辑暴露在浏览器里每次加载都要重复计算效率也不是最优。如果是静态数据强烈建议后台转一次存好如果是实时数据也建议在后端接口里统一转好前端只做展示。这样做还有一个好处前端代码里没有投影公式和椭球参数后续换地图库或者换坐标系方案只需要修改后端转换模块即可。另外要留意一下高德地图针对企业应用提供的高精度定位方案它给的坐标体系和普通GCJ-02不一样如果你接入的是这类服务坐标系处理要按对应文档来不要机械套用这里的结论。普通Web端和Mobile端的地图SDK用GCJ-02即可。最后分享一点个人经验坐标转换这种事公式背得再熟不如多做几次验证。我第一次独立处理2000坐标转高德坐标的时候自认为原理都懂了结果把带号“39”直接当成了中央子午线119度转换出来的点全部落在东海里。后来养成了习惯无论代码跑得多顺第一步永远先找一个已知坐标点做单点验证确认无误后再批量跑。还有一个小技巧批量转换后我会随机抽几个点位导入高德地图的JS API的样例页面里叠到卫星底图上看点位是否落在合理位置。例如耕地边界点应该落在田块内管线点应该落在道路上。这个方法虽然土但对交付来说最直观比看任何技术报告都有说服力。这套方案我目前还在配合一套自动化的坐标预处理脚本用输入原坐标文件输出高德坐标文件顺带把带号、中央子午线判断结果记录下来方便溯源。坐标转换确实麻烦但把流程标准化之后基本半小时就能处理完一批数据后面再遇到类似项目直接复用就行。希望这篇文章能帮你少走一些弯路。
返回列表