<OpenLayers3> 使用 GeoJson 制作分区统计图

<OpenLayers3> Make choropleth map with GeoJson

本文关键字:分区 统计 使用 OpenLayers3 GeoJson      更新时间:2023-09-26

我尝试用OpenLayers3GeoJsonjavascript中生成一个分区统计图。

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

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

我在互联网上找到了如何使用 OpenLayers2 制作此地图([使用 OL2][1]) 制作分区统计图的示例,但我在 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 等效性是什么,或者此问题的另一种解决方案是什么?

你需要使用样式函数。样式函数是将特征作为参数并返回样式对象数组的函数。

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

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。