问题标签 [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 投票
2 回答
2071 浏览

r - ggplot and geom_sf and Error: length(rows) == 1 is not TRUE

我正在尝试使用ggplot2新的(并且很棒的)简单功能映射包将几个地理数据集绘制在一起geom_sf。当我试图强制线型特征的图例显示为一条线,我对图例和错误代码Error: length(rows) == 1 is not TRUE(似乎属于)感到困惑。ddply

这是我调用的生成下图的代码;一切都很好,除了图例,它的 Line1 显示了一个框/填充。

这是图表:

在此处输入图像描述

现在,如果我尝试使用show.legend= TRUE= "line")强制图例看起来像一条线,在下面

我得到错误Error: length(rows) == 1 is not TRUE。如果我单独绘制任一实例,geom_sf则不会出现错误,并且可以使用show.legend = "line".

注意:我没有包含一个最小的可复制示例,因为我无法通过易于共享的数据来复制它;请参阅使用 geom_sf 时向 ggplot2 添加多个图例。我已经尝试了几天来找到答案,但没有运气。

0 投票
1 回答
132 浏览

r - 用 tmap 和简单的功能打破美国各州的部分

我正在尝试使用 tmap 和简单的功能制作一张与美国其他州分开的地图。我轻推坐标所需的数量(在下面的示例中为东部地区) - 但出于某种原因,佛罗里达州和纽约州拒绝移动。我尝试在循环外手动调整,结果相同。如果我想将 sf 对象移动一个常数,那么接近它的最佳方法是什么?

还有——为什么密歇根看起来像融化在密歇根湖里?

在此处输入图像描述

0 投票
1 回答
1201 浏览

r - 在多个地理位置使用 st_buffer 制作多个圈子

我正在尝试从包含经度和纬度的数据框中创建圆圈,同时考虑到每个圆圈的半径需要精确为 400 海里。有许多点(约 8000 点)对应于世界各地的机场。我一直在使用 sf 包用 st_buffer 创建圆,但是这个函数需要以度为单位的距离参数。我已经看到已解决的问题并不能完全解决我的问题,因为它们涉及可以使用网格的特定位置的单个圆圈。这是我使用的代码:

我需要将这些圆圈作为数据框中的 sf 对象,因为我会将它们用作多边形来查找它们与其他数据框中的空间线(也是 sf)之间的交点。

结果如下 - 三个圆圈大小不同,其中两个扭曲,一个缺失:

在此处输入图像描述

0 投票
1 回答
1204 浏览

r - 在不规则网格上绘制数据的有效方法

我使用在不规则二维网格上组织的卫星数据,其尺寸是扫描线(沿轨道尺寸)和地面像素(跨轨道尺寸)。每个中心像素的经纬度信息存储在辅助坐标变量中,以及四个角坐标对(经纬度坐标在 WGS84 参考椭球上给出)。数据存储在 netCDF4 文件中。

我正在尝试做的是在投影地图上有效地绘制这些文件(可能还有文件的组合——下一步!)。

到目前为止,我的方法受到Jeremy Voisey对这个问题的回答的启发,一直是构建一个数据框,将我感兴趣的变量与像素边界联系起来,并ggplot2用于geom_polygon实际绘图。

让我说明一下我的工作流程,并为这种幼稚的方法提前道歉:我刚开始使用 R 编码一两周。

笔记

要完全重现问题:
1. 下载两个数据帧:so2df.Rda (22M) 和pixel_corners.Rda (26M)
2. 将它们加载到您的环境中,例如

  1. 跳转到“合并数据框”步骤。

最初设定

我要从我的文件中读取数据和纬度/经度边界。

因此,对于这个文件/通道,3244 条扫描线中的每一条都有 450 个地面像素。

创建数据框

在这里,我创建了两个数据框,一个用于值,进行了一些后处​​理,一个用于纬度/经度边界,然后合并这两个数据框。

我将此数据框保存为so2df.Rda 此处(22M)。

正如预期的那样,纬度/经度边界数据帧是值数据帧的四倍(每个像素/值四个点)。
我将此数据框保存为pixel_corners.Rda 此处(26M)。

合并数据框

然后我按 id 合并两个数据框:

如您所见,这是一个 CPU 密集型进程。我想知道如果我一次处理 15 个文件会发生什么(全球覆盖)。

