Daha çox

GeoExt 2 + OpenLayers 2.13.1 - 'OpenLayers.Control.SelectFeature' ilə problem


Bu yaxınlarda bir web GIS tətbiqi yaratmaq üçün GeoExt və OpenLayers ilə işləməyə başladım. Bu tətbiqetmənin inkişafı zamanı obyektdən istifadə etməkdə bir problem tapdımOpenLayers.Control.SelectFeature.

Müxtəlif əşyalarım varOpenLayers.Layer.Vectorxəritədə həndəsi nöqtələr kimi göstərilir. Hər nöqtədə öz xüsusiyyətləri atributları olan bir popup göstərilməlidir.

Bu popup yaratmaq üçün bu funksiyanı istifadə edirəm:

function createPopup (xüsusiyyət) {var popupOpt = Əlavə tətbiq ({başlıq: xüsusiyyət.attributes.title, yer: xüsusiyyət, html: xüsusiyyət.attributes.html, yığıla bilən: yalan, çıxarıla bilməyən: yalan, maksimize edilə bilən: doğru, simvol: xüsusiyyət. attributes.icon, border: false, style: {borderColor: 'white', borderStyle: 'solid'}}); popup = Ext.create ('GeoExt.window.Popup', popupOpt); popup.on ({close: function () {selectCtrl.unselectAll ();}}); popup.show (); }

İndi bir vektor obyekti ilə bir nəzarət obyekti 'OpenLayers.Control.SelectFeature' yaratdığımda bu işləmir, yalnız bir vektor obyekti ilə bir nəzarət obyekti yaratsam bu düzgün işləyir.

Bu düzgün işləyir:

var vectorStyle = new OpenLayers.StyleMap ({'pointRadius': 4, 'externalGraphic': 'resources / images / logo.png ">

Yalnız orijinal Popup nümunəsinin a ilə işləyə biləcəyini yoxladımXüsusiyyət seçiniki vektor Layer üzərində işləmə. Kodu http://geoext.github.io/geoext2/examples/popup/popup.html arxasında götürdüm və sadəcə hər şeyi təkrarladımvectorLayer-dəyişən və hamısı işləyirdi.

Tam olaraq hansı səhvi görürsən?

Vəhşi bir təxmin: seçmək istədiyiniz bütün vektor layları xəritəyə əlavə olunubmu?

Məlumat mənbəyi yuxarıdakı misal üçün fərqdir

diff --git a / sample / popup / popup.js b / sample / popup / popup.js index cc290d2… 71131bf 100644 --- a / sample / popup / popup.js +++ b / sample / popup / popup. js @@ -29,9 +29,15 @@ Ext.onReady (function () {new OpenLayers.Geometry.Point (-45, 5))); + var vectorLayer2 = yeni OpenLayers.Layer.Vector ("vector2"); + vectorLayer2.addFeatures (+ yeni OpenLayers.Feature.Vector (+ yeni OpenLayers.Geometry.Point (45, 5) +) +); // select xüsusiyyət nəzarəti yaratmaq - var selectCtrl = yeni OpenLayers.Control.SelectFeature (vectorLayer); + var selectCtrl = yeni OpenLayers.Control.SelectFeature ([vectorLayer, vectorLayer2]); // "createPopup" funksiyasını təyin edin var bogusMarkup = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit." + @@ -65,6 +71,10 @@ Ext.onReady (function () {this.feature)> -1 ) {selectCtrl.unselect (this.feature); } + if (OpenLayers.Util.indexOf (vectorLayer2.selectedFeatures, + this.feature)> -1) {+ selectCtrl.unselect (this.feature); +}}}); popup.show (); @@ -76,6 +86,12 @@ Ext.onReady (function () {createPopup (e.feature);}}); + // "featureselected" + vectorLayer2.events.on-da popup yaratmaq ({+ featureselected: function (e) {+ createPopup (e.feature); +} +}); // xəritə paneli daxil olmaqla Ext pəncərəsi yaradın var mapwin = Ext.create ('Ext.Window', {@@ -105,7 +121,8 @@ Ext.onReady (function () {new OpenLayers.Layer.Vector ( 'vektor', {isBaseLayer: true}), - vectorLayer + vectorLayer, + vectorLayer2]}});


Videoya baxın: Openlayers 6 Tutorial #9 - Interaction With Vector Features (Oktyabr 2021).