2013-03-28 25 views
0

「OpenLayers方法沒有特別好記錄」有人說,這就是爲什麼我無法理解如何讀取gpx中的'ele'數據文件,總結它,並顯示獲得的高度。OpenLayers:解析GPX文件,讀取'ele'標籤並計算獲得的高度

我有一個帶有2個gpx圖層的地圖,顯示了運行軌跡,其中一個div顯示了運行和控件的開關長度。下面是一層:

var lgpx = new OpenLayers.Layer.Vector("wed training fast", { 
strategies: [new OpenLayers.Strategy.Fixed()], 
protocol: new OpenLayers.Protocol.HTTP({ 
    url: "../gpx/27-Mar-13fast.gpx", 
    format: new OpenLayers.Format.GPX({ 
    extractWaypoints: true, extractRoutes: true, 
    extractAttributes: true}) 
}), 
styleMap: gpxStyles, 
projection: new OpenLayers.Projection("EPSG:4326") 
}); 

map.addLayer(lgpx); //fast 
bounds = new OpenLayers.Bounds(); 

// fit fast layer to bounds of window and add start, finish pins 
lgpx.events.register("loadend", lgpx, function() { 
//add extent of layer to bounds 
    bounds = this.getDataExtent(); 
//add startpoint marker 
    var startPoint = this.features[0].geometry.components[0];    
    layerMarkers.addMarker(new OpenLayers.Marker 
     (new OpenLayers.LonLat(startPoint.x, startPoint.y),iconfast)); 
//add endpoint marker   
    var endPoint=this.features[0].geometry.components 
     [this.features[0].geometry.components.length-1]; 
    layerMarkers.addMarker(new OpenLayers.Marker 
     (new OpenLayers.LonLat(endPoint.x, endPoint.y),iconfast2)); 
//calculate length of trace 
    var len = this.features[0].geometry.getGeodesicLength 
     (new OpenLayers.Projection("EPSG:900913"))/1000 + " k"; 
    (Math.round(value*100)/100).toFixed(2); 
    var kms = +(parseFloat(len).toFixed(2)); 
    var m = +(parseFloat(kms*0.621371).toFixed(2)); 
//write the result to the page  
    document.getElementById("fastbox").innerHTML= 
    "Fast run &nbsp;&nbsp;&nbsp;<strong>&mdash;&mdash;&mdash;&mdash;&mdash;&mdash; 
     </strong>&nbsp;&nbsp;" + m +" miles" +"&nbsp;&nbsp;(" +kms + "k)"; 
}); 
+0

唷在幾秒鐘的時間,我必須說,我也很討厭的OpenLayers文檔,雖然我愛的框架,我沒有GPX文件試試看。我會用螢火蟲檢查它。根據http://dev.openlayers.org/docs/files/OpenLayers/Format/GPX-js.html(給你一個方向),我會考慮尋找lgpx.geometry.getVertices()並遍歷數組。它應該給你從gpx文件的每個點的高度 –

+0

給我一般指針是沒有好處的!如果我可以編寫代碼,我可以從API中派生出代碼。我可以看到我應該遍歷一個數組,並且大概總結了標籤之間的連續差異。但我不能寫代碼。我一直搜索,直到我臉上發青,我找不到任何例子。 getLength非常簡單,但沒有相應的方法來獲得高度。 –

回答

0

我不能告訴了的OpenLayers 2. 但對於3的OpenLayers,你可以有3個或4維座標,其中包括一個時間測量。你可以用下面的方法檢查:

> feature.getGeometry().getLayout() 
"XYZM" 

如果是這樣的話,只需勾選'M'即可。

> feature.getGeometry().getCoordinates()[3] 
991452420 

這就是自1970年以來

> d=new Date(); d.setTime(991452420*1000); d 
Date {Sat Jun 02 2001 05:27:00 GMT+0200 (CEST)}