<OpenLayers3> 使用 GeoJson 制作等值线图
<OpenLayers3> Make choropleth map with GeoJson
我尝试使用 OpenLayers3 和 GeoJson 生成一个 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。
我尝试使用 OpenLayers3 和 GeoJson 生成一个 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。