Daha çox

Vərəqə: Tək bir GeoJSON FeatureCollection -dan dəyişdirilə bilən örtüklər necə yaradılır?

Vərəqə: Tək bir GeoJSON FeatureCollection -dan dəyişdirilə bilən örtüklər necə yaradılır?


Mən Leaflet/Mapbox -a yeni başlamışam və sadə bir xəritə yarada və GeoJSON FeatureCollection -dan bütün nöqtələri qura bilərəm, ancaq adı olan bir mülkə əsaslanaraq müəyyən nöqtələri dəyişdirmək qabiliyyətini necə əlavə edəcəyimi bilmirəm.kateqoriya.

Nəzarətimdəki bütün kateqoriyaların təbəqələrini necə sıralayardım və istifadəçiyə BÜTÜN nöqtələri göstərən əsas qatı, eləcə də müxtəlif təbəqələri açmaq/söndürmək imkanı verərdim? Demo FIDDLE burada

GeoJSON FeatureCollection -da 3 nümunə kateqoriyalı nümunə xəritəm:

var collection = [{"type": "FeatureCollection", "features": [{"type": "Feature", "properties": {"category": "Aviation", "Name": "No Plant 1"}) , "həndəsə": {"tip": "Nöqta", "koordinatlar": [81.73828125,62.59334083012024]}}, {"tip": "Xüsusiyyət", "xassələr": {"kateqoriya": "Elektrik", "Ad" ":" 2 nömrəli bitki "}," həndəsə ": {" növ ":" nöqtə "," koordinatlar ": [94.5703125,58.722598828043374]}}, {" tip ":" xüsusiyyət "," xassələr ": {" kateqoriyası ":" Hərbi "," Ad ":" Baza 1 "}," həndəsə ": {" tip ":" Nöqta "," koordinatlar ": [104.4140625,62.91523303947614]}}}}]];

Kod:

var myStyle = {radius: 10, fillOpacity: 1, stroke: false, weight: 1, opacity: 1, fill: true, tıklanabilir: doğru}; var allPoints = L.geoJson (toplama, {pointToLayer: funksiya (xüsusiyyət, latlng) {qayıt L.circleMarker (latlng, myStyle);}, stil: funksiya (xüsusiyyət) {keçid (xüsusiyyət.properties.category) {hal 'Aviasiya ': qayıt {rəng: "qara"}; hal "Elecrtical": qayıt {color: "blue"}; case' Military ': return {color: "red"};}}, onEachFeature: function (xüsusiyyət, qat) {qat.bindPopup (xüsusiyyət.properties.Name);}}); var basemapsObj = {'əsas': L.mapbox.tileLayer ('mapbox.light'), 'peyk': L.mapbox.tileLayer ('mapbox.satellite-lunch')}; var overlaysObj = {'Bütün nöqtələr': allPoints.addTo (xəritə)} L.control.layers (basemapsObj, overlaysObj, {çökmüş: yalan}). addTo (xəritə);

Ən asan hiylə, "master" Layer Qrupunuzu yaratmaq və digər bütün kateqoriya Layer Qruplarını ona əlavə etməkdir. Əlbəttə ki, bu ustanı Layers Control -un bindirmələr siyahısına əlavə edə bilərsiniz ki, siyahıda olsun və istifadəçinin onu açıb -söndürməsini təsdiqləsin. Problem ondadır ki, istifadəçi ayrı-ayrı kateqoriyalara keçdikdə bu onay qutusu sinxronizasiyadan çıxacaq.

Daha mürəkkəb bir hiylə, master Layer Groupunuzu boş saxlamaq və xəritəni dinləyərək bütün digər kateqoriyalı Layer Qruplarının əlavə / çıxarılmasını təqlid etməkdir. üst qatüst -üstə silməkhadisələr və kateqoriyaların əl ilə əlavə edilməsi / silinməsi.

Bu 2 -ci üsulla, ayrı -ayrı kateqoriyalar üçün üst -üstə düşmə və üst -üstə silmə və hamısı əlavə edildikdə ustanı əlavə etmək və ya ən azı bir kateqoriya olmadıqda ustanı silməklə əsas qat onay qutusuna düzəliş həyata keçirə bilərsiniz.

Demo: https://jsfiddle.net/qkvo7hav/7/

Qeyd: nədənsə, Layers Control -un Mapbox versiyası, Nəzarətdən kənarda təbəqələr əlavə edildikdə / silindikdə onay qutularını sinxron vəziyyətdə saxlamır. Zəng edərək yenidən sinxronizasiya etməsini tələb edə bilərikmyControl._update ().


Videoya baxın: Geojson in gvSIG