Şu anda OpenLayers.Layer.Vector'da bir vektör seçmek (veya vurgulamak) için bir çözüm arıyor.OpenLayers'ta bir vektör katmanında programlı bir özellik nasıl seçilir?
Kullanıcının katmanda karşılık gelen vektörü vurgulaması gereken bir vektörü (WKT formatlı dizesi olarak verilen) seçebileceği basit bir ızgara oluşturabilirim. Izgarada bulunan tüm vektörler, kullanıcı siteyi ziyaret ettiğinde haritadaki vektör katmanına çizilir.
Ben de OpenLayers.Control.ModifyFeature 'ın selectFeature(feature) işlev veya OpenLayers.Control.SelectFeature (belirli (özelliği) işlevi dev.openlayers.org/apidocs/files/OpenLayers/Control/SelectFeature-js.html's bkz gerektiğini öğrendim (Muhtemelen mevcut değildir veya artık mevcut değildir?) Daha fazla bilgi için bir Posta Listesinden bir gönderiye bakın: osgeo-org.1803224.n2.nabble.com/Programatic-Select-a-Feature-tt2192485.html#a2193928 infos.
hiçbir başarı ile yapmak istedim, bu yüzden birisi bu kod satırları kapmak olabilir ve bana bir çalışma kod parçacığını ;-)
// ... 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);
gösterebilirim umut kodunda Sonra
:
// ... 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;
}
}
}
teşekkürler! Mevcut sürümdeki OpenLayers API Doc'un bozulduğunu öğrendim (ve 'select' yöntemi yoktu). İşte [OpenLayers API'sine bağlantı] (http://dev.openlayers.org/docs/files/OpenLayers/Control/SelectFeature-js.html#OpenLayers.Control.SelectFeature.select) –
geleceğim için tavsiyem de doc'lar yerine openlayers kaynak koduna bakın. Orada ihtiyacınız olan şeyi bulmak kolay ve işlerin nasıl yürüdüğünü daha iyi anlayacaksınız. Genellikle, kaynak kodunda, dokümanlarda göremeyeceğiniz değerli yorumlar bulabilirsiniz. – igorti
, "selectFeature" kontrolünü haritada etkinleştirmeden önce haritaya eklemeniz gerektiğini unutmayın. map.addControl (selectFeature); – JSancho