如何解决如何计算其他坐标点的 X 半径内出现的坐标点数?
我有两组坐标数据(纬度和经度)。第一组表示城市内餐厅的位置。第二组坐标代表城市中的公园。对于每家餐厅,我想计算 160 米范围内的公园数量。
根据另一篇文章,我尝试使用 simple features (sf) 包来执行此操作,但没有得到我想要的输出。
示例数据:
餐厅:
45.59841 -122.3275
45.59932 -122.3343
45.59932 -122.3343
45.59820 -122.3343
45.59820 -122.3343
45.59814 -122.3340
45.59814 -122.3340
45.60016 -122.3341
45.60016 -122.3341
45.60020 -122.3343
公园:
45.61221 -122.3426
45.61065 -122.3402
45.60868 -122.3384
45.60624 -122.3361
45.61082 -122.3388
45.60983 -122.3379
45.60910 -122.3372
45.60829 -122.3365
45.60653 -122.3349
45.60503 -122.3335
使用 sf,我尝试执行以下操作:
将坐标转换为地理空间数据
library(tidyverse)
library(sf)
park_points <- st_as_sf(ride_coords,coords = c(x = "Latitude",y = "Longitude"),crs = 4326)
rest_points <- st_as_sf(can_coords,coords = c(x = "lat","lon"),crs = 4326)
然后我尝试在每个餐厅周围创建一个 160m 的缓冲区,之后我希望尝试计算每个餐厅缓冲区中的公园数量。
buffer_160 <- park_points %>% st_transform(26910) %>% st_buffer(dist = 160) %>% st_transform(2926)
然后我收到以下错误:
“使用方法错误(“st_transform”):没有适用于“st_transform”的方法应用于类“data.frame”的对象
无论如何,目标是在每个餐厅周围创建缓冲区,然后计算每个缓冲区内的公园数量(我知道会有重叠,所以我也必须弄清楚如何处理)
我对 R 空间工具非常陌生。感谢您的帮助!
解决方法
您可以在餐厅使用 spatialrisk::points_in_circle
和 map
并使用 purrr
。
在 160 m 的半径内没有找到公园,因此将半径扩展到 1000 m :
Restaurants <- read.table(text="
lat lon
45.59841 -122.3275
45.59932 -122.3343
45.59932 -122.3343
45.59820 -122.3343
45.59820 -122.3343
45.59814 -122.3340
45.59814 -122.3340
45.60016 -122.3341
45.60016 -122.3341
45.60020 -122.3343",header = T)
Parks <- read.table(text = "
lat lon
45.61221 -122.3426
45.61065 -122.3402
45.60868 -122.3384
45.60624 -122.3361
45.61082 -122.3388
45.60983 -122.3379
45.60910 -122.3372
45.60829 -122.3365
45.60653 -122.3349
45.60503 -122.3335",header = T)
library(purrr)
library(spatialrisk)
Restaurants %>% pmap(~with(list(...),points_in_circle(Parks,lon_center = lon,lat_center = lat,radius = 1000)))
#> [[1]]
#> lat lon distance_m
#> 10 45.60503 -122.3335 872.6082
#>
#> [[2]]
#> lat lon distance_m
#> 10 45.60503 -122.3335 638.6807
#> 4 45.60624 -122.3361 782.9830
#> 9 45.60653 -122.3349 803.9727
#>
#> [[3]]
#> lat lon distance_m
#> 10 45.60503 -122.3335 638.6807
#> 4 45.60624 -122.3361 782.9830
#> 9 45.60653 -122.3349 803.9727
#>
#> [[4]]
#> lat lon distance_m
#> 10 45.60503 -122.3335 762.8609
#> 4 45.60624 -122.3361 905.9215
#> 9 45.60653 -122.3349 928.4681
#>
#> [[5]]
#> lat lon distance_m
#> 10 45.60503 -122.3335 762.8609
#> 4 45.60624 -122.3361 905.9215
#> 9 45.60653 -122.3349 928.4681
#>
#> [[6]]
#> lat lon distance_m
#> 10 45.60503 -122.3335 767.9792
#> 4 45.60624 -122.3361 916.4012
#> 9 45.60653 -122.3349 936.5971
#>
#> [[7]]
#> lat lon distance_m
#> 10 45.60503 -122.3335 767.9792
#> 4 45.60624 -122.3361 916.4012
#> 9 45.60653 -122.3349 936.5971
#>
#> [[8]]
#> lat lon distance_m
#> 10 45.60503 -122.3335 544.1362
#> 4 45.60624 -122.3361 694.5149
#> 9 45.60653 -122.3349 711.8371
#> 8 45.60829 -122.3365 924.1272
#>
#> [[9]]
#> lat lon distance_m
#> 10 45.60503 -122.3335 544.1362
#> 4 45.60624 -122.3361 694.5149
#> 9 45.60653 -122.3349 711.8371
#> 8 45.60829 -122.3365 924.1272
#>
#> [[10]]
#> lat lon distance_m
#> 10 45.60503 -122.3335 541.2711
#> 4 45.60624 -122.3361 686.8285
#> 9 45.60653 -122.3349 706.2001
#> 8 45.60829 -122.3365 916.7284
#> 3 45.60868 -122.3384 996.5307
或者总结一下,使用 concentration
直接给出每家餐厅周围的公园数量:
Parks$count <- 1
spatialrisk::concentration(Restaurants,Parks,value = count,radius = 1000)
lat lon amount concentration
1 45.59841 -122.3275 1 1
2 45.59932 -122.3343 1 3
3 45.59932 -122.3343 1 3
4 45.59820 -122.3343 1 3
5 45.59820 -122.3343 1 3
6 45.59814 -122.3340 1 3
7 45.59814 -122.3340 1 3
8 45.60016 -122.3341 1 4
9 45.60016 -122.3341 1 4
10 45.60020 -122.3343 1 5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。