我想知道是否可以在makeIcon()函数中添加条件
我有一张桌子:
id ; lat ; long ; class1 ; class2 ; class3
我希望图标根据这些条件而有所不同:
if class1 == A, I want image1
else, if class2 == B, I want image2
else, if class3 == C, I want image 3
else, I want image4
答案 0 :(得分:1)
在makeIcon()
内,可能不是。从API文档:
对于将单个图标应用于一组标记的简单情况,请使用 makeIcon()。 (this one)
你可能想使用icon()这是一个图标矢量,你可以用它来绘制不同数据的不同图标:
如果你有几个要申请的图标,只有几个不同 参数(即它们共享相同的大小和锚点但具有 不同的URL),使用icons()函数。
图标包含一个带有每个图标图像网址的向量(或者数据之间不同的任何其他图标属性)。
要做逻辑,最好将额外的两个ifelse语句嵌套到图标函数中,例如:
iconUrl = ifelse(df$class1 == "a", "image1",
ifelse(df$class2 == "c", "image2",
ifelse(df$class3 =="x", "image3",
"some other url" #the else condition
)
)
),
这是一个最小的示例,它只是链接到api文档中的示例的一小部分内容:
library(leaflet)
lat<- c(57,65,60,61)
long<-c(-130,-125,-140,-135)
class1<-c("a","b","c","d")
class2<-c("b","c","d","e")
class3<-c("b","c","d","f")
df <- data.frame(lat,long,class1,class2,class3,stringsAsFactors=FALSE)
leafIcons <- icons(
iconUrl = ifelse(df$class1 == "a", "http://leafletjs.com/examples/custom-icons/leaf-green.png",
ifelse(df$class2 == "c", "http://leafletjs.com/examples/custom-icons/leaf-red.png",
ifelse(df$class3 == "d", "http://leafletjs.com/examples/custom-icons/leaf-orange.png",
"http://leafletjs.com/docs/images/logo.png"
)
)
),
iconWidth = 38, iconHeight = 95,
iconAnchorX = 22, iconAnchorY = 94,
shadowUrl = "http://leafletjs.com/examples/custom-icons/leaf-shadow.png",
shadowWidth = 50, shadowHeight = 64,
shadowAnchorX = 4, shadowAnchorY = 62
)
leaflet(data = df) %>% addTiles() %>%
addMarkers(~long, ~lat, icon = leafIcons)
对不起,这个图片的选择并不是很棒。如果您想根据每个图标的数据,图标大小等其他属性而有所不同,您可以在iconWidth和/或iconHeight上使用相同的过程:
iconHeight = ifelse(df$class1 == "a", 100,
ifelse(df$class2 == "c", 200,
ifelse(df$class3 == "d", 300,
400
)
)
),