R 如何通过点是否在多边形内来标记点

R 如何通过点是否在多边形内来标记点,r,ggplot2,maps,R,Ggplot2,Maps,我有新西兰各地鸟类观测的经度和纬度,存储在变量Count、经度和纬度下的Count.df。然而,其中一些出现在近海/海洋中(这是一个公民科学数据集) 我想根据这些点是否不在maps::map(“nz”)中给出的信息范围内,对这些点进行子集划分,原因有二: 我想在地图上标出这些离岸点,也许用不同的颜色 为了进一步分析,我可能会从数据集中删除它们 如何在Count.df中创建一个新变量,根据它们是否属于map(“nz”)所描绘的组(1:3)的内部/外部,该组保存为“nzmap.dat” 谢谢,请尽量

我有新西兰各地鸟类观测的经度和纬度,存储在变量
Count
经度和
纬度下的
Count.df
。然而,其中一些出现在近海/海洋中(这是一个公民科学数据集)

我想根据这些点是否不在
maps::map(“nz”)
中给出的信息范围内,对这些点进行子集划分,原因有二:

  • 我想在地图上标出这些离岸点,也许用不同的颜色
  • 为了进一步分析,我可能会从数据集中删除它们
  • 如何在
    Count.df
    中创建一个新变量,根据它们是否属于
    map(“nz”)
    所描绘的组(1:3)的内部/外部,该组保存为“nzmap.dat”

    谢谢,请尽量保持编码术语的简单

    在Count.df的子集中,我有超过17000个观察结果,下面是10个。请注意,“计数”的值对此问题不感兴趣

    df <- readr::read_table2(
      "count longitude latitude
    3 174.7889 -41.24632
    1 174.7764 -41.25923
    4 176.8865 -39.67894
    1 174.7656 -36.38182
    2 175.5458 -37.13479
    2 175.5458 -37.13479
    1 176.8862 -39.67853
    1 170.6101 -45.84626
    5 174.9162 -41.25709
    2 176.8506 -39.51831"
    )
    

    df不幸的是,使用
    地图
    数据对点进行空间过滤相当困难,因为数据实际上是用于打印的,而不是用于进行空间操作。幸运的是,使用
    sf
    包来完成这种空间工作相当容易

  • 首先,我从
    rnaturalearth
    包中获得新西兰边界,这是一个方便的国家边界来源。我做了一些变换,只保留shapefile中最大的三个多边形,因为否则我们将绘制许多可能与此地图无关的遥远岛屿
  • 然后我在新西兰周围生成一些随机点。您可以看到,
    tibble
    只是一列经度和一列纬度。我们用
    st_as_sf
    将其转换为点几何体,并绘制它,以显示它的外观
  • 最后,我们可以使用
    st_in
    检查每个点是否在
    nz
    边界内
    st_in
    返回每个点所在多边形的索引列表,因此我们可以使用
    length
    获得我们想要的结果。这里
    0
    的任何内容都不在边界内,而
    1
    的任何内容都在边界内。使用此新的
    on_land
    属性进行绘图显示,离岸点的颜色适当
  • 库(tidyverse)
    图书馆(sf)
    #>链接至GEOS 3.6.1、GDAL 2.2.3、项目4.9.3
    图书馆(rnaturalearth)
    新西兰%
    st_铸造(“多边形”)%%>%
    变异(面积=st_面积(几何))%>%
    顶部(3,区域)
    #>st_cast.sf(,“多边形”)中的警告:重复所有子对象的属性-
    #>它们可能不是常数的几何图形
    点数#A tible:1000 x 2
    #>xy
    #>     
    #>  1  167. -44.5
    #>  2  175. -40.9
    #>  3  177. -43.8
    #>  4  167. -44.8
    #>  5  173. -39.3
    #>  6  173. -42.1
    #>  7  176. -41.9
    #>  8  171. -44.9
    #>  9  173. -41.2
    #> 10  174. -39.5
    #> # ... 还有990行
    点虽然坐标是经度/纬度,但st_in假设它们是平面的
    绘图(新西兰元几何图形,颜色=“红色”)
    绘图(点,pch=19,cex=1,add=TRUE)
    


    由(v0.2.0)于2018年5月2日创建。

    不幸的是,使用
    地图
    数据对点进行空间过滤相当困难,因为这些数据实际上是用于绘图,而不是用于进行空间操作。幸运的是,使用
    sf
    包来完成这种空间工作相当容易

  • 首先,我从
    rnaturalearth
    包中获得新西兰边界,这是一个方便的国家边界来源。我做了一些变换,只保留shapefile中最大的三个多边形,因为否则我们将绘制许多可能与此地图无关的遥远岛屿
  • 然后我在新西兰周围生成一些随机点。您可以看到,
    tibble
    只是一列经度和一列纬度。我们用
    st_as_sf
    将其转换为点几何体,并绘制它,以显示它的外观
  • 最后,我们可以使用
    st_in
    检查每个点是否在
    nz
    边界内
    st_in
    返回每个点所在多边形的索引列表,因此我们可以使用
    length
    获得我们想要的结果。这里
    0
    的任何内容都不在边界内,而
    1
    的任何内容都在边界内。使用此新的
    on_land
    属性进行绘图显示,离岸点的颜色适当
  • 库(tidyverse)
    图书馆(sf)
    #>链接至GEOS 3.6.1、GDAL 2.2.3、项目4.9.3
    图书馆(rnaturalearth)
    新西兰%
    st_铸造(“多边形”)%%>%
    变异(面积=st_面积(几何))%>%
    顶部(3,区域)
    #>st_cast.sf(,“多边形”)中的警告:重复所有子对象的属性-
    #>它们可能不是常数的几何图形
    点数#A tible:1000 x 2
    #>xy
    #>     
    #>  1  167. -44.5
    #>  2  175. -40.9
    #>  3  177. -43.8
    #>  4  167. -44.8
    #>  5  173. -39.3
    #>  6  173. -42.1
    #>  7  176. -41.9
    #>  8  171. -44.9
    #>  9  173. -41.2
    #> 10  174. -39.5
    #> # ... 还有990行
    点虽然坐标是经度/纬度,但st_in假设它们是平面的
    绘图(新西兰元几何图形,颜色=“红色”)
    绘图(点,pch=19,cex=1,add=TRUE)
    


    由(v0.2.0)于2018-05-02创建。

    您可以使用
    地图::地图来完成此操作。其中
    和(如果需要)仅包含3个主要岛屿的自定义地图:

    nz3 = map("nz",c("North","South","Stewart"), fill=TRUE, plot=FALSE)
    points$onland = is.na(map.where(nz3, points$x, points$y))
    plot(points, col = ifelse(points$onland, 1, 2), pch=19)
    

    您可以使用
    maps::map.where
    和(如果需要)仅包含3个主要岛屿的自定义地图来执行此操作:

    nz3 = map("nz",c("North","South","Stewart"), fill=TRUE, plot=FALSE)
    points$onland = is.na(map.where(nz3, points$x, points$y))
    plot(points, col = ifelse(points$onland, 1, 2), pch=19)
    

    请编辑问题,将至少一个
    Count.df
    样本作为纯文本:请编辑问题,将至少一个
    Count.df
    样本作为纯文本:非常感谢您的帮助