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了。即编码转换完毕。