中国各城市距离海岸线和港口的距离

今天帮培训班的小伙伴计算下各个城市距离海岸线和港口的距离。

各个城市质心距离海岸线的距离

首先我们需要一份海岸线的矢量数据:

计算城市质心可以使用城市的矢量数据,在 R 语言里面计算质心可以使用 sf 包的 st_centroid() 函数:

# 计算各个城市的质心
city %>%
st_centroid() -> city_centroid

然后就可以计算各个城市的质心距离海岸线的距离了,使用 sf 的 st_distance() 包即可:

city_centroid %>%
mutate(dist = st_distance(city_centroid, hax)[,1],
dist = units::set_units(dist, km),
dist = as.numeric(dist)) -> city_centroid
city_centroid

#> Simple feature collection with 371 features and 6 fields
#> geometry type: POINT
#> dimension: XY
#> bbox: xmin: 75.94554 ymin: 16.84913 xmax: 132.5427 ymax: 52.32577
#> geographic CRS: WGS 84
#> # A tibble: 371 x 7
#> 省代码 省 市代码 市 类型 geometry dist
#> * <dbl> <chr> <dbl> <chr> <chr> <POINT [°]> <dbl>
#> 1 110000 北京市 110000 北京市 直辖市 (116.4123 40.18554) 165.
#> 2 120000 天津市 120000 天津市 直辖市 (117.334 39.29343) 40.6
#> 3 130000 河北省 130100 石家庄市 地级市 (114.4399 38.13127) 279.
#> 4 130000 河北省 130200 唐山市 地级市 (118.3359 39.72124) 60.5
#> 5 130000 河北省 130300 秦皇岛市 地级市 (119.185 40.08797) 37.1
#> 6 130000 河北省 130400 邯郸市 地级市 (114.5421 36.553) 346.
#> 7 130000 河北省 130500 邢台市 地级市 (114.8159 37.21264) 285.
#> 8 130000 河北省 130600 保定市 地级市 (115.1706 39.02127) 211.
#> 9 130000 河北省 130700 张家口市 地级市 (115.0324 40.86512) 303.
#> 10 130000 河北省 130800 承德市 地级市 (117.5486 41.34761) 233.
#> # … with 361 more rows

各个城市质心距离海岸线的最短距离如下图展示:

各个城市质心距离港口的距离

方法类似。港口数据来源于交通部发布的《全国沿海港口布局规划》,其中等级 1 表示主要港口。

各个城市质心距离最近港口的距离如下图展示:

上图中红色的点表示港口的位置。

另外大家可以还需要各个城市距离各个港口的距离,我还准备了一份距离矩阵数据:

bind_cols(
city %>%
st_drop_geometry(),
gkdist %>%
as_tibble() %>%
mutate(across(everything(), ~units::set_units(.x, "km"))) %>%
mutate_all(as.numeric) %>%
set_names(gk$港口名称)
)

#> # A tibble: 371 × 49
#> 省代码 省 市代码 市 上海港 大连港 营口港
#> <dbl> <chr> <dbl> <chr> <dbl> <dbl> <dbl>
#> 1 110000 北京市 110000 北京市 1148. 471. 485.
#> 2 120000 天津市 120000 天津市 1024. 375. 424.
#> 3 130000 河北省 130100 石家庄市 1055. 634. 704.
#> 4 130000 河北省 130200 唐山市 1036. 299. 329.
#> 5 130000 河北省 130300 秦皇岛市 1055. 248. 251.
#> 6 130000 河北省 130400 邯郸市 926. 679. 779.
#> 7 130000 河北省 130500 邢台市 958. 629. 719.
#> 8 130000 河北省 130600 保定市 1093. 561. 611.
#> 9 130000 河北省 130700 张家口市 1270. 604. 602.
#> 10 130000 河北省 130800 承德市 1229. 440. 403.
#> # ℹ 361 more rows
#> # ℹ 42 more variables: 丹东港 <dbl>, 锦州港 <dbl>,
#> # 天津港 <dbl>, 唐山港 <dbl>, 秦皇岛港 <dbl>,
#> # 黄骅港 <dbl>, 青岛港 <dbl>, 烟台港 <dbl>,
#> # 威海港 <dbl>, 日照港 <dbl>, 宁波港 <dbl>,
#> # 舟山港 <dbl>, 温州港 <dbl>, 台州港 <dbl>,
#> # 嘉兴港 <dbl>, 苏州港 <dbl>, 南京港 <dbl>, …
#> # ℹ Use `print(n = ...)` to see more rows

点击这里跳转到 RStata 短书平台获取附件:中国各城市距离海岸线和港口的距离

评论