Leaflet R derivePultigons缺少lat缺失长

sco*_*tus 5 r dataframe rgdal leaflet

我试图在地图上绘制一些疾病事件数据的网站.

我用它来导入数据:

ByTown<-readOGR(dsn="C:/temp/lyme/Towns", layer="Towns", encoding = "UTF-8", verbose= FALSE)
Run Code Online (Sandbox Code Playgroud)

检查班级:

class(ByTown)
#getting this result
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"
Run Code Online (Sandbox Code Playgroud)

然后我将所有因素转换为字符数据并检查我是否还有再次SpatialPolygonsDataFrame使用class,我这样做:

然后我将我希望合并的数据格式化为与原始相同的标题案例:

townCount$City<-str_to_title(townCount$City)
Run Code Online (Sandbox Code Playgroud)

然后我将计数数据geo_join到空间多边形数据框:

ByTown<-geo_join(ByTown, townCount,"MCD_NAME", "City")
Run Code Online (Sandbox Code Playgroud)

然后我设置调色板并运行映射:

pal = colorQuantile("PuOr",ByTown$count, n=5 )
map<-leaflet(ByTown) %>%
  addProviderTiles("CartoDB.Positron")%>%
  addPolygons(fillColor = ~pal(count),
            color = "#000000",
            stroke = TRUE,
            weight = 1,
            smoothFactor = 0.5,
            options(viewer = NULL))
map
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

Error in derivePolygons(data, lng, lat, missing(lng), missing(lat), "addPolygons") : 
  addPolygons must be called with both lng and lat, or with neither.
Run Code Online (Sandbox Code Playgroud)

我查看了坐标插槽,那里有数据......我对错误感到困惑,没有在网上找到任何有用的答案.这是坐标槽中第一个多边形的头部:

head(nByTown@polygons[[1]]@Polygons[[1]]@coords )

           [,1]     [,2]
[1,] 1036519 916318.7
[2,] 1036039 916355.8
[3,] 1031757 916299.7
[4,] 1027474 916244.5
[5,] 1026709 916198.1
[6,] 1026826 916248.3
Run Code Online (Sandbox Code Playgroud)

每个人都有这个问题,确定根本原因并修复它?

Len*_*ert 8

如果您未在调用中提供data = ...变量名,addPolygons()请不要忘记添加变量名leaflet().我收到了同样的错误并花了几个小时寻找解决方案:(.

这并不能正常工作:

leaflet() %>%
  addTiles() %>%
  addPolygons(ByTown)
Run Code Online (Sandbox Code Playgroud)

并返回:

Error in derivePolygons(data, lng, lat, missing(lng), missing(lat), "addPolygons") : 
  addPolygons must be called with both lng and lat, or with neither.
Run Code Online (Sandbox Code Playgroud)

这有效:

leaflet() %>%
  addTiles() %>%
  addPolygons(data = ByTown)
Run Code Online (Sandbox Code Playgroud)

  • 是的,我提到“如果您没有在`leaflet()`调用中提供它,请不要忘记”。我在这里添加了这个答案,因为遇到相同错误的人可能最终会查看此页面。 (2认同)

Sym*_*xAU 4

addPolygons函数要么要求您定义纬度和经度列,要么它会尝试从您提供的数据中导出它们。

鉴于您尚未指定纬度/经度列,它会尝试找出它们是哪些。就您而言,它找不到它们。这主要是由于您的数据不是纬度/经度格式。

因此,您需要转换数据以使用纬度/经度投影,例如(未经测试)

nByTown_latlon <- spTransform(nByTown, CRS("+proj=longlat +datum=WGS84"))
Run Code Online (Sandbox Code Playgroud)