我尝试使用 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等价是什么,或者是针对这个问题的另一种解决方案?
答案 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。