【问题标题】:Leaflet R derivePolygons missing lat missing long传单 R 派生多边形缺少 lat 缺少 long
【发布时间】:2017-07-03 09:56:51
【问题描述】:

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

我用这个来导入数据:

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"

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

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

townCount$City<-str_to_title(townCount$City)

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

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

我得到这个错误:

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

每个人都有这个问题,找出根本原因并解决它?

【问题讨论】:

    标签: r dataframe leaflet rgdal


    【解决方案1】:

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

    不起作用

    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) %&gt;% 中,所以它通过映射配置文件的其余部分传递...
    • 是的,我提到'如果您没有在leaflet() 电话中提供它,请不要忘记它'。我在此处添加了此答案,因为遇到相同错误的人可能最终会查看此页面。
    • 感谢 Lennert - 我正在尝试绘制 sf 对象中的一些警察节拍。没用:leaflet() %&gt;% addProviderTiles(providers$Esri.WorldGrayCanvas) %&gt;% addPolygons(beats) 没用:leaflet() %&gt;% addProviderTiles(providers$Esri.WorldGrayCanvas) %&gt;% addPolygons(data = beats)
    【解决方案2】:

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

    鉴于您尚未指定纬度/经度列,它会尝试找出它们是哪些列。在您的情况下,它找不到它们。这主要是由于您的数据不是 lat/lon 格式。

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

    nByTown_latlon <- spTransform(nByTown, CRS("+proj=longlat +datum=WGS84"))
    

    【讨论】:

    • 谢谢..我们使用这些形状文件已经有一段时间了,这是我第一次遇到这种情况。我今晚会试试看,看看效果如何。谢谢!
    • 这真是令人惊讶:传单需要纬度/经度坐标
    • 我刚看了,这是我第一次在没有另一个 shapefile 和投影的情况下进行 geo_joined。我根本没有注意到我们所有的其他 shapefile 都有 lat lon,当我使用 spTransorm 将它们放在同一个投影中时,它一定也修复了这个 shape 文件......啊 geoGods!引擎盖下发生了很多事情!
    • 拯救了我的理智!非常感谢!
    • 您能否指定spTransformCRS 函数来自哪些包? sp? rgdal?
    猜你喜欢
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多