<OpenLayers3> 使用 GeoJson 制作等值线图

<OpenLayers3> Make choropleth map with GeoJson

我尝试使用 OpenLayers3GeoJson 生成一个 choropleth 地图javascript.

我想使用我的 GeoJson 的属性来制作这张地图。

例如,如果我有一个属性为 ["name"='1'] 的城市和一个属性为 ["name"='2'] 的城市,我希望“1”为蓝色,“2”为红色.

我在互联网上找到了如何使用 OpenLayers2 制作这张地图([使用 OL2][1]) 制作 choropleth 地图的示例,但我没有找到等效项在 OL3 中。带有 OL2 的代码看起来像:

var subteStyleMap = new OpenLayers.StyleMap({
'strokeWidth': 4
});

var lookup = {
  "1": {strokeColor: "#46C7FA"},
  "2": {strokeColor: "#E81D1A"}
}

subteStyleMap.addUniqueValueRules("default", "number", lookup);

var geojson_layer = new OpenLayers.Layer.Vector("GeoJSON", {
   projection: new OpenLayers.Projection("EPSG:4326"),
   strategies: [new OpenLayers.Strategy.Fixed()],
   protocol: new OpenLayers.Protocol.HTTP({
      url: "generation_geojson2.php",
      format: new OpenLayers.Format.GeoJSON()
   }),
   styleMap: subteStyleMap
});

我开始改编,但我没有找到 'addUniqueValueRules'

的等价物
var lookup = {
  "1": {strokeColor: "#46C7FA"},
  "2": {strokeColor: "#E81D1A"}
}

subteStyleMap.addUniqueValueRules("default", "number", lookup);

var vector_arret_tad    = new ol.layer.Vector
                            ({
                            source: new ol.source.GeoJSON({ url: 'generation_geojson2.php',defaultProjection :'EPSG:4326', projection: 'EPSG:3857'}), 
                            name: 'City',
                            style: subteStyleMap
                            });

这段代码的 OL3 等价物是什么,或者这个问题的另一种解决方案?

您需要使用样式函数。样式函数是一个将特征作为参数和 returns 样式对象数组的函数。

在您的情况下,它将如下所示:

var lookup = {
  "1": [new ol.style.Style({
    stroke: new ol.style.Stroke({
      color: "#46C7FA"
    })
  })],
  "2": [new ol.style.Style({
    stroke: new ol.style.Stroke({
      color: "#E81D1A"
    })
  })]
};

var vectorLayer = new ol.layer.Vector({
  // …
  style: function(feature, resolution) {
    return lookup[feature.get('number')];
  }
});

有关使用样式函数向多边形添加标签的示例,请参阅 http://openlayers.org/en/master/examples/vector-layer.html