Rakım, hız,


13

Bir broşür haritasında GPX izi çizmek istiyorum. Çoklu çizginin yalnızca bir rengi olmamalıdır, ancak rakım, hız, kalp atış hızı, sıcaklık, kadans, eğim renk kodlu gibi belirli değerleri göstermek istiyorum. Elbette aynı anda yalnızca bir değer görüntülenebilir.

Değerler L.LatLng, örneğin bir meta: {ele: 298, hr: 155}nesnede birlikte depolanır .

Leaflet'te yeniyim ve özellikle bunu yapmanın etkili bir yolunu bulmakla ilgileniyorum. İlk akla gelen, her biri özel bir renkle yüzlerce veya binlerce çoklu çizgi oluşturmaktı. Ancak bu bellek ve işlemci açısından çok açgözlü geliyor.

Herhangi bir fikir?

Demek istediğim bir örnek burada görülebilirMyTourbook ekran görüntüsü


Lütfen örnek bir dosya sağlayabilir misiniz? Bu şekilde yardım etmek daha kolay olabilir.
Mart'ta

Yanıtlar:


7

GPX parçanızı QGIS ile bir GeoJSON'a dönüştürün.

Diyelim ki GeoJSON'unuz böyle görünüyor. GeoJSON, elevationyükseklik değeri olan bir özniteliğe sahiptir.

        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'unuzu aşağıdaki kodla birlikte broşür haritanıza ekleyin. Dosyanıza stil eklemek için bir işlev kullanın. "color"Elemanı işlevini çağırır get colorve geçer elevationparametre olarak özelliğin değeri.

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

İşlev getColor, yükseklik değerine göre rengi döndürür.

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

Örnek GeoJSON ve yukarıda açıklanan fonksiyonları ile bir JSFiddle yaptım: http://jsfiddle.net/2VY5z/1/


1
Teşekkürler, bu olası bir çözüm. Biraz jsfiddle.net/2VY5z/3 oynadım ve dahili olarak her özellik için bir katman olacağını gözlemledim. Uzun GPX parkurlarında, bunun oldukça zor olabileceğini düşünüyorum. Bu yüzden siz "doğru" işaretini alana kadar daha iyi bir cevap için birkaç saat bekleyeceğim.
hgoebl

1
@Hgoebl ile hemfikirim, bir kaynak özelliği binlerce küçük parçaya bölmek performans açısından iyi görünmüyor. Sanırım, yukarıda bahsedilen işlevselliğe sahip L.Path'ten türetilen özel bir sınıfa ihtiyacımız var. Belki birisi zaten yapmıştı? ;)
unibasil

Şu anda biraz daha verimli bir Katman eklentisi geliştiriyorum. Ama korkarım en az sayıda <path>renk değiştirdiğim kadar eleman oluşturmak zorundayım . Maalesef bir yoldaki rengi değiştirmenin bir yolu yoktur: M184 398L187 395C#00FF00 L183 399bunun için gerekli olacaktır (C = renk).
hgoebl

7

Leaflet: Leaflet.MultiOptionsPolyline için küçük bir eklenti oluşturdum .

Demo sayfasından bir ekran görüntüsü :

demo sayfasından örnek

Şu anda dokümantasyon yok, ancak demo sayfası oldukça açıklayıcı olması gereken kaynak koduna bağlanıyor.

Geri bildiriminiz hoş geldiniz (GitHub'da bir sorun oluşturun veya GitHub hesabınız yoksa bu yanıtı yorumlayın).


2

Bu eski iş parçacığı gibi görünüyor, ama umarım birisi bunu yararlı bulur.

Çoklu çizgiler boyunca renkli gradyanlar çizmek için bir broşür eklentisi. https://github.com/iosphere/Leaflet.hotline/ gösteri


1
Yararlı gibi görünüyor, ancak genel bir kural olarak, bir cevap sadece bir bağlantıdan daha fazlasını içermelidir. Yaptığın her bağlantının diğer tarafta ne bir özetini vermek olsa bile, başka bir kullanıcı bu çözüm nedir ve neden yeterince özgün soru adresleri anlamak gerekir olmadan bu sayfadan ayrılmak zorunda söyledi kullanıcı.
JoshC

@JoshC, teşekkürler, umarım bu görüntü çok açıklayan bir hesap alırsanız güncelleme sonrası anlaşılır bir açıklama
Dzmitry Atkayey
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.