在R中更快地检测shapefile多边形中的点

时间:2017-09-26 01:54:18

标签: r optimization shapefile

我有一个用R编写的代码来检测村庄之间的水量(或shapefile多边形中的点)。我正在创建一个超过2379个村庄(村庄有数字名称)的无向图,这将带来28亿个组合。该图只是一个数据帧。我有每个村庄的坐标:

VillageName1, VillageName2
Village1, Village2
Village1, Village3
Village1, Village4
...
Village2379, Village2378

对于每个组合,我都有一个函数,它会以100米的间隔从Village1到Village2创建点数。因此,如果Village1和Village2相距1km,将创建8个点。此功能运行相对较快。

问题是我正在使用世界海洋形状文件(6.9mb),这样如果Village1和Village2位于两个独立的岛屿上,我可以检测到100米的水量,但它非常慢(大约4秒)每次计算)并运行它28亿次将永远。

我尝试根据这些村庄(印度尼西亚)将shapefile(ocean_indo_shapefile)过滤到该国:

sea <- readOGR('World_EEZ_v8_2014.shp')
ocean_indo_shapefile <- sea[sea$Country == "Indonesia", ]

#this function creates the points from Village1 to Village2 in 100m intevals, output is a dataframe
points <- create_coordinates(village1_lat, village1_long, village2_lat, village2_long, 0.1)

coordinates(points) <- ~ Longitude + Latitude
proj4string(points) <- proj4string(ocean_indo_shapefile)
#the calculation below is slow
water_in_meter <- length(points[ocean_indo_shapefile,])

我不确定是否有人可以帮助建议我如何更快地做到这一点,我感谢任何帮助。先感谢您。

1 个答案:

答案 0 :(得分:0)

也许尝试使用%over%中的sp函数。它应该能够相对快速地指出哪些点落在水体中(假设你的shapefile表示的是什么)。你之后只会有一些数据要做,以逐村计算。