OpenLayers使用多边形选择要素
试图使用这个- 例如: 我有选择功能(框),它允许我选择图层上的功能。但它是盒式的。 现在,我正试图作出同样的选择,但与多边形的风格。类似于绘制新多边形,但将选择该多边形内的内容。 我是否在正确的道路上尝试使用这个SLD选择,还是有其他更好的方法 对任何解决方案都持开放态度OpenLayers使用多边形选择要素,openlayers,Openlayers,试图使用这个- 例如: 我有选择功能(框),它允许我选择图层上的功能。但它是盒式的。 现在,我正试图作出同样的选择,但与多边形的风格。类似于绘制新多边形,但将选择该多边形内的内容。 我是否在正确的道路上尝试使用这个SLD选择,还是有其他更好的方法 对任何解决方案都持开放态度 谢谢。来自GIS StackEchange网站: function buildIt() {//START FUNCTION buildIt //CREATE A NEW EMPTY VECTOR LAYER var po
谢谢。来自GIS StackEchange网站:
function buildIt() {//START FUNCTION buildIt
//CREATE A NEW EMPTY VECTOR LAYER
var polygonAdHoc = new OpenLayers.Layer.Vector("Poly Layer");
//ADD THE NEW VECTOR LAYER TO THE OPENLAYERS MAP
map.addLayer(polygonAdHoc);
//SET A VARIABLE TO THE NAME OF THE EXISTING LAYER THAT WILL BE TESTED FOR INTERSECTION WITH THE USER CREATED POLYGON
//I CHOSE TO GET THE LAYER BY NAME BUT YOU MIGHT CHOOSE TO DO IT ANOTHER WAY
var standLyr = map.getLayersByName("nameOfTheVectorLayerYouWantToTestForIntersection");
//CREATE A DRAW FEATURE CONTROL FOR THE USER CREATED VECTOR LAYER
var draw = new OpenLayers.Control.DrawFeature(polygonAdHoc, OpenLayers.Handler.Polygon);
//ADD THE DRAW FEATURE CONTROL TO THE MAP
map.addControl(draw);
//ACTIVATE THE DRAW FEATURE CONTROL
draw.activate();
//WHEN THE USER FINISHES DRAWING THE AD-HOC POLYGON THE beforefeatureadded EVENT WILL FIRE
polygonAdHoc.events.on({
beforefeatureadded: function (event) {
poly = event.feature.geometry;//SET A VARIABLE TO THE USERDRAWN POLYGONS GEOMETRY
//alert("polygonAdHoc.features[0].geometry: " + poly);//IF YOU WANT TO SEE THE GEOMETRY COORDINATES UNCOMMENT THIS LINE
for (var a = 0; a < standLyr[0].features.length; a++) {//LOOP THRU THE STANDS FEATURES OF THE LAYER YOU WANT TO TEST FOR INTERSECTION WITH THE USER DRAWN POLYGON
if (poly.intersects(standLyr[0].features[a].geometry)) {//IF THE USER DRAWN POLYGON INTERSECTS THE TARGET LAYERS FEATURE REPRESENTED BY THE VARIABLE "a" THEN
//IDENTIFY THE FEATURE THAT INTERSECTS
//FOR SIMPLICITIES SAKE I CHOSE TO JUST FIRE AN ALERT
//MY ACTUAL APP ADDS EACH SELECTED FEATURE TO A SELECT FEATURE CONTROL AND HIGHLIGHTS EACH POLYGON ON THE MAP
alert("stands feature intersection: " + standLyr[0].features[a].attributes['nameOfAttribute']);
}//END OF IF STATEMENT
}//END OF FOR STATEMENT
draw.deactivate();//I ONLY WANT THE USER TO BE ABLE TO DRAW ONE AD-HOC POLYGON
//SO I DEACTIVATE THE DRAW FEATURE CONTROL AFTER THEY CREATE THE FIRST POLYGON
return false;
}//END OF beforefeatureadded FUNCTION
});//END OF polygonAdHoc.events.on
}//END OF buildIt FUNCTION
函数buildIt(){//启动函数buildIt
//创建一个新的空向量层
var polygodhoc=新的OpenLayers.Layer.Vector(“多边形层”);
//将新矢量层添加到OPENLAYERS贴图
map.addLayer(多边形DHOC);
//将变量设置为将测试与用户创建的多边形相交的现有图层的名称
//我选择按名称获取图层,但您可以选择另一种方式
var standLyr=map.getLayersByName(“矢量图层的名称youwanttotestforintersection”);
//为用户创建的矢量图层创建绘制特征控件
var draw=new OpenLayers.Control.DrawFeature(polygonAdHoc,OpenLayers.Handler.Polygon);
//将绘制要素控件添加到地图
map.addControl(draw);
//激活“绘制特征”控件
draw.activate();
//当用户完成绘制特殊多边形时,将触发beforefeatureadded事件
多哥节事件({
添加BeforeFeature:函数(事件){
poly=event.feature.geometry;//将变量设置为用户绘制的多边形几何体
//警报(“polygodhoc.features[0]。几何体:+poly);//如果要查看几何体坐标,请取消对此行的注释
对于(var a=0;a
在这个plunker中,我使用了interaction.Draw创建了一个多边形。多边形完成后,它将查找多边形范围中的所有要素点并选择它们
以下是draw.on('draund'),…
listener的摘录:
draw.on('drawend', function(e) {
e.preventDefault();
//stop a click select from overriding selection made by polygon
setTimeout(function(){
select.setActive(true)
},300);
// features that intersect the box are added to the collection of
// selected features, and their names are displayed in the "info"
// div
var extent = e.feature.getGeometry().getExtent();
//pointsLayer is the vector layer with the point features
pointsLayer.getSource().forEachFeatureIntersectingExtent(extent, function(feature) {
selectedFeatures.push(feature);
});
});
你找到答案了吗?大概是第2版吧?是的。当问到问题或给出我的答案时,OpenLayers v3并没有出现。