问题标签 [sf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1240 浏览

r - 使用 geom_sf 读取 shapefile 和绘图返回错误

我希望使用新的 sf 包和geom_sf()ggplot2 绘制丹麦的一些地图。我有一个来自公共地图服务的 shapefile,共有 4 个文件(DK.shp、DK.dbf、DK.shf 和 DK.prj)。我在此处以 zip 文件的形式提供了数据(如果有更好的方法可以在 Stack Overflow 上共享文件,请告诉我,我不确定)。

在 RI 中尝试加载文件:

geom_sf() 按预期绘制 buildin nc.shp 文件,但 DK.shp 使其返回:

x %*% Mat 中的错误:不符合要求的参数另外:有 50 个或更多警告(使用 warnings() 查看前 50 个)

提到的 50 个警告都是以下类型:

我不确定这是我提供的数据文件的问题,还是 sf 或 ggplot2 中的错误。关于如何解决这个问题的任何建议?

更新 查看 st_geometry() 返回的数据,我发现以下内容:

因此,我尝试读取的 shapefile 包含不同格式或其他格式的值。另外,所有 -999 值是怎么回事?我该如何处理?

0 投票
3 回答
2990 浏览

r - 将 POLYGON 聚合为 MULTIPOLYGON 并保留 data.frame

我有一个sfPOLYGON 几何类型的对象。我想使用分组属性(group_attr)将这些多边形聚合到 MULTIPOLYGON 中,并使用属性表加入一个新的 MULTIPOLYGON 对象。因此,结果,我将拥有一个sf包含两行三列的对象(group_attr、second_attr、geometry)。我已经尝试过使用st_cast- 它适用于sfc对象,但不适用于sf对象。是否可以使用包来做到这一点sf

在此处输入图像描述

0 投票
1 回答
5591 浏览

r - R:处理光栅包中的 sf 对象

以前我使用raster::cropraster::mask使用 Spatial* 类的 shapefile,使用rgal::readOGR.

我只是在“升级”我的脚本以sf用于读取和操作多边形。

光栅::裁剪

raster::crop期望一个“范围”对象作为第二个参数。到目前为止,这是从 Spatial* 对象中自动提取的。所以我只能这样做raster::crop(raster, polygon)
为了让它与一个sf对象一起工作,我可以称之为raster::crop(raster, as.vector(st_bbox(polygon)))一个丑陋的解决方法。

光栅::掩码

由于raster::mask显然期望Raster* object or a Spatial* object唯一的解决方案是sf使用as("Spatial").

我假设这个问题适用于所有raster功能?我是否忽略了某些东西,或者只是raster包(还)不能与sf对象一起使用?

0 投票
2 回答
1843 浏览

r - ggplot2(和sf)中世界地图的整个地球多边形

在绘制世界地图时,有一个问题ggplot2:它用相同的颜色为整个背景着色,包括实际上不属于地球的图的角落,请参见下面由以下代码生成的快照(它使用前沿sfabdggplot2版本,但问题是通用的,请参阅下面提到的博客文章):

在此处输入图像描述

为了能够很好地绘制地球轮廓,在D3.js一个特殊的 GeoJSONtype{type: "Sphere"}添加了,请参阅此线程,它可以在此处看到:它是以下快照中的整个地球外部黑色边框:

在此处输入图像描述

我在/中发现的唯一技巧是 Matt Strimas-Mackey 在他的博客文章Mapping the Longest Commercial Flights in R中发布的技巧,请参阅边界框和标线部分以及and函数。Rggplot2make_bboxproject_recenter

这些是相当多的代码,我想知道一些 sfgeom_sf代码是否会使代码更干净/更简单,所以我尝试了:

我得到的只是一个额外的“反子午线”(注意来自北极的线......)并且没有充满海洋#D8F4FF......并且底部的多边形非常不规则(D3.js专家做了一些智能自适应重新采样以提高投影线的准确性...)

在此处输入图像描述

关于我尝试为 ggplot2 世界地图获取整个世界多边形的问题有什么想法吗?(感谢您阅读本文!)

0 投票
1 回答
755 浏览

r - 空间连接两个简单特征 {sf} 超过 1 百万。尽可能快地输入

我希望这不是太微不足道,但我真的找不到答案,而且我对这个话题太陌生,无法自己想出替代方案。所以这里是问题:

我有两个 shapefile x 和 y 代表 Sentinel2 卫星图像的不同处理级别。x 包含大约 1.300.000 个多边形/段,完全覆盖图像扩展,没有任何进一步的重要信息。
y 包含大约 500 个多边形,代表图像的无云区域(也覆盖了图像的大部分,除了一些“云洞”)以及 4 列中使用的图像的信息(传感器、时间......)

我正在尝试将图像信息添加到 x 被 y 覆盖的地方。很简单?我只是找不到不花几天时间就实现它的方法。

我将 x 作为一个简单的特征 {sf} 读取,因为使用 shapefile / readOGR 读取它需要很长时间。我和 y 尝试了不同的事情

当我尝试合并(x,y)时,我只能取一个 sf,因为合并不支持两个 sf。合并 x (as sf) 和 y (as shp) 给我错误“无法分配大小为 13.0 Gb 的向量”

所以我尝试sf::st_join(x,y)了,它支持两个变量都是 sf 但现在 28 小时仍未完成

sf::st_intersect(x,y)10.000 个片段子集大约需要 9 分钟,因此对于整个片段来说可能不会快很多。

将 x 设置为几个较小的部分可以解决整个问题还是有另一个简单的解决方案?我可以对我的工作区做点什么来使合并工作,还是根本没有捷径可以加入这么多多边形?

提前非常感谢,我希望我的描述不会太模糊!

我的微型工作站:
win 7 64 位
8 GB RAM
intel i7-4790 @ 3,6 GHz

0 投票
0 回答
67 浏览

r - R函数不会强制sf data.table

我试图仅将我的 sf data.table 中的某些列从字符强制转换为数字。当我在没有函数的情况下编写代码时,它可以工作。

columns <- c("STATEFP", "COUNTYFP", "TRACTCE", "BLKGRPCE", "GEOID", "ALAND", "AWATER", "INTPTLAT", "INTPTLON") for (i in columns){ sfphl[[i]] <- as.numeric(sfphl[[i]])}

当我将相同的代码加载到函数中时,它不再起作用。

我的函数可能遗漏了一些东西,我尝试在函数末尾使用 return(x) 或 x 无济于事。我不认为这与 data.table 是一个简单的功能有关,但它可能是。

0 投票
4 回答
5935 浏览

r - 如何通过sf找到一个点属于哪个多边形

我有一个对象,其中包含通过文件sf获得的都市区的多边形信息(区域) 。.shp对于给定的纬度/经度对,我想确定它属于哪个区域。我想我可以利用sf::st_contains(),但无法以正确的格式获取纬度/经度。

0 投票
1 回答
476 浏览

r - 在同名的 CRAN 包旁边安装一个 github 包?

是否有任何合理的方法可以将 CRAN 包与同名的 github 包一起安装?

具体来说,我在github 页面的分支中的geom_sf()geom之后: https ://github.com/tidyverse/ggplot2/tree/sf 。所以我可以像这样安装 sf 分支:sfggplot2

像这样的 CRAN 版本:

但是,该sf分支ggplot2在其他有用的功能方面落后,所以我不想完全恢复。所以我想知道这里最好的方法是什么。我可以同时安装两者但以某种方式调用一个包 ggplot2_sf 吗?基本上我希望能够将 geom_sf 与当前 CRAN 上的 ggplot2 的所有功能一起使用。

我曾认为也许最好的解决方案是分叉 ggplot2 存储库,合并 master 和 sf 分支,然后安装它。但我想知道是否有更好的方法?

更新

所以事实证明,您需要使用 withr 指定 lib 目录(参见此处)。我试过这个:

这返回了这个错误:

curl::curl_fetch_disk(url, x$path, handle = handle) 中
的错误:SSL CA 证书有问题(路径?访问权限?)

所以我可以像这样将 SSL 认证设置为零:

但是,这不会将其安装在我之后的目录中:

从 URL https://api.github.com/repos/tidyverse/ggplot2/zipball/sf下载 GitHub 存储库 tidyverse/ggplot2@sf 安装 ggplot2 安装 1 个包: utils::install.packages 中的摘要警告(pkgs,repos = repos , type = type, dependencies = dependencies, : 'lib = "C:/Program Files/R/R-3.3.3/library"' is not writable in utils::install.packages(pkgs, repos = repos, type = 类型,依赖项 = 依赖项,:无法安装软件包

关于我可能做错的任何其他想法?

0 投票
1 回答
1223 浏览

r - 将多个“.shp”文件作为一个对象读取?

如何将多个.shp文件作为一个对象读取?

我想像在代码下一样简单地阅读。

将多个文件作为对象读取的最佳方法是什么?

0 投票
1 回答
1325 浏览

r - 无法在 sf 线串对象上使用 ggplot2::geom_sf 的 alpha

这需要 R 中的库 sf 和 ggplot2。我有一个带有 4 个线串的 sf 对象。其中 3 个是相同的,一个是扩展的:

如果我在 ggplot2 中用 alpha = 0.1 绘制它,我希望对角线比垂直线更暗,因为它更频繁地出现。这是 ggplot2 中的正常(非科幻)行为。

但是,所有行似乎都是相等的 alpha。为什么会出现这种情况?

更新:如果我尝试

图例显示了 alpha 的变化,就好像它是一个多边形......也许 geom_sf 没有正确处理线条的 alpha(注意,上面的代码需要 dplyr 和 magrittr 包)