我有邻居的shapefile边界。如何识别点位于哪个边界? [重复]

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

这个问题在这里已有答案:

我正在处理一些地理数据,查看波士顿社区的边界,并试图确定哪些社区获得了某些建筑许可。

到目前为止,我已经:

  1. 读入shapefile并使用maptools包中的readshapePoly将其转换为纬度和经度的数据帧。
  2. 与每个邻里边界相关联的名称 - 布莱顿,唐人街等。
           long      lat order  hole piece id group                    name
1     -71.12593 42.27201     1 FALSE     1  0   0.1              Roslindale
2     -71.12575 42.27235     2 FALSE     1  0   0.1              Roslindale
3     -71.12566 42.27248     3 FALSE     1  0   0.1              Roslindale
4     -71.12555 42.27258     4 FALSE     1  0   0.1              Roslindale
5     -71.12573 42.27249     5 FALSE     1  0   0.1              Roslindale
6     -71.12638 42.27217     6 FALSE     1  0   0.1              Roslindale
7     -71.12652 42.27210     7 FALSE     1  0   0.1              Roslindale
8     -71.12660 42.27218     8 FALSE     1  0   0.1              Roslindale
9     -71.12666 42.27224     9 FALSE     1  0   0.1              Roslindale
10    -71.12691 42.27210    10 FALSE     1  0   0.1              Roslindale
11    -71.12726 42.27200    11 FALSE     1  0   0.1              Roslindale
12    -71.12740 42.27196    12 FALSE     1  0   0.1              Roslindale

....

  1. 为我的所有建筑许可生成了一长串纬度和经度 - 这本来不是一个shapefile,这意味着我不知道我是否可以使用“sf”覆盖这两个集合
Latitude Longitude
      <dbl>     <dbl>
 1     42.3     -71.1
 2      0         0  
 3     42.4     -71.1
 4     42.3     -71.1
 5     42.4     -71.1
 6     42.4     -71.1
 7     42.4     -71.1
 8     42.4     -71.1
 9      0         0  
10     42.4     -71.1

我的问题是我拥有所有这些建筑许可,但他们没有相关的社区,这就是我想要学习的。从概念上讲,我知道我想做这样的事情:

  1. 使用步骤1和2中的多边形确定每个坐标所在的多边形
  2. 使用第一步中的标识将多边形“名称”附加到坐标邻域。
r ggmap
1个回答
1
投票

这可以使用sf包完成。假设您将点和多边形存储为shapefile,则可以执行以下操作:

library('sf')

polygonSF <- read_sf(dsn = 'polygonShapeFile')
pointSF <- read_sf(dsn = 'pointShapeFile')

st_intersection(pointSF, polygonSF)

如果它们还不是形状文件,则有一些中间步骤。

例如,假设点(示例中的许可证)存储在具有纬度和经度列的数据框(pointDF)中。您需要将数据帧转换为shapefile,然后告诉R为您的点使用相同的坐标参照系(CRS),就像使用多边形边界一样:

pointSF <- st_as_sf(x = pointDF,                         
                    coords = c("longitude", "latitude"),
                    crs = "+init=epsg:4326")
pointSF <- st_transform(pointSF, crs = st_crs(poloygonSF))
© www.soinside.com 2019 - 2024. All rights reserved.