2015-12-31 2 views
0

У меня есть dataframe df_1() с координатами:Найти и имя конкретные значения в dataframe

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 

Кроме того, у меня есть второй dataframe df_2() с координатами ВЭС. Эти координаты описывают углы многоугольника (= площадь ветрового стекла).

lat_GTI  lon_GTI 
    54.498434  6.315664 
    54.541046  6.315695 
    54.541013  6.416187 
    54.451969  6.388373 

Что я хочу сделать: добавить еще один столбец df_1(), который определяет, будет ли координаты df_1 находятся в пределах WINDFARM полигона или нет.

Я уже что-то пробовал. Но это не сработает.

df_1$test1 <- df_1 [df_1 == df_2] <- "OWF" 
+0

Несколько пакетов реализации 'точка в полигоне' алгоритмов; например 'sp :: point.in.polygon (df_1 $ lat, df_1 $ lon, df_2 $ lat_GTI, df_2 $ lon_GTI)' –

ответ

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().

UPDATE:

Чтобы использовать функцию, вы могли бы сделать что-то вроде этого:

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') 
+0

Ваша реклама. Эта область ветропарка является более вероятным многоугольником. К сожалению, я никогда не писал функцию. Поэтому я не уверен, как должна выглядеть функция наконец. – chm

+0

Да. Это сработало. благодаря – chm

Смежные вопросы