我有这个,我正尝试使用gDistance
来计算每个质心与巴格达城市之间的距离。我正在尝试这样做:
gDistance(districts_centroids, districts@data$ADM3NAME %in% c("Baghdad"), byid=TRUE)
district_centroids
是Formal Class SpatialPoints
的地方,而districts@data...
文件中的shp
基本上是巴格达的城市。
我收到以下错误消息:
错误(函数(类,fdef,mtable)): 无法为签名““逻辑””找到函数“ is.projected”的继承方法 另外:警告消息: 在RGEOSDistanceFunc(spgeom1,spgeom2,byid,“ rgeos_distance”)中: 空间对象1没有投影; GEOS期望平面坐标
我对R完全陌生,我真的不知道发生了什么。
任何帮助将不胜感激
谢谢!
答案 0 :(得分:1)
这是一个很好的问题。在研究了事物之后,决定回答这个问题的最佳方法是使用simple feature objects
而不是空间物体。
该地图看起来很熟悉。我使用了IRQ_2_sf.rds
映射,它可能与上面使用和显示的映射相同。还有其他方法可以解决此问题。 Jupyter Lab是使用的IDE。
使用Google API和geocode
函数,检索巴格达的坐标。
baghdad <- geocode("Baghdad, Iraq", source = c("google") )
A tibble: 1 × 2
lon lat
<dbl> <dbl>
44.36607 33.31524
然后使用sf
函数来创建sf column object
。
baghdad.sfg <- st_point(c(lon, lat), dim = "XY")
baghdad.sfc <- st_sfc(baghdad.sfg, crs = 4326)
然后,使用名为iraq的SF映射创建centroids
。
注意:警告消息-st_centroid无法为经度/纬度数据提供正确的质心。对于此答案,质心将接近
足够。
iraq.c <- st_centroid(iraq)
每个centroid
到巴格达的距离以公里为单位。
head(dist <- data.frame(c(st_distance(iraq.c$geom[], baghdad.sfc)/1000)))
Units: [m]
[1] 28.63250 59.61553 215.43354 323.06418 259.14509 113.55356
然后创建一个包含名称,centroid
几何图形和距离值的日期框架。需要清洁和粘合。
distance <- c(dist$c.st_distance.iraq.c.geom....baghdad.sfc..1000.)
x <- distance[]
d_Bdad_Km <- as.numeric(str_extract(x, "[0-9]*.[0-9]."))
iraq2 <- iraq[-c(5, 8,9,10,11,12,13)]
df_dist <- cbind(iraq2, d_Bdad_Km) # df as desired
然后输出将得到plotted
。
plot(iraq$geom)
plot(iraq.c$geom, add = TRUE, col = "red")
plot(baghdad.sfc, add = TRUE, pch = 19, col = "blue")
请询问是否有任何后续问题。可以在此link:
查看该图