【问题标题】:Creating function to check if a point falls between two lines in R创建函数来检查一个点是否落在R中的两条线之间
【发布时间】:2020-11-06 20:23:49
【问题描述】:

假设有两个经度/纬度坐标列表。我在地图上绘制这些坐标,并将列表 1 中的每个点用直线连接起来,将列表 2 中的每个点用直线连接起来。

这是一个数据框,其中包含这两个列表的示例经度和纬度:

long_1<- c(-87, -85.927, -83.8056)
long_2<- c(-87, -85.4729, -83.1944)
lat_1<- c(17.8,18.969, 20.31)
lat_2<- c(17.8, 18.23, 19.0881)
df<- data.frame(long_1,long_2,lat_1, lat_2)

leaflet() %>% addTiles() %>%
addPolylines(data = df, lng = ~long_1, lat = ~lat_1) %>%
addPolylines(data = df, lng = ~long_2, lat = ~lat_2) %>%
setView(-93.65, 42.0285, zoom = 4)

我正在尝试创建一个函数,该函数将输入一个经度和纬度点,如果该点落在这些线的连接所创建的边界范围内,则返回 true,如果该点不在则返回 false。

老实说,我不知道该怎么做。任何想法将不胜感激!

【问题讨论】:

  • 如果你把这些点...addMarkers(lng =-85.927, lat =18.7)%&gt;% addMarkers(lng =-84.2, lat =18.5),是同时进还是一进一出(先进,后出)?
  • @s__。我道歉。我在 lat_1 中的第三个纬度值上打错了字。应该是 20.31,而不是 18.231。我会纠正那个。
  • 进行更改后,第一个点将在边界内,第二个点将在边界外。

标签: r leaflet


【解决方案1】:

也许您可以使用sp::point.in.polygon() 函数轻松管理它。这个想法是测试点是否在您的坐标所构成的多边形中。

library(sp)
# first you've to get one column for the long, and one column for the lat
new_df <- data.frame(long = c(long_1,long_2), lat = c(lat_1, lat_2))

# then you can put the points to test in a vector, like these, and use the function
point.in.polygon(c(-85.927,-84.2),c(18.7,18.5),new_df$long,new_df$lat)
[1] 1 0   

一进一出。

【讨论】:

  • 这看起来适用于我的用例!谢谢你。你是一个救生员!
猜你喜欢
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
相关资源
最近更新 更多