绘制数据

现在我已经将像素角与像素值相关联,我可以轻松地绘制它们。通常,我对轨道的特定区域感兴趣,所以我制作了一个函数,在绘制输入数据帧之前对其进行子集化:

然后我在感兴趣的区域上调用我的函数,例如让我们看看夏威夷发生了什么:

夏威夷上空的 SO2 总柱

它们在那里,我的像素,以及似乎是来自莫纳罗亚的 SO2 羽流。请暂时忽略负值。如您所见,像素的区域向着条带的边缘变化(不同的分箱方案)。

我尝试使用 ggmap 在谷歌地图上显示相同的情节:

这就是我得到的:

在谷歌地图上绘制

问题

  1. 有没有更有效的方法来解决这个问题?我正在阅读这个sf包,我想知道我是否可以定义一个点数据框(值 + 中心像素坐标),并sf自动推断像素边界。这将使我不必依赖原始数据集中定义的纬度/经度边界,也不必将它们与我的值合并。我可以接受在朝向条带边缘的过渡区域的精度损失,否则网格非常规则,每个像素为 3.5x7 km^2 大。
  2. 将我的数据重新网格化到常规网格(如何?),可能通过聚合相邻像素来提高性能?我正在考虑使用该raster包,据我所知,它需要常规网格上的数据。这在全球范围内应该很有用(例如欧洲的地块),我不需要绘制单个像素——事实上,我什至看不到它们。
  3. 在谷歌地图上绘图时是否需要重新投影我的数据?

[奖金美容问题]

  1. 有没有更优雅的方法在由四个角点标识的区域上对我的数据框进行子集化?
  2. 如何更改色阶以使较高的值相对于较低的值突出?我经历过结果不佳的对数刻度。
0 投票
1 回答
1381 浏览

r - 如何将-sf数据框列表转换为R中每行几何的单个数据框?

我正在尝试将下面代码的输出(这是一个sfc 数据帧列表)转换为一个数据帧,其中列包含简单的特征集合- 每个观察一个多边形。

可重现示例的输出和以下预期输出:

