أكثر

الكتيب: كيف تصنع تراكبات قابلة للتبديل من مجموعة ميزات GeoJSON واحدة؟

الكتيب: كيف تصنع تراكبات قابلة للتبديل من مجموعة ميزات GeoJSON واحدة؟


أنا مبتدئ في Leaflet / Mapbox ويمكنني إنشاء خريطة بسيطة ورسم جميع النقاط من مجموعة ميزات GeoJSON ، لكني لست متأكدًا من كيفية إضافة القدرة على التبديل (عبر مربعات الاختيار) إلى نقاط محددة بناءً على خاصية مسماةالفئة.

كيف يمكنني سرد ​​جميع طبقات الفئات الموجودة في سيطرتي ومنح المستخدم القدرة على التبديل بين تشغيل / إيقاف الطبقات المختلفة ، بالإضافة إلى الطبقة الرئيسية الرئيسية التي تعرض جميع النقاط؟ عرض FIDDLE هنا

إليك مثال الخريطة الخاصة بي مع 3 فئات من الأمثلة في مجموعة ميزات GeoJSON:

var collection = [{"type": "FeatureCollection"، "features": [{"type": "Feature"، "properties": {"category": "Aviation"، "Name": "Plant No 1"} ، "الهندسة": {"النوع": "النقطة" ، "الإحداثيات": [81.73828125،62.59334083012024]}} ، {"النوع": "الميزة" ، "الخصائص": {"الفئة": "كهربائي" ، "الاسم ":" Plant No 2 "}،" geometry ": {" type ":" Point "،" Coordinates ": [94.5703125،58.722598828043374]}}، {" type ":" Feature "،" properties ": {" category ":" العسكرية "،" الاسم ":" القاعدة 1 "} ،" الهندسة ": {" النوع ":" النقطة "،" الإحداثيات ": [104.4140625،62.91523303947614]}}] ؛

الرمز:

var myStyle = {radius: 10، fillOpacity: 1، stroke: false، weight: 1، opacity: 1، fill: true، clickable: true}؛ var allPoints = L.geoJson (collection، {pointToLayer: function (feature، latlng) {return L.circleMarker (latlng، myStyle)؛}، style: function (feature) {switch (feature.properties.category) {case 'Aviation ': return {color: "black"}؛ case' Elecrtical ': return {color: "blue"}؛ case' Military ': return {color: "red"}؛}}، onEachFeature: function (feature، layer) {layer.bindPopup (feature.properties.Name) ؛}}) ؛ var basemapsObj = {'basic': L.mapbox.tileLayer ('mapbox.light')، 'satellite': L.mapbox.tileLayer ('mapbox.satellite-بعد الظهر')} ؛ var OveraysObj = {'All Points': allPoints.addTo (map)} L.control.layers (basemapsObj، OveraysObj، {collapsed: false}). addTo (map)؛

أسهل خدعة هي إنشاء مجموعة الطبقات "الرئيسية" الخاصة بك وإضافة جميع مجموعات طبقات الفئات الأخرى فيها. يمكنك بالطبع إضافة هذا المفتاح إلى قائمة التراكبات الخاصة بـ Layers Control الخاص بك ، بحيث يتم إدراجه ويحتوي على مربع اختيار للمستخدم لتشغيله / إيقاف تشغيله. تكمن المشكلة في أن مربع الاختيار هذا سيصبح غير متزامن عندما يبدل المستخدم بين الفئات الفردية.

الحيلة الأكثر تعقيدًا هي إبقاء مجموعة الطبقات الرئيسية فارغة ، ومحاكاة إضافة / إزالة جميع مجموعات طبقات الفئات الأخرى من خلال الاستماع إلى الخريطة تراكبوتراكب إزالةالأحداث وإضافة / إزالة الفئات يدويًا.

باستخدام هذه الطريقة الثانية ، يمكنك أيضًا تنفيذ تصحيح لخانة اختيار الطبقة الرئيسية من خلال الاستماع إلى تراكب وإزالتها للفئات الفردية وإضافة الشريحة الرئيسية عند إضافتها جميعًا ، أو إزالة الشريحة الرئيسية عند فقدان فئة واحدة على الأقل.

عرض: https://jsfiddle.net/qkvo7hav/7/

ملاحظة: لسبب ما ، يبدو أن إصدار Mapbox من Layers Control لا يبقي مربعات الاختيار الخاصة به متزامنة عند إضافة / إزالة طبقات خارج عنصر التحكم. يمكننا أن نطلب منه إعادة المزامنة عن طريق الاتصالmyControl._update ().


شاهد الفيديو: الشرح 929: نقل التطبيقات الى الذاكرة الخارجية بدون روت