أكثر

استخدم turf.count مع turf.buffer بشكل ديناميكي

استخدم turf.count مع turf.buffer بشكل ديناميكي


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

// إضافة علامة قابلة للسحب var marker = L.marker (new L.LatLng (39.702475 ، -104.875398) ، {draggable: true}) ؛ // إضافة علامة منبثقة marker.bindPopup ('هذه العلامة قابلة للسحب!') ؛ marker.addTo (خريطة) ؛ // إزالة المخازن المؤقتة القديمة (المستخدمة عند سحب العلامة) وظيفة removeBuff () {map.removeLayer (buff) ؛ } ؛ // إنشاء مخزن مؤقت (يُستخدم عند سحب العلامة) وظيفة updateBuffer () {// اجعل العلامة ميزة var pointMarker = marker.toGeoJSON () ؛ // مخزن مؤقت لميزة geoJSON للعلامة المخزنة مؤقتًا = turf.buffer (pointMarker، 1، 'miles') ؛ // إضافة المخزن المؤقت إلى الخريطة. ملاحظة: لا يوجد "var" قبل "buff" يجعله متغيرًا شاملاً ويمكن استخدامه في دالة removeBuff (). برتقالي = L.geoJson (مخزنة) ؛ Buff.addTo (خريطة) ؛ console.log (مخزنة) ؛ } ؛ marker.on ('pull'، function () {removeBuff ()، updateBuffer ()}) ؛ updateBuffer () ، // استدعاء geojson للنقاط var data = L.geoJson (traffacc، {pointToLayer: function (feature، latlgn) {var popupContect = "سنة الحادث:"+ feature.properties.year_STR ؛ إرجاع L.circleMarker (latlgn ، Style (feature)). bindPopup (popupContect) ؛} ،}). addTo (map) ؛ var pt = data.toGeoJSON () ؛ var countPt = turf. count (buffered، pt، 'description')؛ console.log (countPt)؛ var resultFeatures = pt.features.concat (countPt.features)؛ var result = {"type": "FeatureCollection"، "features": resultFeatures} ؛

كما يمكنك أن تتخيل هذا الرمز عبارة عن خليط من كود الأشخاص الآخرين. أي أفكار كيف يمكنني تحقيق الجزء الثاني؟


يجب نقل جزء "var CountPt" من الكود (الذي يقوم بحساب النقاط) إلى داخل وظيفة updateBuffer حتى تتم إعادة تشغيله باستمرار.

وظيفة updateBuffer () {var pointMarker = marker.toGeoJSON () ؛ مخزنة = turf.buffer (pointMarker، 1، 'miles') ؛ برتقالي = L.geoJson (مخزنة) ؛ Buff.addTo (خريطة) ؛ console.log (مخزنة) ؛ var countPt = turf.count (مخزن مؤقت ، pt ، "وصف") ؛ console.log (countPt) ؛ } ؛

شيء من هذا القبيل يجب أن يؤدي المهمة. في الوقت الحالي ، تقوم بتشغيل العد مرة واحدة فقط بمظهرها

ربما قم بإعداد jsfiddle إذا كنت بحاجة إلى مزيد من المساعدة.

حظ موفق يا روان


شاهد الفيديو: DIY Lawn Care - Which Spreader Setting To Use For Fertilizer Applications