工程中經常用到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的朋友應該都知道,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,會遇到文章開頭中的問題,即編碼混亂,中文亂碼。
前文已經大體說過了亂碼的原因,即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了。即編碼轉換完畢。