在markercluster中设置单个标记的样式

时间:2017-09-06 18:42:36

标签: javascript leaflet leaflet.markercluster

我正在尝试根据某些要素属性设置单个标记或大小为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的簇的颜色。我在初始化markerclustergroup时尝试使用iconCreateFunction,但是,这也没有用。

1 个答案:

答案 0 :(得分:0)

您的style选项在调用L.geoJSON工厂的第三个参数中分开,而它应该放在第二个参数中,与onEachFeature选项一起。

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

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

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

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

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

这是一个正常的标记:

Leaflet default marker

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

如果您想自定义Point几何图形的外观,请使用custom icons,提供此类自定义图标的pluginCircle Markers来修改颜色轻松(包括通过style选项)。

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

var geoJsonLayer = L.geoJSON(storer, {
  pointToLayer: function (geoJsonPoint, latlng) {
    return L.circleMarker(latlng);
  },
  onEachFeature: onEachFeature,
  style: style
});