使用 .setFilter 和 Mapbox API 的 Javascript 问题

标签 javascript jquery mapbox

我正在使用 Mapbox 的 API 在 map 上加载标记,并且我希望根据是否选中与其标记颜色对应的复选框来显示不同的标记。

我的 data.geoJSON 文件看起来像这样:

{ 
  "type": "FeatureCollection",
  "features": [ { 
    "type": "Feature",
    "geometry": { 
      "type": "Point", 
      "coordinates": [13.353323936462402, 38.11200434622822]
    },
    "properties": {
      "marker-color": "#9c89cc", 
      "marker-color": "#3b5998"
    }
  } ]
}

我的 HTML 看起来像这样:

<div id='filters' class='ui-select'>
  <input type='checkbox' checked=checked class='filter' name='filter' id='blue' value='blue'/>
  <label for='blue'>
    Blue marker checkbox
  </label>
</div>

<div id='map'></div>

但是,我无法弄清楚如何让 .change() 函数在内部 .setFilter( function(feature) {} 工作)

var featureLayer = L.mapbox.featureLayer()
  .loadURL('/map/getjson/')
  .addTo(map)
  .setFilter(
    function (feature) {
      //$("input[type='checkbox']").click(function() {
        if ($("#blue").prop("checked")) {
          return (feature.properties["marker-color"] === "#3b5998");
        } else {
          return false;
        }
      //});
    }
  );

基本上,如果 return(feature.properties["marker-color"] === "#3b5998") 计算结果为 true,则具有指定集的标记将显示功能。否则,标记将不会显示。

This是 Mapbox 提供的一些示例 javascript(不使用 jQuery)。

map.featureLayer.setFilter(function(feature) {
  return (feature.properties['marker-symbol'] in enabled);
}

但是我对如何在这里使用 .change().click() 感到困惑,因为我希望标记的显示取决于它们是否相应的复选框被选中。

我尝试使用.click():

function (feature) {
  //$("input[type='checkbox']").click(function() {
    if ($("#blue").prop("checked")) {
      return (feature.properties["marker-color"] === "#3b5998");
    } else {
      return false;
    }
  //});
}

...但这不起作用!我想我不能在这个函数中使用 .click() 吗?

最佳答案

好吧,回顾一下时间维度:

  • 调用setFilter()将立即设置标记过滤器。
  • jQuery 的 .click() 将在有人点击时触发。

因此,在 setFilter 内部使用 click() 的想法是倒退的。做相反的事情:

var featureLayer = L.mapbox.featureLayer()
  .loadURL('/map/getjson/')
  .addTo(map)
  // initially set the filter
  .setFilter(showBlueIfChecked);

$("input[type='checkbox']").click(function() {
  // refilter items when people click the checkbox
  featureLayer.setFilter(showBlueIfChecked);
});

function showBlueIfChecked(feature) {
  if ($("#blue").prop("checked")) {
    return (feature.properties["marker-color"] === "#3b5998");
  } else {
    return false;
  }
}

关于使用 .setFilter 和 Mapbox API 的 Javascript 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24357564/

相关文章:

javascript - 如何使用 javascript 在 div 中附加 Iframe

php - 如何根据表单字段是否有效来更改CSS

mapbox - 如何使用 webpack 导入 mapbox-gl-draw ?

ios - MapBox iOS SDK : add map event

javascript - 保留字符串格式中提到的空格

javascript - 如何解析 url 以获得所需的值

javascript - 循环遍历 HTML 元素数组并添加到数组

javascript - JS : Event on ScrollDown and ScrollUp

javascript - 使用 jQuery 将 1 个输入框的值回显到另一个输入框

leaflet - Mapbox 鼠标右键单击