Leaflet 基于标记属性的草坪缓冲区样式设置
正如标题所示,我正试图根据标记层的属性,在标记层周围设置草皮缓冲区的样式 我知道如何根据相同的层的属性设置层的样式,但是我在将样式连接到缓冲区时遇到了问题 我使用了两种方法,这两种方法都可以设置缓冲区的样式,但仍然无法连接到标记的属性信息(原因很明显,您将看到)。请忽略任何奇怪的格式,因为帖子重新安排了内容,我试图修复它们 尝试1:Leaflet 基于标记属性的草坪缓冲区样式设置,leaflet,switch-statement,buffer,Leaflet,Switch Statement,Buffer,正如标题所示,我正试图根据标记层的属性,在标记层周围设置草皮缓冲区的样式 我知道如何根据相同的层的属性设置层的样式,但是我在将样式连接到缓冲区时遇到了问题 我使用了两种方法,这两种方法都可以设置缓冲区的样式,但仍然无法连接到标记的属性信息(原因很明显,您将看到)。请忽略任何奇怪的格式,因为帖子重新安排了内容,我试图修复它们 尝试1: lyrHouses = { type: "FeatureCollection", features: [], }; // parse
lyrHouses = {
type: "FeatureCollection",
features: [],
};
// parse local CSV file
Papa.parse("src/data1/Houses.csv", {
header: true,
download: true,
dynamicTyping: true,
skipEmptyLines: true,
complete: function (results) {
results.data.forEach((house) => {
feature = {
type: "Feature",
geometry: {
type: "Point",
coordinates: [house.Longitude, house.Latitude],
},
properties: {
Location: house.Location,
Type: house.Type,
},
};
mrkHouses = L.geoJSON(feature).addTo(mymap);
lyrHouses.features.push(feature);
houseBuffer = turf.buffer(mrkHouses.toGeoJSON(), 3, {
units: "kilometers",
});
lyrTest = L.geoJSON(houseBuffer, {
style: function (feature) {
switch (feature.properties.Type) {
case "Duplex":
return { color: "blue" };
case "Quadplex":
return { color: "yellow" };
}
return { color: "red" };
},
}).addTo(mymap);
});
},
});
尝试2:
function setBuffColor(d) {
return d = 'Duplex' ? "green" :
d = 'Quadplex' ? "red" :
d = 'Semidetached' ? "blue" :
'#FFED80';
}
function BuffStyle(feature) {
return {
color: setBuffColor(feature.properties.Type),
};
}
为什么不这样呢
lyrTest = L.geoJSON(houseBuffer, { style: house.Type === 'Duplex' ? { color: "blue" } : (house.Type === 'Quadplex' ? { color: "yellow" } : { color: "red" }) });
houseBuffer
GeoJSON结构是否有任何属性
?houseBuffer没有任何属性。这就是我遇到问题的地方,因为我需要从使用CSV解析属性更新的标记中获取它们。然而,@Anatoly Sukhanov解决方案似乎奏效了!谢谢你的回复,伊万。这让人惊讶。由于我仍在学习JS和传单,有时很难清楚地理解哪些变量是对象、层、geoJSON以及如何访问属性,同时保持正确的格式。幸运的是,我不会再犯这个特别的错误了。非常感谢。不客气。这可能是一个愚蠢的问题,但我如何从标记和缓冲区创建覆盖层,以便打开/关闭它们。我不知道该将哪个部分定义为新的覆盖?如果我没弄错的话,我会这么做-