如何匹配R中2个shapefile的坐标

问题描述 投票:0回答:1

我有2个形状文件,其中一个具有作为多多边形的行政单位的坐标,另一个具有作为多线串的边界墙各个部分的坐标。我正在尝试将边界墙的各个部分与 R 中各自的行政单位相匹配。

我首先导入形状文件:

rm(list = ls())

# Load necessary packages
install.packages("sf")
install.packages("dplyr")
library(sf)
library(dplyr)
install.packages("readstata13")
library(readstata13)
library(haven)
library(foreign)

setwd("C:/Desktop/Wall")

latlong_data14 <- st_read("Barrier_Sept_2014.shp")

setwd("C:/Desktop/Admin")

admin <- st_read("geo1_ps1997_2017.shp")

latlong_data14 看起来像这样:

形状_冷 几何
1900.11 多线字符串(74850...)
2109.13 多线字符串(69375...)

管理员看起来像:

ADMIN_NAME 几何
A单元 多重多边形(36.587...)
B 单元 多重多边形(37.095...)

我想在 latlong_data14 中附加一列包含管理单位名称的列,但我不知道如何执行此操作。注意:有些观察结果可能跨越多个行政单位,但我不确定。那么,是否有可能每次观测都分解出多少形状长度属于每个行政单元?

r gis shapefile multilinestring multipolygons
1个回答
0
投票

这是一个repex,它返回一个线串sf,其中包含每个管理区域的每个要素的长度。它使用

lwgeom
包来分割“屏障”线。 admin 中的 NAME 列用于定义屏障/管理关系。更改此设置以匹配实际管理数据中的等效列。

为了简单起见,本示例使用 CRS 为 WGS84:EPSG4326 的数据。这不是精确距离/长度计算的最佳 CRS,并且由于 WGS84 不是投影坐标系,

sf
将引发警告。您需要确保您的数据具有可保持数据区域距离的 CRS。

加载所需包并生成示例数据

library(sf)
library(dplyr)
library(lwgeom)
options(scipen = 999) # For display of numeric values

# Example admin sf
admin <- st_read(system.file("shape/nc.shp", package = "sf")) %>%
  st_transform(4326)

# Example linestring sf
barrier <- data.frame(ID = 1:9,
                      lon = seq(-84, -76, 1),
                      lat  = rep(c(35, 35.5, 36), 3)) %>%
  st_as_sf(coords = c("lon", "lat"), crs = 4326)

barrier <- do.call(c, st_geometry(barrier)) %>%
  st_cast("MULTILINESTRING") %>%
  st_sfc() %>%
  st_as_sf(crs = 4326)

为每个管理功能生成具有单独屏障功能的新 sf

sf_split <- st_split(barrier, admin) %>%
  st_collection_extract(., "LINESTRING") %>%
  st_intersection(., st_difference(admin)) %>%
  select(NAME) %>%
  summarise(geometry = st_union(x), .by = NAME) %>%
  mutate(length_m = as.numeric(st_length(.)))

# although coordinates are longitude/latitude, st_difference assumes that they are
# planar
# Warning message:
#   attribute variables are assumed to be spatially constant throughout all geometries 

sf_split
# Simple feature collection with 37 features and 2 fields
# Geometry type: GEOMETRY
# Dimension:     XY
# Bounding box:  xmin: -84 ymin: 35 xmax: -76.08275 ymax: 36
# Geodetic CRS:  WGS 84
# First 10 features:
#          NAME                       geometry length_m
# 1       Avery LINESTRING (-82.04743 35.97... 12317.93
# 2    Alamance LINESTRING (-79.32532 35.83...  7935.08
# 3      Orange LINESTRING (-79.25038 35.87... 27389.38
# 4      Durham LINESTRING (-78.99374 35.99... 19071.87
# 5    Mitchell LINESTRING (-82.15366 35.92... 11239.02
# 6      Yancey LINESTRING (-82.37048 35.81... 22956.46
# 7        Wake LINESTRING (-78.86044 35.86... 37272.19
# 8       Burke LINESTRING (-81.92366 35.92... 52605.56
# 9  Washington LINESTRING (-76.59509 35.70... 20519.55
# 10    Tyrrell LINESTRING (-76.4015 35.799... 33745.35
© www.soinside.com 2019 - 2024. All rights reserved.