单击位置时如何隐藏和显示多段线

问题描述

我在医院和市政当局之间做polylines。我的真实数据库中有很多医院和市政当局。这使得图像变得过载以致于读取地图并不容易。 我希望当我点击(不是鼠标悬停)医院(深红点)时,只显示与其链接的市政府(绿点)的 polylines,然后在鼠标上我可以阅读不同的polylines。 相反,我希望当我还单击市政当局(绿点)时,显示与其相连的所有医院的 polylines。 我不知道该怎么做。可以用R代码还是我应该写JAVA。

这是我的脚本:

finessGeoDP 是医院代码codeGeo 是市政当局的邮政编码 longHoplatHop 是医院坐标; Com_longCom_latit 是自治市坐标。

   mydata<-structure(list(codeGeo = c(94500L,94170L,94340L,94420L,93160L,94500L,94000L,94350L,77340L,94490L,94510L,94100L,94430L,94370L,94120L,94290L,94450L,94600L,77170L,94140L,94190L,94380L,77000L,94320L,94460L,94700L,94440L,94220L,94410L,94400L,94470L,94310L,94450L),finessGeoDP = c(940000649L,940000649L,940006679L,940000573L,940000573L),Com_long = c(2.5160707811,2.5020577557,2.469211766,2.5744322249,2.5625078254,2.5160707811,2.454772749,2.5442278405,2.6177751622,2.540658549,2.5848280994,2.4928456698,2.5414350503,2.5361278954,2.4735929367,2.4103055922,2.4911314294,2.4187667248,2.6200835008,2.4193819108,2.4497123368,2.4899291422,2.6759376634,2.3853819777,2.4640867341,2.4383838605,2.5556458195,2.407749813,2.4372160211,2.3904057455,2.5212144051,2.3970257138,2.4911314294),Com_latit = c(48.817486232,48.8434175102,48.8184590234,48.80763306,48.8369277346,48.817486232,48.7813924309,48.8272237802,48.7870344185,48.7851055881,48.7777740327,48.7988482806,48.7975003693,48.7673659741,48.850774145,48.7310836565,48.7455704315,48.7639986698,48.6984085023,48.7943408252,48.7370284871,48.7743556726,48.521906366,48.7605484721,48.7487216313,48.8049756134,48.7318078686,48.8227205454,48.8178750802,48.7895775429,48.752238906,48.7420418963,48.7455704315),longHop = c("2.5278578819","2.5278578819","2.5379180015","2.4644976881","2.4644976881"),latHop = c("48.833479077","48.833479077","48.838914482","48.797596946","48.797596946")),row.names = c(NA,-264L),class = "data.frame")

还有我的脚本:

library(geosphere)
 library(leaflet)
 library(tidyverse)
 
mydataflow<-mydata%>%
  group_by(codeGeo,finessGeoDP) %>%add_tally(name = "nb_patient")%>%# number of patient per municipality
  ungroup()%>%
  distinct(codeGeo,finessGeoDP,.keep_all = T)%>%
  arrange(codeGeo,desc(nb_patient))%>%group_by(codeGeo)%>%
  mutate(pct = nb_patient/sum(nb_patient)*100,cum_pct = cumsum(pct)) %>%top_n(n=-2)%>%
  ungroup()
mydataflow$longHop<-as.numeric(mydataflow$longHop)
mydataflow$latHop<-as.numeric(mydataflow$latHop)
# dfflows<-st_drop_geometry(mydataflow)
flowsCom <- gcIntermediate(mydataflow[,c("Com_long","Com_latit")],mydataflow[,c("longHop","latHop")],sp = TRUE,addStartEnd = TRUE)

flowsCom$Number <- mydataflow$nb_patient
flowsCom$origines <- as.character(mydataflow$codeGeo)
flowsCom$destinations <- as.character(mydataflow$finessGeoDP)

Label <- paste0(flowsCom$origines," to ",flowsCom$destinations," : ",as.character(flowsCom$Number))
pal<- colorFactor(c("#FF3333"),flowsCom$destinations)


flowmap<-leaflet() %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addCircles(data=mydataflow,lng = ~ longHop,lat = ~ latHop,weight = 0,radius = ~400,popup = ~ paste(finessGeoDP),color = "darkred",fillOpacity = 0.7)%>%
  addCircles(data=mydataflow,lng = ~ Com_long,lat = ~ Com_latit,radius = ~300,popup = ~ paste(codeGeo),color = "green",fillOpacity = 0.7)%>%
  setView(lng =2.4644976881,lat =48.797596946,zoom = 11) %>%  
  addpolylines(data = flowsCom,weight = ~Number/2,label = Label,group = ~origines,color = ~pal(destinations))

我想做一些看起来有点像这样的东西,即使没有那么复杂: https://jwasilgeo.github.io/Leaflet.Canvas-Flowmap-Layer/docs/main/

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)