2015-12-31 63 views
0

我有一個數據框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

幾個軟件包實現算法 '多邊形點';例如'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

Your're wright。這個風電場區域更可能是多邊形。不幸的是,我從來沒有寫過一個函數。所以我不確定這個函數最後的樣子是怎麼樣的。 – chm

+0

是的。這是成功的。謝謝 – chm