- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个西类牙北部城镇的形状文件,我必须加入组(西类牙语中的自治市或 comarcas)。我已经使用 sf 包中的 st_union 成功加入了它们(每个都是它们自己的具有单个多边形的 SpatialPolygonsDataFrame 对象)。我分别绘制了每个城市,它们看起来不错。
但是,一旦我想将城市合并到一个具有多个多边形的 SpatialPolygonsDataFrame 对象中,我就没法做到了。我已经尝试了三种主要基于这个答案的方法:https://gis.stackexchange.com/questions/155328/merging-multiple-spatialpolygondataframes-into-1-spdf-in-r还有这个https://gis.stackexchange.com/questions/141469/how-to-convert-a-spatialpolygon-to-a-spatialpolygonsdataframe-and-add-a-column-t– 如果我使用 raster::union 它会抛出错误.rowNamesDF<-
中的错误(x, value = value) : 无效的 'row.names' 长度– 如果我使用简单的 rbind,它会抛出错误SpatialPolygonsDataFrame(pl, df, match.ID = FALSE) 错误:对象长度不匹配:pl 有 7 个多边形对象,但 df 有 4 行或 6/11 个城市的类似情况。– 如果我尝试一种 lapply 方法(更复杂),它似乎有效,但我使用传单绘制了它,在尝试 raster::union 或 rbind 时出现错误的市政当局看起来不应该/不看起来当我单独绘制它们时,它们会这样做。
** 市政府 1 和 2 工作正常。例如 3 和 4 没有。 **
下面是重现我的代码所需的两个文件的链接:– 形状文件链接:https://www.dropbox.com/sh/z9632hworbbchn5/AAAiyq3f_52azB4oFeU46D5Qa?dl=0– 链接到包含从城镇到自治市的映射的 xls 文件:https://www.dropbox.com/s/4w3fx6neo4t1l3d/listado-comarcas-gipuzkoa.xls?dl=0
还有我的代码:
library(tidyverse)
library(magrittr)
library(sf)
library(ggplot2)
library(lwgeom)
library(readxl)
library(raster)
#Read shapefile
mapa_municip <- readOGR(dsn = "UDALERRIAK_MUNICIPIOS/UDALERRIAK_MUNICIPIOS.shp")
mapa_municip <- spTransform(mapa_municip, CRS('+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0'))
mapa_municip <- st_as_sf(mapa_municip)
#Read excel that contains mapping from town to municioalities
muni2com <- read_excel("listado-comarcas-gipuzkoa.xls",
sheet=1,
range="A1:C91",
col_names = T)
comarcas <- list()
count <- 0
for (i in unique(muni2com$Comarca)[1:4]){
count <- count + 1
for (k in unique(muni2com$Municipios[muni2com$Comarca==i])){
if (k == unique(muni2com$Municipios[muni2com$Comarca==i])[1]){ # if 1st case, keep this town
temp <- mapa_municip[mapa_municip$MUNICIPIO==k,]
}
if (k != unique(muni2com$Municipios[muni2com$Comarca==i])[1]){ # otherwise, join w previous ones
temp <- sf::st_union(temp, mapa_municip[mapa_municip$MUNICIPIO==k,])
}
}
comarcas[[count]] <- spTransform(as(temp, "Spatial"), CRS('+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0'))
comarcas[[count]]@data <- data.frame(comarca = i)
}
IDs <- sapply(comarcas, function(x)
slot(slot(x, "polygons")[[1]], "ID"))
#Checking
length(unique(IDs)) == length(comarcas)
dfIDs <- data.frame(comarca = IDs)
#Making SpatialPolygons from list of polygons
comarcas2 <- SpatialPolygons(lapply(comarcas,
function(x) slot(x, "polygons")[[1]]))
# Try to coerce to SpatialPolygonsDataFrame (will throw error)
p.df <- data.frame( comarca = unique(muni2com$Comarca)[1:4])
p <- SpatialPolygonsDataFrame(comarcas2, p.df)
# Extract polygon ID's
( pid <- sapply(slot(comarcas2, "polygons"), function(x) slot(x, "ID")) )
# Create dataframe with correct rownames
( p.df <- data.frame( comarca = unique(muni2com$Comarca)[1:4], row.names = pid) )
# Try coertion again and check class
comarcas3 <- SpatialPolygonsDataFrame(comarcas2, p.df)
class(comarcas3)
#Leaflet map
leaflet( options = leafletOptions(zoomControl = F,
zoomSnap = 0.1 ,
zoomDelta = 1
),
data = comarcas3,
) %>%
addProviderTiles(provider="CartoDB.Positron") %>%
htmlwidgets::onRender("function(el, x) {
L.control.zoom({ position: 'topright' }).addTo(this)
}") %>%
clearShapes() %>%
addPolygons(fillColor = "gray",
opacity = 0.8,
weight = 0.3,
color = "white",
fillOpacity = 0.95,
smoothFactor = 0.5,
label = ~comarca,
highlight = highlightOptions(
weight = 1.5,
color = "#333333",
bringToFront = T),
layerId = ~comarca
)
** 请注意,如果您在上面绘制 comarcas[[3]] 或 comarcas[[4]] 而不是 comarcas3,那么这些城市的形状将完全不同。**
我真的很感激你能给我任何提示,我已经解决了好几天了,我无法解决它。我假设问题是由于 rbind 给出的错误引起的,这似乎是最有用的错误,但我不知道它是什么意思。非常感谢您。
最佳答案
您是否绝对需要使用旧的 {sp} 包工作流程?
如果不是,则使用基于纯 {sf} 的工作流将市政当局分解为 comarcas 可能更容易 - 按 comarca 列分组,然后汇总就可以了。
考虑这段代码:
library(tidyverse)
library(sf)
library(readxl)
library(leaflet)
#Read shapefile
mapa_municip <- st_read("UDALERRIAK_MUNICIPIOS.shp") %>%
st_transform(4326)
#Read excel that contains mapping from town to municioalities
muni2com <- read_excel("listado-comarcas-gipuzkoa.xls",
sheet=1,
range="A1:C91",
col_names = T)
# dissolving comarcas using sf / dplyr based workflow
comarcas <- mapa_municip %>%
inner_join(muni2com, by = c("MUNICIPIO" = "Municipios")) %>%
group_by(Comarca) %>%
summarise() %>% # magic! :)))
ungroup()
leaflet(comarcas) %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(color = "red",
label = ~ Comarca)
关于r - 在 R 中加入不同的 SpatialPolygonsDataFrame 对象时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69446715/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!