zoukankan      html  css  js  c++  java
  • 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提示经纬度异常。

    那么怎么才能正常显示呢?这里我们分两步来讲解。

    1. 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,会遇到文章开头中的问题,即编码混乱,中文乱码。

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

  • 相关阅读:
    瑜伽
    尼姆博弈(Nimm's Game)
    asp.net 自定义控件之ItemTemplate
    Tab控件css样式布局
    css 左右布局一例
    C# HotKey 的另一种方法
    asp.net 自定义tab控件实现
    c# console 程序实现 hot key
    c# console 在非主线程Hot Key
    记录一次sql 更新出现的 “出现不支持的SQL92 标记 :126” 错误
  • 原文地址:https://www.cnblogs.com/tuxingis/p/13181830.html
Copyright © 2011-2022 走看看