0

我正在尝试根据某些特征属性设置单个标记或大小为 1 的集群的样式。

var markers = L.markerClusterGroup();

function onEachFeature(feature, layer) {
  if (feature.properties.EncounterType && feature.properties.Year) {
    layer.bindPopup(feature.properties.EncounterType + " in " +
      feature.properties.Year);
  }
}

function style(feature) {
  switch (feature.properties.EncounterType) {
    case 'Shooting':
      return {
        color: "ff0000"
      };
    case 'Sighting':
      return {
        color: "0000ff"
      };
    case 'Hunting':
      return {
        color: "ff0000"
      };
  }
}

var geoJsonLayer = L.geoJSON(storer, {
  onEachFeature: onEachFeature
}, {
  style: style
});

markers.addLayer(geoJsonLayer);
map.addLayer(markers);

onEachFeature函数成功创建了弹出窗口。但是,样式函数不会改变大小为 1 的簇的颜色。我iconCreateFunction在初始化标记簇组时尝试过使用,但是,这也不起作用。

4

1 回答 1

1

您的style选项在您调用L.geoJSONfactory 的第三个参数中分开,而它应该放在onEachFeature选项旁边的第二个参数中。

var geoJsonLayer = L.geoJSON(storer, {
  onEachFeature: onEachFeature,
  style: style
});

但这可能不是您的问题的唯一原因。

style选项将适用于矢量形状(折线、多边形等),即适用于非点数据。它也可能适用于圆形标记,可用于Point几何类型,但您必须显式创建它们(通常通过pointToLayer选项)。

Leaflet.markercluster 无法处理这些非点数据。

因此,如果您看到“大小为 1 的集群”(我猜您的意思是标记),它们来自您的GeoJSON 数据Point中的无样式类型几何。storer

这是一个正常的标记:

传单默认标记

这是一个无法设置样式的 PNG 图像。

如果您想自定义Point几何图形的外观,请使用自定义图标、提供此类自定义图标的插件或圆形标记,您可以轻松修改颜色(包括通过style选项)。

例如,如果您要选择最后一个选项,您可以执行以下操作:

var geoJsonLayer = L.geoJSON(storer, {
  pointToLayer: function (geoJsonPoint, latlng) {
    return L.circleMarker(latlng);
  },
  onEachFeature: onEachFeature,
  style: style
});
于 2017-09-06T19:37:11.053 回答