我在WMS图层上设置了一个Vector图层,我需要在其上选择要素并在地图上突出显示这些要素,而不是点击地图,而是点击按钮或地图外部的某些内容。这是代码:
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();
使用此代码,我可以通过单击地图选择功能而没有任何问题,但我需要通过单击地图外部的某些内容来选择功能。主要问题是我必须将OpenLayers.Feature
对象传递给selectionControl.addFeatures方法,但我没有那个Object,只有fid
或WMS层中包含的一些信息。< / p>
我正在使用Geoserver&amp; tomcat7上的Openlayers。有什么想法吗?
答案 0 :(得分:0)
我试图做同样的事情而且我做不到。 我不确定你的selectionControl是否有addFeatures方法/函数。 实际上它根本没有任何方法:
我认为GetFeature控件是一个黑盒子,我们无法以编程方式添加新选择的功能。如果您愿意,可以修改源代码。
我将这样做: - 拦截onclick事件 - 从鼠标的x和y获取lon / lat - 使用WMS的GetFeature函数从GeoServer获取功能 - 将它们添加到选择图层
我还没有完成。从WMS获取ID的代码示例:
function preSelect(fID) {
var processResponse = function (resp) {
console.log(resp);
console.log(resp.error);
var data = resp.responseText;
var geojson_format = new OpenLayers.Format.GeoJSON();
var features = geojson_format.read(data,null,null);
select.addFeatures(features);
};
OpenLayers.Request.issue({
url: 'http://localhost:8080/geoserver/wfs',
method: 'GET',
params: {
service: 'WFS',
version: '2.0.0',
request: 'GetFeature',
typeName: 'ESD:LLSOA',
outputFormat:'json',
featureID: fID,
},
callback: processResponse
});
}
我认为你可以用bbox参数替换featureID。或者,WMS具有类似的GetFeatureInfo函数,它接受x和y。在这两种情况下,坐标必须与基础图层位于同一投影中。
另外,我遇到了WFS GetFeature方法的准确性问题。这里解释了同样的问题: