Parsing OpenLayers:解析GPX文件,读取';ele';标记并计算获得的高度

Parsing OpenLayers:解析GPX文件,读取';ele';标记并计算获得的高度,parsing,height,openlayers,gpx,Parsing,Height,Openlayers,Gpx,“OpenLayers方法没有很好的文档记录”,有人说,这就是为什么我无法理解如何读取gpx文件中的“ele”数据,求和,并显示获得的高度 我有一张地图,上面有两个gpx图层,显示运行轨迹,还有一个div显示运行的长度,以及打开和关闭图层的控件。这里有一层: var lgpx = new OpenLayers.Layer.Vector("wed training fast", { strategies: [new OpenLayers.Strategy.Fixed()], protocol: n

“OpenLayers方法没有很好的文档记录”,有人说,这就是为什么我无法理解如何读取gpx文件中的“ele”数据,求和,并显示获得的高度

我有一张地图,上面有两个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)";
});
var lgpx=newopenlayers.Layer.Vector(“wed training fast”{
策略:[新建OpenLayers.Strategy.Fixed()],
协议:新OpenLayers.protocol.HTTP({
url:“../gpx/27-Mar-13fast.gpx”,
格式:new OpenLayers.format.GPX({
extractWaypoints:true,extractRoutes:true,
extractAttributes:true})
}),
样式映射:gpxStyles,
投影:新OpenLayers.投影(“EPSG:4326”)
});
map.addLayer(lgpx)//快速的
bounds=新的OpenLayers.bounds();
//将快速层适配到窗口边界,并添加开始、结束销
寄存器(“loadend”,lgpx,function(){
//将图层范围添加到边界
bounds=this.getDataExtent();
//添加起始点标记
var startPoint=this.features[0]。geometry.components[0];
layerMarkers.addMarker(新的OpenLayers.Marker
(新的OpenLayers.LonLat(startPoint.x,startPoint.y),iconfast);
//添加端点标记
var endPoint=this.features[0].geometry.components
[this.features[0].geometry.components.length-1];
layerMarkers.addMarker(新的OpenLayers.Marker
(新的OpenLayers.LonLat(endPoint.x,endPoint.y),iconfast2);
//计算迹线长度
var len=this.features[0].geometry.getGeodesicLength
(新OpenLayers.Projection(“EPSG:900913”)/1000+“k”;
(数学四舍五入(值*100)/100)。toFixed(2);
var kms=+(parseFloat(len).toFixed(2));
var m=+(parseFloat(kms*0.621371).toFixed(2));
//将结果写入页面
document.getElementById(“fastbox”).innerHTML=
“快速运行&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;
“+m+”英里“+”(“+kms+”k)”;
});

对于OpenLayers 2,我无法判断。 但是对于OpenLayers 3,可以有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)}

phew,我不得不说我也讨厌OpenLayers文档,尽管我喜欢这个框架,而且我没有一个GPX文件来尝试它。我会用萤火虫检查它。根据(给你一个方向),我会考虑查找LGPX.Gealth.GETVICES()并重复遍历数组。它应该给你的高度从gpx文件的每一个点给我一般的指针是没有好处的!如果我能写代码,我就可以从API派生代码。我可以看出,我应该遍历一个数组,并大概对标记之间的连续差异求和。但我不会写代码。我在谷歌上搜索到脸色发青,找不到任何例子。getLength非常简单,但是没有相应的方法来获取高度。