Openlayers5隐藏功能

Openlayers5隐藏功能,openlayers,openlayers-5,Openlayers,Openlayers 5,我有一些代码来初始化点映射。我从json中获得的点的坐标,在文件的末尾我有一个过滤器。我需要在地图上隐藏/显示一些点。我怎么能做到?setStyle()或更改图像大小无效。有什么想法吗 //坐标 var坐标; 函数init(paramsFilter){ $.getJSON(“/wp content/themes/ukid/mapdata.php”,函数(数据){ coordinatesJson=数据; dataReady(paramsFilter); }); } 函数dataReady(par

我有一些代码来初始化点映射。我从json中获得的点的坐标,在文件的末尾我有一个过滤器。我需要在地图上隐藏/显示一些点。我怎么能做到?setStyle()或更改图像大小无效。有什么想法吗

//坐标
var坐标;
函数init(paramsFilter){
$.getJSON(“/wp content/themes/ukid/mapdata.php”,函数(数据){
coordinatesJson=数据;
dataReady(paramsFilter);
});
}
函数dataReady(paramsFilter){
//坐标点
变量坐标=[];
$.each(坐标JSON,函数(索引,值){
坐标[index]=ol.proj.fromlont([parseFloat(值['longitude']),parseFloat(值['latitude']);
});
//特征点
var特征=[];
$.each(坐标、函数(索引、值){
特征[索引]=新的ol.特征({
几何:新的ol.几何点(值),
//名称:“空岛”,
颜色:“绿色”,
类型:'幼儿园',
尺寸:[32,32]
});
});
$.each(坐标JSON,函数(索引,值){
功能[索引].values_u.name=value['post_title'];
功能[索引].values_u.post_name=value['post_name'];
特征[索引]。值\城市=值['city'];
特征[索引].值.面积=值['area'];
});
//支持渲染贴图
var source=新的ol.source.Vector({
特色:特色
});
var clusterSource=新的ol.source.Cluster({
距离:40,
资料来源:资料来源
});
//点的簇和样式
var clusters=新的ol.layer.Vector({
资料来源:clusterSource,
风格:功能(特征){
var size=feature.get('features').length;
var color=feature.get('features')[0]。get('color');
var size=feature.get('features')[0]。get('size');
var style=新的ol.style.style({
图片:新ol.style.Icon({
主播:[0.5,46],
主播:“分数”,
anchorYUnits:'像素',
src:“/wp content/themes/ukid/img/幼稚园图标.png”,
imgSize:大小
})
});
回归风格;
}
});
//支持渲染贴图
var raster=新建ol.layer.Tile({
来源:new ol.source.OSM()
});
//渲染贴图
var map=新ol.map({
图层:[光栅、簇],
目标:“地图”,
视图:新ol.view({
中心:Lonlat的其他项目([30.5238,50.45466]),
缩放:11
})
});
//过滤器映射
if(参数过滤器){
let featuresList=source.forEachFeature(函数(回调){
if(paramsFilter['type']){
if(回调['values_']['type']!=paramsFilter['type']){
//如何隐藏地图点?
}
}
if(paramsFilter['city']){
if(回调['values_']['city']!=paramsFilter['city']){
//如何隐藏地图点?
}
}
if(paramsFilter['area']){
if(回调['values_']['area']!=paramsFilter['area']){
//如何隐藏地图点?
}
}
});
}
}

init()只需将某些功能添加到矢量源,以便只显示它们。例如:

source.clear();
features.forEach(function (ftr) {
  if (ftr.get("someProperty")>10) {
    source.addFeature(ftr);
  }
});

过滤群集的常用方法是在ol.source.Cluster中使用geometryFunction。“当一个特性不应该被考虑用于集群时,函数应该返回null。”然而,在这种情况下,如果预先加载了一个json,我怀疑Ulas的方法会更有效

  var clusterSource = new ol.source.Cluster({
    distance: 40,
    source: source,
    geometryFunction: function(feature) {
      if (paramsFilter) {
        if (paramsFilter['type'] && feature.get('type') != paramsFilter['type']) return null;
        if (paramsFilter['city'] && feature.get('city') != paramsFilter['city']) return null;
        if (paramsFilter['area'] && feature.get('area') != paramsFilter['area']) return null;
      }
      return feature.getGeometry();
    }
  });
您可以为不同类型创建不同的图像,方法是为每种图像创建一个图标,最好使用匹配的名称,以简化编码,例如:

style: function(feature) {
  var size = feature.get('features').length;
  var color = feature.get('features')[0].get('color');
  var size = feature.get('features')[0].get('size');
  var type = feature.get('features')[0].get('type');
  var  style = new ol.style.Style({
    image: new ol.style.Icon({
      anchor: [0.5, 46],
      anchorXUnits: 'fraction',
      anchorYUnits: 'pixels',
      src: '/wp-content/themes/ukid/img/' + type + '-icon.png',
      imgSize: size
    })
  });
  return style;
}

你能帮我解决另一个问题吗?我需要为不同类型的功能设置不同的图像。所有功能都有“幼稚园”类型,我对其进行了更改,现在我有了一些“幼稚园”类型的功能,一些“保姆”和一些“cources”。对于每种类型,我需要不同的图像,您需要一个样式函数。检查样式功能的示例,例如:如果您需要进一步的帮助,请发表评论。同时检查我的回答:这可能会有进一步的帮助。