最近在用AngularJS+ECharts作圖表,要用到鎮街一級的當地地圖,無奈ECharts只能提供到市一級(demo裏有一個能顯示到縣/區一級,here),故要用到ECharts的擴展地圖功能。 html
擴展方法官方doc說得很明白了,here; shell
PS:官方doc裏只提供了jQuery的寫法,我這裏補充一個angularJS的寫法: json
jQuery(官網寫法): echarts
$.getJSON('geoJson/USA_geo.json', callback);
$http.get('geoJson/USA_geo.json', function(data){ callback(data);// 其實就是把獲取到的geoJSON傳入callback函數 });
但我手頭上只有shp的地圖格式,而ECharts要用到geoJSON格式。百度google一番後,大體有以下兩種方法: 函數
一、用工具轉換,例如GDAL的ogr2ogr,下載地址:here; 工具
二、在線轉換,地址以下: 網站
先說一下背景: google
個人shp文件的地理座標是GCS_WGS1984,投影座標系是WGS_1984_UTM_Zone_49N(Transverse_Mercator)。 編碼
ogr2ogr: spa
完整命令以下(Mac版,其餘版本估計差別不大):
/Library/Frameworks/GDAL.framework/Programs/ogr2ogr -f "geoJSON" -t_srs "WGS84" -s_srs "+proj=utm +zone=49 +datum=WGS84 +units=m +no_defs" "area.json" "area.shp"
重點是-s_srs的參數;
ogre.adc4gis.com:
一、按網站上的說明,把.shp,.dbf,.shx,.prj(可選)打包成zip;
二、在Convert to GeoJSON框裏選擇剛纔打包的zip包;
三、在Target SRS裏輸入「WGS84」(關鍵步驟);
四、點擊「CONVERT TO GEOJSON」按鈕,而後就會生成相應的geoJSON;
converter.mygeodata.eu
一、同上,將shp、dbf等打包成zip包並上傳提交;
二、上傳成功後,理論上能在地圖裏預覽你的shp文件對應的區域;
三、在Target vector format選項框裏,選擇GeoJSON(.json);
四、在Output coordinate system選項框裏,選擇WGS 84(關鍵步驟);
五、點擊Convert now!;
adc4gis功能比較基本,mygeodata功能比較豐富(支持Vecotr data的編輯),你們各取所需吧。
不知道是否是編碼方式沒選對,我在兩個網站轉換出來的geoJSON中的中文都是亂碼,不過個人字段也很少,手動改也不是很麻煩(但後來用ogr2ogr轉換出來的就沒問題)。
其實這三種方法的關鍵一步都是要把輸出的座標系統設置爲WGS 84,其餘都比較好理解。
最後:
因爲本人對GIS不是很熟悉,光是google以上東西這些就花了我半天的時間了,在這裏mark一下,但願有須要的人能少走彎路,畢竟大部分都不須要研究GIS,而只是單純的想要個geoJSON文件而已(新版本的arcGIS的arcToolbox好像有轉換成geoJSON的工具)。