我试过 as.data.frame 但它不起作用。我试过 data.frame(t(as.data.frame(df)) 但它不起作用。

可重现示例的输出在左侧:

可重现示例的输出在左侧

0 投票
1 回答
2843 浏览

r - 通过非 sf 列内连接两个 sf 对象

我正在尝试使用内连接或左连接来连接两个 sf 数据帧。这些数据框内部都有几何列。我不断收到错误:
check_join(x, y) 中的错误:y 应该是 data.frame;对于空间连接,使用 st_joinFALSE

下面的可重现示例:

我不想放弃几何,因为我认为这会在之后弄乱我的结果,但欢迎任何解决方案

0 投票
2 回答
1483 浏览

r - 在不规则网格上绘制气候数据的正确方法

我已经将这个问题作为在不规则网格问题上绘制数据的有效方法的一部分,但一般反馈是将原始问题拆分为更易于管理的块。因此,这个新问题。

我使用在不规则二维网格上组织的卫星数据,其维度是扫描线(沿轨道维度,即 Y 轴)和地面像素(跨轨道维度,即 X 轴)。每个中心像素的经纬度信息存储在辅助坐标变量中,以及四个角坐标对(经纬度坐标在 WGS84 参考椭球上给出)。

让我们构建一个玩具数据集,包含一个 12x10 的潜在不规则网格和相关的表面温度测量值。

lon和数据包含我正在使用的原始产品中提供的lat中心像素坐标,存储为二维矩阵,其轴是 ground_pixel(X 轴)和扫描线(Y 轴)。data相同尺寸的矩阵包含我的测量值。然后我将这三个矩阵展平并将它们存储在数据框中。

我想在地图上绘制地面像素(作为四边形),并相应地填充温度测量值。

使用瓷砖我得到:

使用瓷砖

但这不是我所追求的。我可以玩widthheight让瓷砖相互“接触”,但当然这甚至不会接近我想要的目标,即在地图上绘制实际投影的地面像素。
例如,Python 的 xarray 可以根据像素中心坐标自动推断像素边界:

Xarray 解决方案

问题

有没有办法在 R 中实现相同的结果,即:从像素中心自动推断像素边界,并将像素绘制为地图上的填充多边形?也许使用sf包?

我可以在这个问题的答案中看到它已经完成,但我对使用的答案sf有点不清楚,因为它处理不同的投影和潜在的规则网格,而在我的情况下,我想我不必重新 -投影我的数据,此外,我的数据不在常规网格上。

如果这是不可能的,我想我可以在我的产品中使用像素边界信息,但如果这个问题被证明不容易解决,那么这可能是另一个问题的主题。

0 投票
0 回答
202 浏览

r - r - 使用 mapview 绘制线 - 自动连接不准确

我正在尝试使用 mapview::mapview() 绘制航班,但我遇到了这个问题,如果航班从澳大利亚飞往南美洲(跨越太平洋),或者从俄罗斯飞往加拿大(跨越北极) - 见下图。这可以以某种方式解决吗?删除人为引入的直线将解决我的问题,但欢迎其他想法和建议:图片在这里

0 投票
1 回答
653 浏览

r - 什么是 R 中的“非活动开发者路径”?

我正在尝试更新 R 中的包 sf() 。每次尝试执行此操作时都会出现以下错误,有任何关于如何解决此问题的见解吗?:

安装包(“sf”)

有可用的二进制版本,但源版本更高: binary source needs_compilation sf 0.5-5 0.6-0 TRUE

你想从源代码安装需要编译的包吗?y/n: y 安装源包'sf'</p>

尝试 URL ' https://cran.rstudio.com/src/contrib/sf_0.6-0.tar.gz '

内容类型 'application/x-gzip' 长度 7399611 字节 (7.1 MB)

已下载 7.1 MB

  • 安装无效的活动开发者路径 (/Library/Developer/CommandLineTools),缺少 xcrun:/Library/Developer/CommandLineTools/usr/bin/xcrun xcrun:错误:无效的活动开发者路径 (/Library/Developer/CommandLineTools),缺少 xcrun: /Library/Developer/CommandLineTools/usr/bin/xcrun xcrun:错误:无效的活动开发者路径(/Library/Developer/CommandLineTools),缺少 xcrun:/Library/Developer/CommandLineTools/usr/bin/xcrun 配置:CC:配置: CXX: 检查 gdal-config... no no configure: error: gdal-config not found or not executable. 错误:包“sf”的配置失败</li> /Library/Developer/CommandLineTools/usr/bin/xcrun xcrun:错误:无效的活动开发者路径(/Library/Developer/CommandLineTools),缺少 xcrun:/Library/Developer/CommandLineTools/usr/bin/xcrun 配置:CC:配置: CXX: 检查 gdal-config... no no configure: error: gdal-config not found or not executable. 错误:包“sf”的配置失败</li> /Library/Developer/CommandLineTools/usr/bin/xcrun xcrun:错误:无效的活动开发者路径(/Library/Developer/CommandLineTools),缺少 xcrun:/Library/Developer/CommandLineTools/usr/bin/xcrun 配置:CC:配置: CXX: 检查 gdal-config... no no configure: error: gdal-config not found or not executable. 错误:包“sf”的配置失败</li>
  • 删除 '/Library/Frameworks/R.framework/Versions/3.3/Resources/library/sf'</li>
  • 恢复以前的 '/Library/Frameworks/R.framework/Versions/3.3/Resources/library/sf' install.packages 中的警告:安装包 'sf' 的退出状态非零

下载的源码包在'/private/var/folders/t8/3gj53jlj2pn4sl9h2xrh8vmw0000gn/T/RtmpnFWJIZ/downloaded_pa​​ckages'</p>

0 投票
1 回答
1501 浏览

r - r-使用 sf 将线串拆分为多线串

我试图在一个数据帧中以“LINESTRING”sf 格式分割 2 行,在另一个数据帧中以“MULTIPOLYGON”sf 格式分割 2 个圆圈。

在这里,我期待 sf 数据帧有两行,其中有两个多线串,而不是我得到 4 行(有 4 个几何图形)的 sf 数据帧。我只对来自 mls_cidf 的 n 行的小圆形多边形如何从 lndf 的 n 行切割线串感兴趣,而不是两个数据帧中所有行之间的所有组合。获得两个多线串后,我想将它们分隔为线串:

我非常感谢任何意见。期望的输出: 输出