簡體   English   中英

如何從shapefile傳單R訪問多邊形信息

[英]How to access polygon information from shapefile leaflet R

我使用https://data.london.gov.uk/dataset/statistical-gis-boundary-files-london和閃亮的R和傳單制作了倫敦地圖。 我向shapefile添加了一個屬性,現在希望當用戶單擊特定多邊形時能夠突出顯示shapefile並打印信息。

我查看了閃亮的傳單ploygon click事件R傳單中的Marker鼠標單擊事件是否有光澤以及如何正確實現input $ map_marker_click? ,並且知道我需要使用ObserveEvent ,但無法正確實現它。

我的代碼是:

library(shiny)
library("rgdal")
library(leaflet)

shapeData <- readOGR('statistical-gis-boundaries-london/ESRI/LSOA_2004_London_Low_Resolution.shp')
shapeData <- spTransform(shapeData, CRS("+proj=longlat +ellps=GRS80"))
shapeData$col=sample(c('red','yellow','green'),nrow(shapeData),1) #add some value you want to map
borough=read.csv('BoroughCentres.csv')

ui=fluidPage(
  fluidPage(
    leafletOutput('LSOAMap'),
    p(),
    selectInput('LANAME','Borough',
                choices = unique(shapeData$LA_NAME))
  )

) 


server=function(input, output) {

  output$LSOAMap <- renderLeaflet({
    llong=borough[borough$Borough==input$LANAME,3]
    llat=borough[borough$Borough==input$LANAME,4]

   bor=subset(shapeData,shapeData$LA_NAME %in% input$LANAME)
    leaflet()  %>% addTiles() %>% 
      setView(lng = llong, lat=llat,zoom=13) %>% 
      addPolygons(data=bor,weight=2,col = 'black',fillOpacity = 0.2,fillColor = bor$col,
                  highlightOptions = highlightOptions(color='white',weight=1,
                                                      bringToFront = TRUE)) %>% 
      addMarkers(lng = llong,lat=llat,popup=input$LANAME) 
  }) 

}
shinyApp(ui, server)

我嘗試添加以及session作為參數:

  observe({
    click <- input$map_marker_click
    if (is.null(click))
      return()

    print(click)
    text <-
      paste("Lattitude ",
            click$lat,
            "Longtitude ",
            click$lng)

    leafletProxy(mapId = "LSOAMap") %>%
      clearPopups() %>%
      addPopups(dat = click, lat = ~lat, lng = ~lng, popup = text)

    # map$clearPopups()
    # map$showPopup(click$latitude, click$longtitude, text)
  })

無濟於事。

我想要的是,當用戶突出顯示特定形狀時,文本會彈出並顯示shapefile中對應的STWARDNAME

自治市鎮的前幾行是:

> head(borough)
               Borough   LA_CODE        long      lat
1       City of London E09000001 -0.09194991 51.51814
2 Barking and Dagenham E09000002  0.13064556 51.54764
3               Barnet E09000003 -0.20416711 51.61086
4               Bexley E09000004  0.13459320 51.45981
5                Brent E09000005 -0.26187070 51.55697
6              Bromley E09000006  0.03734663 51.38836

您非常接近,但是有一些語法問題,我認為這使您感到困惑。

首先,您沒有從SPDF中正確選擇想要的STWARDNAME ,因此R無法知道要顯示哪個STWARDNAME 我加了這條線

popup = subset(shapeData, LA_NAME == input$LANAME )$STWARDNAME

另外,您應該將highlightOptions作為選項傳遞時才應highlight

最后,由於您對多邊形的鼠標懸停更加感興趣,因此我刪除了彈出標記,並更改為highlight以便在將鼠標懸停在多邊形上時highlight名稱:

leaflet()  %>% addTiles() %>% 
  setView(lng = llong, lat=llat,zoom=13) %>% 
  addPolygons(data=bor,weight=2,col = 'black',fillOpacity = 0.2,fillColor = bor$col,
              highlight = highlightOptions(color='white',weight=1,
                                                  bringToFront = TRUE), label= popup)

產生: 在此處輸入圖片說明

@Stedy的回答很棒,而且更好,我只是采用了另一種方式。 我添加了一個圖層ID向量,並彈出了查找STWARDNAME的決定

lid=as.vector(row.names(bor@data))
pu=bor@data[row.names(bor@data)==lid,'STWARDNAME']

,然后在使地圖layerId = lid,popup = pu,同時添加了兩個參數。 用戶單擊區域時顯示的彈出窗口

bor=subset(shapeData,shapeData$LA_NAME %in% input$LANAME)
lid=as.vector(row.names(bor@data))
pu=bor@data[row.names(bor@data)==lid,'STWARDNAME']
leaflet()  %>% addTiles() %>% 
  setView(lng = llong, lat=llat,zoom=13) %>% 
  addPolygons(data=bor,weight=2,col = 'black',fillOpacity = 0.2,fillColor = bor$col,
              layerId = lid,popup = pu,
              highlightOptions = highlightOptions(color='white',weight=1,
                                                  bringToFront = TRUE)) %>% 
  addMarkers(lng = llong,lat=llat,popup=input$LANAME) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM