Daha çox

GeoJSON qatını yükləndikdən sonra süzün


Əvvəlcə bir geoJSON qatını elan edirəm və tərif edirəm:

var layer1 = L.geoJson (null, {onEachFeature: function (feature, layer) {…}});

... və sonra bir CSV yükləyin, məsələn:

omnivore.csv ('pbstatus.csv', null, layer1) .on ('hazır', function (e) {…});

İndi alt coğrafi olaraq digər geoJSON qatlarını yaratmaq istəyirəmqat1təbəqənin xüsusiyyətinə yüklənmiş CSV sütunlarından birinin dəyərinə əsaslanır.properties verilənlər bazası. Süzməyin bir yolu varmı?qat1Təyin edildikdən və yükləndikdən sonra? Qatı təyin edərkən süzgəcin 'düzgün' üsulundan xəbərdaram:

var layer1 = L.geoJson (null, {onEachFeature: function (feature, layer) {…}, filter: function (feature, layer) {return (feature.properties.foo == 'bar');}});

… Amma hər dəfə təkrarən fərqli bir bəyannamə etmək istəmirəm. Və CSV-dəki məlumatlar hansı qatların və neçəsinin qurulacağına qərar verəcəkdir; CSV-ni idxal etməzdən əvvəl bütün mümkün filtr şərtlərini bilmirik. Bunun alt qrupları olaraq yeni təbəqələr yaratmağın bir yolu varmı?qat1geoJSON məlumatları ilə yükləndikdən sonra? Yeni təbəqələr qurulmuş xüsusiyyətləri, hərəkətləri və davranışları da miras alacaqmı?qat1'sonEachFeature:funksiyası?


yenə bununla qarşılaşdım və cavab tapdığımı yeniləmədiyimi başa düşdüm.

Əvvəlcədən boş təbəqələr başlatdım:

var statusComplete = L.layerGroup (). addTo (xəritə); layerControl.addOverlay (statusComplete, 'Tamam'); var statusProgress = L.layerGroup (). addTo (xəritə); layerControl.addOverlay (statusProgress, 'İş davam edir'); var statusUnfinished = L.layerGroup (). addTo (xəritə); layerControl.addOverlay (statusUnfinished, 'Left Unfinished'); var statusNotstarted = L.layerGroup (). addTo (xəritə); layerControl.addOverlay (statusNotstarted, 'İş Başlamadı'); var statusUnsure = L.layerGroup (). addTo (xəritə); layerControl.addOverlay (statusUnsure, 'Əmin deyil');

OnEachFeature funksiyasının içərisində əlavə etdimqat.addTo ()ifadələr.

var statusLayer = L.geoJson (null, {onEachFeature: function (feature, layer) {… var statusCheck = feature.properties ['Real Status']. toLowerCase (); if (statusCheck == 'complete') layer.addTo ( statusComplete); başqa halda (statusCheck == 'iş gedir') qat.addTo (statusProgress); başqa halda (statusCheck == 'yarımçıq qaldı') qat.addTo (statusUnfinished); başqa halda (statusCheck == 'iş başlamadı ') layer.addTo (statusNotstarted); else layer.addTo (statusUnsure);}

Digər təbəqələrə əlavə olunan xüsusiyyətlər, bu "ana" qatında onlar üçün müəyyənləşdirdiyim hər şeyi həyata keçirdi: marker nişanları, popuplar, ipucu. Bu faydalı idi; Beş fərqli təbəqə üçün eyni kod sətirlərini təkrarlamaq məcburiyyətində qalmadım.

CSV-nin özü yüklənsə də (vasitəsiləhər yerdə) "ana" təbəqəsinə, əslində heç birinə əlavə etməmişəmxəritəvə yalayerControl. Yeni təbəqələr görünməz qaldıstatus Tamamlanmış, status Tərəqqi, status Bitməmiş, status Başlanmamış, status Əminxəritəyə əlavə edildi.

Tam kodu burada görə bilərsiniz.

PS: Uşaq qatlarını niyə başlatdığımdan həqiqətən əmin deyiləmL.layerGroup ()və onları necə başlatacağınıza əmin deyiləm.