CAD转KML乱码处理
工程中经常用到CAD转KML的情况。但是有时候转换的KML文件在Google Earth内会乱码:
而在LSV内会出现坐标错误的提示:
注:KMZ格式是压缩的KML,即对KMZ格式用解压软件解压,即可得到KML文件。
那么这个问题是怎么回事呢?
其实原因很简单,核心是KML文件采用的UTF-8编码,但是CAD中的中文用的是ANSI编码,那么用Global mapper加载CAD并输出为KML的时候,会在UTF-8编码的KML文件内装入ANSI编码的内容,那么中文就会乱码,进而在GE内加载显示乱码,LSV提示经纬度异常。
那么怎么才能正常显示呢?这里我们分两步来讲解。
- CAD转KML
首先来说明CAD文件如何转换成KML。
使用CAD的朋友应该都知道,CAD图纸是投影后的平面图,因此CAD图,如果是面向地理信息的,那么一定有图层投影和坐标系。利用投影和坐标系,就可以查出对应的EPSG编号。比如,我们假设有张图是西安80坐标系,高斯3度带,中央经线是102°,那么怎么知道这个图的EPSG编号呢?
很简单,首先打开网站:http://www.spatialreference.org/ref/epsg/
然后在搜索框输入Xian:
这个就是对应的西安80的EPSG编号,继续在这里面找高斯3度带中央经线102°。发现这一页没有,点击Next page,切换到下一页:
好了,这样就找到这了这个CAD图对应的EPSG编号:2379。
下面演示中,使用的图坐标系投影为:UTM投影,代号-36(即36S)。
我们按上述方法搜索得到EPSG编号:
好了,直接用GM打开CAD文件,GM会提示CAD没有投影,请配置:
点击确定按钮,接着点击从EPSG初始化:
输入:21036。
点击确定,CAD文件即正常加载:
然后在GM内,挂载卫星影像图,检查是否匹配:
检查确定是匹配的。如果遇到不匹配的,有几十至几百米误差的,可以在GM的图层管理器,对CAD图层,右键,平移,移动到对应的位置即可。
确认完毕后,在GM内,点击菜单:文件》输出》输出矢量/激光雷达格式:
找到KML/KMZ格式:
按下图配置后,点击确定即可:
至此,我们已经完成了CAD转KML的过程。但是这会输出的CAD,会遇到文章开头中的问题,即编码混乱,中文乱码。
- KML文件编码转换
前文已经大体说过了乱码的原因,即UTF-8编码的文件装入的是ANSI编码的内容导致的,那么怎么处理乱码文件,能够修复为正常文件呢?
其实也简单,问题根源已经知道了,那么处理起来就会很容易。做一次编码转换,就可以搞定。操作起来也很简单。需要一个工具,即Notepad++。
首先,我们用Notepad++打开KML文件(KMZ文件要先解压缩得到KML):
这里看不到有什么问题,实际的问题就是里面的中文部分乱码:
这些CDATA后面的内容,就是中文乱码。也就是导致GE加载显示乱码,LSV加载提示错误的原因。
点击:格式》以ANSI格式编码:
这时候中文就能恢复正常了:
但是当前情况下,直接Ctrl+S保存,是没有用的。因为当前修改的是显示,而不是文件本身编码。
下来用键盘快捷键:Ctrl+A,全选整个文档,然后Ctrl+C复制整个文档的内容。
继续点击:格式》以UTF-8无BOM格式编码,这会中文会显示乱码,但是不用管。
切换回UTF-8编码后,按键盘快捷键:Ctrl+A,全选KML文档内容,然后按下Del键,删除文档内容。
清空后,按Ctrl+V粘贴之前复制的内容,等等粘贴完毕,因为大文档纯文本写入是比较慢的,稍等一小会。
粘贴完毕后,按Ctrl+S,保存文档。
至此,编码转换的全过程完毕。我们用GE打开看看,是否还有乱码:
好了,GE打开,中文已经没有乱码了。
再看看LSV打开该转换的KML的效果:
好了,LSV也能正常打开之前无法打开的KML了。即编码转换完毕。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性