我有一个带坐标的数据框df_1():
lat lon
54.52501 6.295359
54.52501 6.295293
54.52502 6.294764
54.52503 6.294698
54.52503 6.294302
54.52504 6.294236
54.43791 6.386598
54.43790 6.386656
54.43790 6.386714
54.43790 6.386831
54.43790 6.386948
54.43789 6.387001
54.43789 6.387124
54.43789 6.387183
54.43789 6.387241
54.52533 6.391403
54.52534 6.391336
54.52534 6.391270
此外,我有第二个数据帧df_2(),其坐标为风电场。这些坐标描述了多边形的角(= windfram区域)。
lat_GTI lon_GTI
54.498434 6.315664
54.541046 6.315695
54.541013 6.416187
54.451969 6.388373
我想做的事:向df_1()添加另一列,指定df_1的坐标是否在风电场多边形内。
我已经尝试过了。但它没有用。
df_1$test1 <- df_1 [df_1 == df_2] <- "OWF"
答案 0 :(得分:2)
我不认为这四个点是一个矩形。最后一个经度是关闭的。但是,假设你有一个矩形,你可以使用这样的东西:
min_lat_GTI = min(df_2$lat_GTI)
max_lat_GTI = max(df_2$lat_GTI)
min_lon_GTI = min(df_2$lon_GTI)
max_lon_GTI = max(df_2$lon_GTI)
df_1$test1 <- ifelse(df_1$lat >= min_lat_GTI & df_1$lat <= max_lat_GTI & df_1$lon >= min_lon_GTI & df_1$lon <= max_lon_GTI), 'IN', 'OUT')
如果你想要一个更复杂的条件评估来确定一个点是否在多边形内,你可以编写一个测试它的函数,并在ifelse()语句中使用该函数。
更新:
要使用某个功能,您可以执行以下操作:
isInside <- function(lat, lon) {
# Bunch of code that tests whether the lat/lon are inside the polygon
# return TRUE if inside, FALSE otherwise
}
df_1$test1 <- ifelse(isInside(df_1$lat, df_1$lon), 'IN', 'OUT')