أكثر

كيف تضيف طبقة إلى SelectFeature دون فقدان التحديدات الحالية؟

كيف تضيف طبقة إلى SelectFeature دون فقدان التحديدات الحالية؟


أنا أستخدم OpenLayers.Control.SelectFeature للتحديدات على طبقات متعددة. ومع ذلك ، عندما أقوم بإضافة طبقة باستخدام setLayer () ، يتم فقد اختياراتي على الطبقات الأخرى.

أي شخص يعرف كيف يتغلب على هذا؟ أرغب في الاحتفاظ بتحديداتي الحالية على طبقات أخرى عندما أقوم بإضافة طبقة إلى عنصر التحكم SelectFeature.

هنا مثال: المثال الخاص بي

تحديث:

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

/ ** * APIMethod: setLayer * قم بإرفاق طبقة جديدة بالتحكم ، لتجاوز أي طبقات موجودة. * * المعلمات: * الطبقات - صفيف {} أو واحد * {} * / setLayer: الوظيفة (الطبقات) {var isActive = this.active؛ this.unselectAll () ؛ this.deactivate () ، إذا (this.layers) {this.layer.destroy () ؛ this.layers = null؛ } this.initLayer (طبقات) ؛ this.handlers.feature.layer = this.layer؛ إذا (هو نشط) {this.activate () ؛ }} ،

يمكنك تعديل طريقة setLayer للتحكم في SelectFeature:

OpenLayers.Control.SelectFeature.prototype.setLayer = وظيفة (طبقات) {var isActive = this.active؛ //this.unselectAll () ؛ <- ما تحتاجه هذا. إلغاء تنشيط () ؛ إذا (this.layers) {this.layer.destroy () ؛ this.layers = null؛ } this.initLayer (طبقات)؛ this.handlers.feature.layer = this.layer؛ إذا (هو نشط) {this.activate () ؛ }}

أعتقد أن هذه طريقة مفيدة للغاية ولكن يجب إضافتها كـ addLayer (Layer) ومع بعض التغييرات الصغيرة لجعلها تتعامل مع طبقة واحدة:

addLayer = الوظيفة (الطبقة) {var isActive = this.active ؛ var curLayers = this.layers ؛ this.deactivate () ، إذا (this.layers) {this.layer.destroy () ؛ this.layers = null؛ } if (urrLayers! = null) {urrLayers.push (layer)؛ this.initLayer (urrLayers) ؛ } else {this.initLayer ([layer]) ؛ } this.handlers.feature.layer = this.layer؛ إذا (هو نشط) {this.activate () ؛ }} ،

التي آمل أن يتم قبولها في طلب السحب هذا - https://github.com/openlayers/openlayers/pull/1287

أيضًا ، لا يتعين على المستخدم الاحتفاظ بقائمة من الطبقات التي تمت إضافتها.