マップをクリックするのではなく、マップの外部にあるボタンまたは何かをクリックして、フィーチャを選択し、マップ上でそれらを強調表示する必要がある WMS レイヤーにベクター レイヤーを設定しました。コードは次のとおりです。
regioni = new OpenLayers.Layer.WMS(
"regioni",
"http://localhost:8080/geoserver/mmasgis/wms",
{layers: 'mmasgis:reg2011_g', format: 'image/gif'}
);
select = new OpenLayers.Layer.Vector("Selection", {styleMap:
new OpenLayers.Style(OpenLayers.Feature.Vector.style["select"])
});
map.addLayers([regioni, select]);
selectionControl = new OpenLayers.Control.GetFeature({
protocol: OpenLayers.Protocol.WFS.fromWMSLayer(regioni),
box: true,
hover: true,
multipleKey: "shiftKey",
toggleKey: "ctrlKey"
});
selectionControl.events.register("featureselected", this, function(e) {
select.addFeatures([e.feature]);
});
selectionControl.events.register("featureunselected", this, function(e) {
select.removeFeatures([e.feature]);
});
map.addControl(selectionControl);
selectionControl.activate();
このコードを使用すると、問題なくマップをクリックしてフィーチャを選択できますが、マップの外部をクリックしてフィーチャを選択する必要があります。主な問題は、selectionControl.addFeatures メソッドにオブジェクトを渡す必要があるOpenLayers.Feature
ことですが、そのオブジェクトはなくfid
、WMS レイヤーに含まれる 1 つまたは一部の情報だけです。
Tomcat7 で Geoserver と Openlayers を使用しています。何か案は?