如何计算形状文件中质心到多边形的距离? [R

时间:2020-10-16 04:05:42

标签: r sp

我有这个,我正尝试使用gDistance来计算每个质心与巴格达城市之间的距离。我正在尝试这样做: map

gDistance(districts_centroids, districts@data$ADM3NAME %in% c("Baghdad"), byid=TRUE)

district_centroidsFormal Class SpatialPoints的地方,而districts@data...文件中的shp基本上是巴格达的城市。

我收到以下错误消息:

错误(函数(类,fdef,mtable)): 无法为签名““逻辑””找到函数“ is.projected”的继承方法 另外:警告消息: 在RGEOSDistanceFunc(spgeom1,spgeom2,byid,“ rgeos_distance”)中: 空间对象1没有投影; GEOS期望平面坐标

我对R完全陌生,我真的不知道发生了什么。

任何帮助将不胜感激

谢谢!

1 个答案:

答案 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:

查看该图
相关问题