<openlayers3>使用GeoJson </openlayers3>创建等值区域图

时间:2015-01-22 16:35:39

标签: javascript openlayers-3

我尝试使用 OpenLayers3 制作等值地图,并使用 javascript 生成 GeoJson

我想使用 GeoJson 的属性制作此地图。

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

我在互联网上找到了如何使用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等价是什么,或者是针对这个问题的另一种解决方案?

1 个答案:

答案 0 :(得分:1)

您需要使用样式功能。样式函数是一个将特征作为参数并返回样式对象数组的函数。

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

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