أكثر

تصفية طبقة geoJSON بعد تحميلها

تصفية طبقة geoJSON بعد تحميلها


أعلن وتحديد طبقة geoJSON أولاً ، مثل:

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

... ثم تحميل ملف CSV فيه ، مثل:

omnivore.csv ('pbstatus.csv'، null، layer1) .on ('جاهز'، الوظيفة (e) {…})؛

الآن ، أريد إنشاء طبقات geoJSON أخرى كمجموعات فرعية منطبقة 1استنادًا إلى قيمة أحد أعمدة CSV التي تم تحميلها في مجموعة بيانات feature.properties الخاصة بالطبقة. هل هناك طريقة للتصفيةطبقة 1بعد أن تم تعريفه وتحميله؟ إنني على دراية بالطريقة "الصحيحة" للتصفية عند تحديد الطبقة:

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

... لكني لا أريد تكرار إعلان مختلف في كل مرة. وستحدد البيانات الموجودة في ملف CSV أي الطبقات وعدد الطبقات التي سيتم تشكيلها ؛ قد لا نعرف جميع شروط التصفية الممكنة قبل استيراد ملف CSV. هل هناك طريقة يمكنني من خلالها إنتاج طبقات جديدة كمجموعات فرعية من هذاطبقة 1بعد تحميلها ببيانات geoJSON؟ هل سترث الطبقات الجديدة أيضًا الخصائص والإجراءات والسلوكيات المحددة فيهاطبقة 1onEach ميزة:وظيفة؟


صادفت هذا مرة أخرى وأدركت أنني لم أقم بتحديث أنني وجدت إجابة.

لقد بدأت الطبقات الفارغة مسبقًا:

var statusComplete = L.layerGroup (). addTo (خريطة) ؛ layerControl.addOverlay (statusComplete، 'Complete') ؛ var statusProgress = L.layerGroup (). addTo (خريطة) ؛ layerControl.addOverlay (statusProgress ، "العمل قيد التقدم") ؛ var statusUnfinished = L.layerGroup (). addTo (خريطة) ؛ layerControl.addOverlay (الحالة غير منتهية ، "لم تنته بعد") ؛ var statusNotstarted = L.layerGroup (). addTo (خريطة) ؛ layerControl.addOverlay (statusNotstarted، 'Work not Started') ؛ var statusUnsure = L.layerGroup (). addTo (خريطة) ؛ layerControl.addOverlay (statusUnsure، 'غير متأكد') ؛

أضفت داخل وظيفة onEachFeaturelayer.addTo ()صياغات.

var statusLayer = L.geoJson (null، {onEachFeature: function (feature، layer) {… var statusCheck = feature.properties ['Actual Status']. toLowerCase ()؛ if (statusCheck == 'complete') layer.addTo ( statusComplete) ؛ وإلا إذا (statusCheck == 'العمل قيد التقدم') layer.addTo (statusProgress) ؛ وإلا إذا (statusCheck == 'تركت غير مكتملة') layer.addTo (statusUnfinished) ؛ وإلا إذا لم يبدأ ') layer.addTo (statusNotstarted) ؛ آخر layer.addTo (statusUnsure) ؛}

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

وعلى الرغم من تحميل ملف CSV نفسه (عبرآكل النبات والحيوان) في الطبقة "الأم" ، لم أقم بإضافتها مطلقًا إلى أي منخريطةأو الlayerControl. بقيت غير مرئية ، بينما الطبقات الجديدةالحالة كاملة ، الحالة ، التقدم ، الحالة غير منتهية ، الحالة لم تبدأ ، الحالة غير مؤكدةأضيفت إلى الخريطة.

قد ترى الرمز الكامل هنا.

ملاحظة: لست متأكدًا حقًا من سبب بدء الطبقات التابعة كـL.layerGroup ()، ولست متأكدًا من كيفية البدء بها.