检查点坐标是否在多边形内

菲尔波

我是空间数据的新手,需要一些帮助。我有一组 100 万个点,想确定哪些点位于 5 个多边形之一内。一旦确定,我想删除该点的整行。

多边形位于 kml 文件中,点位于 csv 中。阅读数据后,我做了以下事情:

library(sf)
library(dplyr)

#create sf of lat long
heat_df$point <- heat_df[,5:6] %>% 
  as.data.frame %>% 
  st_as_sf(coords = c(1,2)) %>%
  st_set_crs(4326)

#make planar
heat_df$point <- st_transform(heat_df$point, 2163)
kml$geometry <- st_transform(kml$geometry, 2163)

#itterate through the following 5 times (once per polygon)
heat_df$inter <- st_intersects(heat_df$point, kml$geometry[1], sparse = FALSE)
heat_df <-  heat_df[!(heat_df$inter == TRUE),]

但是,我无法在这些多边形中找到任何点,尽管我知道这些多边形中有点。我检查了数据框并注意到坐标的格式显然不同:

> print(heat_df$point[1])
[[1]]
[1] 6407800 9211903
attr(,"class")
[1] "XY"    "POINT" "sfg"  

> print(kml$geometry[1])
[[1]]
[[1]]
         [,1]    [,2] [,3]
 [1,] 4520903 5043254    0
 [2,] 4520945 5043244    0
 [3,] 4521016 5043207    0
 [4,] 4521029 5043312    0
 [5,] 4521027 5043325    0
 [6,] 4521016 5043341    0
 [7,] 4520962 5043405    0
 [8,] 4520926 5043388    0
 [9,] 4520903 5043254    0

attr(,"class")
[1] "XYZ"     "POLYGON" "sfg"    

至少中的坐标与heat_df$point[1]的坐标非常不同kml$geometry[1]所有点和所有多边形都位于彼此 1km 之内。所以我不期望[1] 6407800 9211903[1,] 4520903 5043254 0. 但也许我错了。我以前没有处理过空间数据。你能帮我弄清楚出了什么问题吗?sf如果可能的话,我想坚持包装。

金德拉·拉科

您描述的问题类别称为多边形中的点。

您可以通过sf::st_join()来处理它- 它会将多边形列添加到您的点数据集中。它默认使用左连接 = 保留左手对象的行。因此,最好从您的点对象开始,并在空间对齐时添加多边形的特征(如果不对齐,则添加 NA)。

要记住两件事:

  • CRS 系统必须对齐(您选择哪一个很少重要;这将采取极端的极端情况 - 但它必须对齐;st_transform为此使用
  • 根据班级的点对象(SFC与SF),你可能需要调用st_as_sf()第一

考虑以下方面的事情:

pip <- points %>%
  st_join(heat_df)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章