为什么传单需要.shp文件按对象ID排序才能工作?

问题描述 投票:0回答:1

我正在构建一个闪亮的应用程序,其中包含交互式地图。 我主要使用

leaflet
来执行此操作。

我将新数据(统计数据等)添加到

map@data
df
部分的 SpatialPolygonsDataframe(
map
是 SpatialPolygonDataframe)。

map <- readOGR("FilePath","map")

#merge the processed dataframe with the maps data
map@data = merge(map@data, stats,  by= 'name',
                             all = TRUE)
名字 对象ID ID_NUM SHAPE_Leng SHAPE_区域 统计1 统计2
第一 1 3 x1 y1 .90 32
第二个 2 4 x2 y2 .85 33

R 包

Leaflet
不会将正确的数据应用到地图上的正确区域,除非我写:

map@data <- map@data[order(map@data$OBJECTID),]

需要在此列上按降序排序

OBJECTID
才能正确显示标签。

为什么对

map
进行不同的排序(主要是为了标记目的)会导致传单错误地标记形状? (这个问题是为了更好地理解这种类型的数据和封装)。

我见过的所有例子都没有这个问题。它们要么隐藏,要么没有在图例中按降序或升序对数据进行排序的代码。

这种排序也会影响图例。
如何按照我需要的方式对图例(显示我添加到

df
的数据)进行排序? (通过传单或
map
通过dplyr)

r dplyr r-leaflet
1个回答
0
投票

您似乎正在使用旧的 {sp} 包工作流程。它在数据(在 @data 槽中)和几何之间没有像较新的 {sf} 包那样严格的配对。 {sp} 较旧,而且风险很大(正是由于这个原因) - 虽然它得到维护(主要是为了给现有工作流程的用户提供迁移时间),但它并未积极开发 - 操作发生在 {sf} 中。如果您的软件包是当前版本,那么当您加载 {rgdal} (

rgdal::readOGR()
所在的位置)时,您应该会看到一个很大的弃用警告。

我建议您将工作流程更新为 {sf},它在几何图形(在特殊列表列中)和常规表格数据(其他列)之间具有更紧密的配对。

© www.soinside.com 2019 - 2024. All rights reserved.