用R计算与边界的距离

Posted

技术标签:

【中文标题】用R计算与边界的距离【英文标题】:Calculate distance from a border with R 【发布时间】:2020-11-22 04:51:19 【问题描述】:

我需要计算一组城市的边界与米纳斯吉拉斯州其他城市之间的距离。这个想法是进行回归不连续设计(RRD),边界是我的切入点。

这是一个数据库示例:

code latitude longitude munic                cerrado mantiqueira  mata
     <dbl> <chr>        <dbl> <chr>                  <dbl>       <dbl> <dbl>
 1 3170057 -196351    -421059 Ubaporanga                 0           0     1
 2 3170107 -197472    -479381 Uberaba                    1           0     0
 3 3170206 -189141    -482749 Uberlândia                 1           0     0
 4 3170404 -163592    -469022 Unaí                       1           0     0
 5 3170503 -203521     -42737 Urucânia                   0           0     0
 6 3170529 -161244    -457352 Urucuia                    0           0     0
 7 3170602 -203333    -463688 Vargem Bonita              0           0     0
 8 3170651 -153987    -423085 Vargem Grande do Ri~       0           0     0
 9 3170701 -215556    -454364 Varginha                   0           0     0
10 3170750 -183741    -460313 Varjão de Minas            1           0     0
11 3170800 -175944    -447226 Várzea da Palma            0           0     0
12 3171030 -155845    -436121 Verdelândia                0           0     0
13 3171071 -173974    -427307 Veredinha                  0           0     0
14 3171154 -200406    -422688 Vermelho Novo              0           0     1
15 3171303 -207559    -428742 Viçosa                     0           0     1
16 3171402 -20867     -422401 Vieiras                    0           0     1
17 3171709 -223264    -450965 Virgínia                   0           0     0
18 3171808 -188154    -427015 Virginópolis               0           0     0
19 3171907 -184738    -423067 Virgolândia                0           0     0
20 3172004 -210127    -428361 Visconde do Rio Bra~       0           0     0

您可以下载完整的数据库here。

“cerrado”、“mantiqueira”和“mata”是米纳斯吉拉斯州的地区。 1 表示自治市在区域内。我也有每个自治市的纬度和经度数据。思路是:

1 - 为每组区域创建一个边框。

2 - 找到一种方法来计算组内和组外的城市与边界的距离。

这是我想到的策略示例:

在空间分析方面,geobr 包在巴西非常流行。但是,我找不到一种方法来进行我想到的分析。

【问题讨论】:

【参考方案1】:

您的 NA 值太多,无法进行真正的不连续性设计,如上所示。

Map.

因此,最好的办法可能是按类别计算最近的邻居:

library(tidyverse)

teste <- 
  readxl::read_xlsx("teste.xlsx") %>%
     rename(name_muni = munic,
            code_muni = code) %>%
      mutate(latitude = as.numeric(latitude),
             longitude = as.numeric(longitude))

cerrado <- filter(teste, cerrado == 1)
other <- filter(teste, cerrado != 1)

nn <- FNN::get.knnx(select(other, longitude, latitude), select(cerrado, longitude, latitude), k = 1)

cerrado <- mutate(cerrado, dist_other = nn$nn.dist[, 1])

现在,对于每个塞拉多市,您都有与另一个地区的距离;您可以对其他人重复此操作,如果要将它们拉回一个数据帧,请使用 rbind

【讨论】:

以上是关于用R计算与边界的距离的主要内容,如果未能解决你的问题,请参考以下文章

经纬度计算距离公式

两个经纬度算距离公式 方法是啥

使用 Javascript 计算边界框

欧拉函数计算公式是啥?

大数据方法来计算R中的距离集?

R中点特征到最近多边形的距离