根据其他值(例如高度,速度,


13

我想在Leaflet地图上绘制GPX轨道。折线不应该只有一种颜色,但我想显示某些值,例如海拔,速度,心率,温度,节奏,坡度用颜色编码。当然,一次只能看到一个值。

这些值将与L.LatLng(例如)存储在一个meta: {ele: 298, hr: 155}对象中。

我是Leaflet的新手,尤其关注寻找一种有效的方法来完成此任务。首先想到的是创建数百或数千条折线,每种折线都具有特殊的颜色。但这听起来对内存和cpu非常贪婪。

有任何想法吗?

我的意思是一个例子,可以在这里查看MyTourbook屏幕截图


您能提供一个样本文件吗?这样,可能会更容易帮助。
ustroetz 2014年

Answers:


7

使用QGIS将您的GPX轨道转换为GeoJSON。

假设您的GeoJSON看起来像这样。GeoJSON具有elevation带有高程值的属性。

        var yourGeoJSON = [ 
{ "type": "Feature", "properties": { "id": 2, "elevation": 50 }, "geometry": { "type": "LineString", "coordinates": [ [ 11.836395263671875, 47.75317468890147 ], [ 11.865234375, 47.73193447949174 ] ] } },
{ "type": "Feature", "properties": { "id": 1, "elevation": 750 }, "geometry": { "type": "LineString", "coordinates": [ [ 11.865234375,47.73193447949174 ], [ 11.881027221679688, 47.700520033704954 ] ] } },
{ "type": "Feature", "properties": { "id": 0, "elevation": 1700 }, "geometry": { "type": "LineString", "coordinates": [ [ 11.881027221679688, 47.700520033704954 ], [ 11.923599243164062, 47.706527200903395 ] ] } },
{ "type": "Feature", "properties": { "id": 0, "elevation": 3000 }, "geometry": { "type": "LineString", "coordinates": [ [ 11.923599243164062, 47.706527200903395 ], [ 11.881027221679688, 47.700520033704954 ], ] } }
];


将具有以下代码的GeoJSON添加到传单地图中。使用函数设置文件样式。该"color"元素调用函数get color,并传递对elevation您的功能作为参数的值。

L.geoJson(yourGeoJSON, {
    style: function (feature) {
        return {
         "color": getColor(feature.properties.elevation),
         "opacity": 1,
        }}
}).addTo(map);

该函数getColor根据高程值返回颜色。

function getColor(x) {
  return x < 500     ?    '#bd0026':
         x < 1000     ?   '#f03b20':
         x < 1500     ?   '#fd8d3c':
         x < 2000     ?   '#fecc5c':
                          '#ffffb2' ;
};

我使用示例GeoJSON和上述功能制作了JSFiddle:http : //jsfiddle.net/2VY5z/1/


1
谢谢,这是一个可能的解决方案。我摆弄了一下jsfiddle.net/2VY5z/3,发现在内部会为每个功能创建一个图层。如果GPX轨道较长,我想这可能会让人不知所措。因此,我将等待几个小时以获得更好的答案,直到您获得“正确”的标记。
hgoebl 2014年

1
我同意@hgoebl的观点,将一个源功能细分为上千个小块似乎在性能方面并不好。我认为我们需要一个特殊的类,该类派生自具有上述功能的L.Path。也许有人已经做到了?;)
unibasil 2014年

我目前正在开发Layer插件,该插件效率更高。但是恐怕我必须至少创建<path>与颜色切换一样多的元素。可悲的是,没有办法改变路径的颜色:M184 398L187 395C#00FF00 L183 399这是必要的(C =颜色)。
hgoebl 2014年

7

我为Leaflet创建了一个小插件:Leaflet.MultiOptionsPolyline

这是演示页面的屏幕截图:

演示页中的示例

当前它缺少文档,但是演示页面链接到源代码,这应该是不言而喻的。

欢迎您提供反馈(在GitHub上创建问题或在没有GitHub帐户的情况下对此答案发表评论)。


2

看起来这是旧线程,但希望有人能找到帮助。

一个Leaflet插件,用于沿折线绘制彩色渐变。 https://github.com/iosphere/Leaflet.hotline/ 演示


1
它似乎确实有帮助,但是作为一般规则,答案不仅应包含链接。即使您所做的只是总结链接另一端的内容,其他用户也应该能够理解该解决方案以及其解决方案足以解决原始问题的原因,而无需该用户离开此页面。
JoshC

@JoshC,非常感谢,如果您考虑到图像说明了很多问题,希望它对更新后的内容
有所帮助
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.