【发布时间】:2017-07-31 09:11:29
【问题描述】:
我有一个具有以下坐标的数据集:
lat <- c(-5.9, 35.9, 5.13, -3.4)
lon <- c(-19.9, -6, -39.9, 9.38)
所以纬度范围是 -5.9 - 35.9,而经度范围是 -39.9 - 9.38。四个纬度/地块坐标代表区域的边界(四个角)。
我想做的是创建一个网格,将这个范围分割/分隔成 20 个(或更多)相等的单元格。我尝试了以下方法,将实例分成相等的部分并创建一个新列,为每个拆分分配一个数字 (1-20)。
df$LAT_SPLIT <- NA
df$LAT_SPLIT <- as.numeric(cut2(df$LAT, g=20))
但是,每个分割的坐标范围(度)都不相同,这会创建不同大小的网格。我的问题是,如何将上述坐标分开以创建具有相等单元格的网格,同时创建一个新列,每个单元格都分配有一个数字?
我读过不同的方法,每个单元格代表纬度变化 1 度 * 经度 30 分钟,但我不知道该怎么做。我试图更改上面的代码,以便纬度的每个度数变化都会拆分纬度列,但我也不太清楚如何做到这一点,我相信你可以使用序列?即使我可以让它工作,经度仍然会有不同的范围..
我已经在 R 中尝试过,但也欢迎任何使用 Python 的建议 非常期待任何可能的解决方案,谢谢!
可重现的代码
df <- structure(list(LAT = c(35.61226, 35.34986, 35.17794, 34.60425,34.40356, 33.94433, 33.41834, 16.89566, 16.89561, 16.89561),
LON = c(-9.604802, -9.803048, -9.921968, -10.30782, -10.44971,-10.76656, -11.13053, -24.99776, -24.99788, -24.99773)),
.Names = c("LAT","LON"), class = "data.frame", row.names = c(1L, 2L, 3L, 4L, 5L,6L, 7L, 44161L, 44162L, 44163L))
【问题讨论】:
-
您是在寻找 Hmisc 包中的 cut2 还是 ggplot2 中的 cut_interval?
-
seq(minvalue, maxvalue, length.out = 21)将为您提供 20 个等距间隔。然后,您可以将其输入cut(values, breaks=seq(...))以将您的数据分配到这些间隔中。 -
您想要正好 20 个单元格还是需要特定的分辨率和/或正方形大小?
-
@Val 感谢您的回复。我并不完全需要 20 个单元,但我希望它们都具有相同的大小。我只需要将上述坐标(网格)的范围划分为单元格,以便我可以看到每个单元格有多少坐标(纬度/经度的实例)。我的 df 由大约 45,000 个具有纬度/经度坐标的实例组成。其中一些坐标在某些区域更频繁地出现,这就是为什么我需要这些单元格,以便我可以将它们分配给不同的单元格。只是不确定最好的方法是什么。如果有人知道如何编码,将不胜感激!
-
@MLEN 欢迎任何可行的方法,我不太挑剔,请参阅上面的评论,它可能会使我想做的事情更清楚,谢谢
标签: python r cell geospatial latitude-longitude