ArcGIS API For Javascript :讀取 CSV 文件的方法


 

我們臨時會遇到一些測試數據,通常從數據庫中以 CSV 格式導出。最簡單實用的方法就是使用 ajax 去讀取文件,記得引入 jQuery 。

 

例如,在《ArcGIS JS API :新增一個熱力圖層的方法》中我們已經生成了名為“heatmapfeatureLayer_1”的圖層,這時我們有若干個包含坐標信息的 CSV 文件,想要使用這些數據生成熱力圖。

 

方法一

數據准備

我們假設拿到的 CSV 數據有名稱、經度、緯度和個數四個字段。

 

海洋生物保護協會 110.3406 20.07484 93
塞維陽光管理處 110.3426 20.06408 7
天潤工程檢測中心 110.3471 20.07359 35
白沙門社區居民委員會 110.33 20.07125 30
白沙社區居委會 110.3274 20.07546 89
紅島邊防派出所白沙門警務室 110.3318 20.07212 57
紅島邊防派出所 110.3341 20.07128 59
中共白沙門社區支部委員會 110.3297 20.07029 64
民生管道燃氣有限公司公用管道檢驗中心 110.3366 20.06883 42

定義函數

我們來寫一個函數實現,為了讓函數有更好的伸縮性,我們將 CSV 路徑與圖層名稱作為參數。函數如下:

function AddPoint2heatLayer(n,l){
        eval(l).graphics=[];//這一步是先清空當前圖層的所有幾何要素
        $.ajax({
        url: n,
        datatype: "json",
        async: false,
        data: {},
        success: function(data) {
            var dataStr = new String(data);
            var lines = dataStr.split('\n');
            var result = new Array();
            for(var i=1, il=lines.length; i<il; i++){
                var item = lines[i].split(',');
                result[i-1] = {};
                result[i-1].lng = Number(item[1]);// CSV 中第二列:經度
                result[i-1].lat = Number(item[2]);// CSV 中第三列:緯度
                result[i-1].num = item[3];// CSV 中第四列:數量
            }
            //csv 已轉為 json
            //循環每個坐標對,並將其寫入圖層中
            for (var i = 0; i < result.length; i++) {
                var x = result[i].lng;
                var y = result[i].lat;
                var point = new esri.geometry.Point(x, y, new esri.SpatialReference({wkid: 4326}));
                eval(l).add(new esri.Graphic(point));
                eval(l).graphics[i].attributes = {};
                eval(l).graphics[i].attributes.num = result[i].num;
            }
            }});
}

其中參數 n 為 CSV 路徑,例如:"test.csv",參數 l 為圖層名稱,例如“heatmapfeatureLayer_1”。

調用函數

當我們多次使用時,即可這樣調用:

AddPoint2heatLayer("net/heatmap.csv","heatmapfeatureLayer_1");

 

其實這么寫的原因是,后期很可能會使用多時段的數據來做動態熱力圖,讀取數據也會直接通過后台接口來實現,屆時只需要修改函數中數據封裝的部分即可。

 

方法二

引入類

在 require 中引入:

"esri/layers/CSVLayer",
"esri/renderers/SimpleRenderer",
"esri/symbols/SimpleMarkerSymbol",
"esri/Color",

在 function 中加入相應的:

CSVLayer, SimpleRenderer, SimpleMarkerSymbol, Color

調用函數

var csv = new esri.layers.CSVLayer("test.csv");
var orangeRed = new esri.Color([0, 255, 100, 0.8]); 
var marker = new esri.symbol.SimpleMarkerSymbol("solid", 12, null, orangeRed);
var renderer = new esri.renderer.SimpleRenderer(marker);
csv.setRenderer(renderer);
map.addLayer(csv);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM