मैं वर्तमान में एक OpenLayers.Layer.Vector में एक वेक्टर का चयन (या हाइलाइट) करने के लिए एक समाधान की तलाश कर रहा हूँ।ओपनलेयर में वेक्टर परत पर प्रोग्रामेटिक रूप से सुविधा का चयन कैसे करें?
मैंने एक साधारण ग्रिडटेबल बनाया है जहां कोई उपयोगकर्ता वेक्टर चुन सकता है (WKT स्वरूपित स्ट्रिंग के रूप में दिया गया है) जो परत पर संबंधित वेक्टर को हाइलाइट करना चाहिए। ग्रिडटेबल में सभी वैक्टर नक्शे पर वेक्टर परत पर खींचे जाते हैं जब उपयोगकर्ता साइट पर जाता है।
मुझे पता चला मैं या तो जरूरत है कि OpenLayers.Control.ModifyFeature के selectFeature(feature) समारोह या OpenLayers.Control.SelectFeature (dev.openlayers.org/apidocs/files/OpenLayers/Control/SelectFeature-js.html's देखने का चयन करें (फीचर) समारोह (जो शायद मौजूद नहीं है या अब अस्तित्व में नहीं है?)। मेलिंगलिस्ट से एक पोस्ट देखें: osgeo-org.1803224.n2.nabble.com/ प्रायोगिक रूप से- चयन- ए- फीचर-tt2192485.html#a2193928 और अधिक के लिए infos।
मुझे कोई सफलता के साथ निम्नलिखित की कोशिश की, तो मुझे आशा है कि किसी को इस कोड लाइनों हड़पने सकता है और मुझे एक काम कोड स्निपेट ;-)
// ... some initializing code
this.vlayer = new OpenLayers.Layer.Vector("VectorLayer"); // VectorLayer
// some controls
this.openLayerControlPoint = new OpenLayers.Control.DrawFeature(this.vlayer, OpenLayers.Handler.Point);
this.openLayerControlPolygon = new OpenLayers.Control.DrawFeature(this.vlayer, OpenLayers.Handler.Polygon);
this.openLayerControlModify = new OpenLayers.Control.ModifyFeature(this.vlayer, {
mode: OpenLayers.Control.ModifyFeature.RESHAPE | OpenLayers.Control.ModifyFeature.DRAG,
standalone: false
});
// just deactivate to make sure everything is really deactivated
this.openLayerControlPoint.deactivate();
this.openLayerControlPolygon.deactivate();
this.openLayerControlModify.deactivate();
// add the just created layer to the map
this.map.addLayer(this.vlayer);
// add all (deactivated) controls to the map
this.map.addControl(this.openLayerControlPoint);
this.map.addControl(this.openLayerControlPolygon);
this.map.addControl(this.openLayerControlModify);
दिखा सकता है कोड में बाद में
:
// ... another function doing the action
selectVector: function(wktVector) {
this.openLayerControlModify.activate();
// this is no elegant solution, this should only show how I would
// test the functionallity.
for (var i = 0; i < this.vlayer.features.length; ++i) {
// returns a WKT formatted string:
// 'POLYGON((xxxx.xxx xxxx.xxx), (xxxx.xxx xxxx.xxx))'
var wktVectorCurrent = this.vlayer.features[i].geometry.toString();
if (wktVector == wktVectorCurrent) {
// \/ doesn't work :-(
this.openLayerControlModify.selectFeature(this.vlayer.features[i]);
break;
}
}
}
धन्यवाद आपकी प्रतिक्रिया के लिए यह मेरे लिए काम किया! मुझे पता चला कि वर्तमान रिलीज में ओपनलेयर एपीआई दस्तावेज़ टूटा हुआ है (और कोई 'चयन' विधि नहीं थी)। यहां काम कर रहा है [ओपनलेयर एपीआई से लिंक] (http://dev.openlayers.org/docs/files/OpenLayers/Control/SelectFeature-js.html#OpenLayers.Control.SelectFeature.select) –
भविष्य के लिए मेरी सलाह भी है दस्तावेज़ों के बजाय ओपनलेयर स्रोत कोड देखें। आपको वहां क्या चाहिए इसकी तलाश करना आसान है और आपको चीजों को कैसे काम करने की बेहतर समझ मिल जाएगी। आपको अक्सर स्रोत कोड में मूल्यवान टिप्पणियां मिलेंगी जिन्हें आप दस्तावेज़ों में नहीं देख पाएंगे। – igorti
ध्यान दें कि इससे पहले कि आप उस पर सक्रिय कॉल कर सकें, आपको मानचित्र पर "selectFeature" नियंत्रण जोड़ना होगा। map.addControl (selectFeature); – JSancho