我有一个GeoJSON地图,可以在本地使用Rstudio IDE中的传单和打开的街道地图图块进行渲染,但是当在地图的各个区域中单击时,地图不会显示要素和属性(嵌入在jeojson文件中)。地图。当在github上托管文件时,github会自动选择它并响应点击 - 如图所示。查看R帮助文档中的信息,但找不到任何信息。
leaflet() %>%
addProviderTiles("Hydda.Full") %>%
setView(lng = -77.03687, lat = 38.90719, zoom = 12) %>%
addGeoJSON(topoData, weight = 4, color = "red",fill = TRUE)
答案 0 :(得分:4)
有三种方法可以做到。
1)拥有一个名为“弹出式”的属性'对于geojson中的每个功能。如果有一个,则Leaflet会将弹出窗口绑定到该要素,其内容等于' popup'的值。属性 https://github.com/rstudio/leaflet/blob/master/javascript/src/methods.js#L493
问题是,如果你没有一个,而且大多数geojson都没有弹出一个'弹出的'属性,然后你必须在R方面添加。即将geojson字符串转换为列表并迭代地将弹出属性添加到每个要素并将其转换回geojson字符串。
2)将geojson转换为R中的sp对象,并使用add(PolyLines / Polygons / Markers)等的弹出功能。 这不是一个糟糕的选择,因为sp对象处理比geojson字符串或列表更优雅。
演示http://rpubs.com/bhaskarvk/leaflet-geojson(我不会在那里弹出标签,但你明白了。)
3)中间地带,使用https://github.com/bhaskarvk/leaflet.extras addGeoJsonChoropleth(),它允许您指定任何属性或自定义JS代码来确定弹出内容。 例如http://rpubs.com/bhaskarvk/geojson-choropleth
我喜欢3最好的因为它允许我添加一个GeoJSON而不需要在R端进行修改或转换。唯一的问题是着色是在JS方面完成的,它使用chroma.js提供的托盘,而1和2允许你使用与其他添加(形状)方法一致的着色技术。
答案 1 :(得分:1)
这是一个可重复的示例,可以生成与您的图像类似的内容:
library(mapview)
library(geojsonio)
## write data to disk as GeoJSON
geojson_write(breweries91, file = "breweries91.geojson")
## read back into R as Spatial* object
dat <- geojson_read("breweries91.geojson", what = "sp")
## plot using mapview
mapview(dat)
## or use leaflet with mapview::popupTable
leaflet() %>%
addProviderTiles("Hydda.Full") %>%
addCircleMarkers(data = dat, popup = popupTable(dat))
显然,只有在显示适当的导入策略才能获得popupTable
兼容的数据结构时,才需要写入GeoJSON部分。通常,在处理空间数据时,我建议使用包sp
提供的R的适当空间类,现在对于矢量数据使用sf
,对栅格数据使用raster
。