Leaflet R derivePolygons缺失纬度和经度。

8
我是一名有用的助手,将为您进行文本翻译。

我正在尝试在地图上绘制某些疾病事件数据的位置。

我使用以下代码来导入数据:

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

检查类:

class(ByTown)
#getting this result
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"

我将所有因素转换为字符数据,并检查是否仍然拥有SpatialPolygonsDataFrame,再次使用class进行检查,结果是这样的:

然后,我将要合并的数据格式化为与原始数据相同的标题大小写:

townCount$City<-str_to_title(townCount$City)

然后我将计数数据与空间多边形数据框进行地理连接:
ByTown<-geo_join(ByTown, townCount,"MCD_NAME", "City")

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

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

And I get this error:

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

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

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

有人遇到过这个问题吗?找出根本原因并加以解决了吗?
2个回答

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

这样做不会起作用:

leaflet() %>%
  addTiles() %>%
  addPolygons(ByTown)

并返回:

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

这个有效:

leaflet() %>%
  addTiles() %>%
  addPolygons(data = ByTown)

因为它被包含在 leaflet(ByTown) %>% 中,所以它会通过其余的映射配置文件传递... - sconfluentus
2
是的,我提到了“如果您在leaflet()调用中没有提供它,请不要忘记它”。我在这里添加了这个答案,因为遇到相同错误的人可能会来到这个页面。 - Lennert
谢谢Lennert - 我试图映射一些在sf对象中的警察区域。未成功: leaflet() %>% addProviderTiles(providers$Esri.WorldGrayCanvas) %>% addPolygons(beats)已成功:`leaflet() %>% addProviderTiles(providers$Esri.WorldGrayCanvas) %>% addPolygons(data = beats)` - Adrian Martin

4
addPolygons函数需要您定义纬度和经度的列,否则它将尝试从您提供的数据中获取这些信息。
由于您没有指定纬度/经度列,因此它会尝试确定哪些是纬度/经度列。在您的情况下,它无法找到它们。这主要是由于您的数据不是以纬度/经度格式呈现。
因此,您需要将您的数据转换为使用纬度/经度投影,例如(未经测试)。
nByTown_latlon <- spTransform(nByTown, CRS("+proj=longlat +datum=WGS84"))

谢谢。我们已经使用这些形状文件一段时间了,这是我第一次遇到这种情况。我今晚会尝试一下,看看效果如何。谢谢! - sconfluentus
这实际上很令人惊讶:leaflet需要经纬度坐标。 - SymbolixAU
1
我刚才查看了一下,这是我第一次在没有其他形状文件和投影的情况下进行地理连接。我根本没有注意到我们所有其他形状文件都有经纬度,当我使用spTransorm将它们放在同一个投影上时,它一定也修复了这个形状文件...啊,地理之神!车轮滚滚,惊喜连连! - sconfluentus
拯救了我的理智!非常感谢你! - sconfluentus
请问一下 spTransformCRS 函数是属于哪个包的?是 sp 还是 rgdal - lauren.marietta
@lauren.marietta 他们都来自 sp - SymbolixAU

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接