要素图层根据每个图形的其中一个属性的值来渲染图形。
//渲染图层样式用setStyle(), 这里可以传入函数,函数的参数feature就是每一个要素(图形)
layer.setStyle(function(feature) {
//获取属性 "FEATUREID" 的值
var featureId = feature.properties["FEATUREID"];
if(featureId){
//featureSymbols中有当前featureId值的样式时,直接返回样式
if(featureSymbols[featureId]){
return featureSymbols[featureId];
}else{
/* 当featureId 不存在于featureCode中时,才去调用featureStyleByFeatureID方法;
* 否则,说明featureId已经在后台查询过了,并且没有查询到样式,所以这个featureId,不再调用featureStyleByFeatureID
* */
if(featureCode[featureId]==null){
featureStyleByFeatureID(featureId);
}
return featureSymbols[featureId];
}
}
});
/**
* 根据FEATUREID属性的值,设置图层的样式
* */
var featureSymbols = {};//存储样式
var featureCode = {}; //存储没有查询到样式的featureId,下次再遇到这个featureId时就不再去后台查询
function featureStyleByFeatureID(featureId) {
//根据featureId去后台查询样式
$.ajax({
url:ctx+"/features/getFeaturresByCode",
data:{ code : featureId},
dataType:"json",
async:false,
success:function(data){
//data样式是json格式的,例如:{color: "#ff0000", fillColor: "#ff0000", fillOpacity: "0", opacity: "1", type: 3, weight: "1"}
//当data没有值时,将当前featureId值存储到featureCode中
if(data==null || data =='{}'){
featureCode[featureId] = featureId;
}
//样式以键值对的形式存储到featureSymbols中,下次再遇到这个featureId值,可以直接在featureSymbols中获取对应的样式,不再去后台查询
featureSymbols[featureId] = data;
}
});
return featureSymbols[featureId];
}