2016-07-01 67 views
0

我對R中的空間數據有以下難題:在地理點周圍創建緩衝區,然後檢查座標列表是否在緩衝區內?

我有一個包含街道段(以及它們各自的起始和結束座標)的數據集。我想在這些點周圍創建一個X米的緩衝區,然後檢查經度/緯度點列表是否在該緩衝區內。有沒有辦法在R中做到這一點?

我可以使用各種軟件包的組合映射點和映射緩衝區:maptools,ggmap,rgdal,sp和rgeos。但是,這個過程似乎只映射點和緩衝區,而不允許我檢查其他座標是否在緩衝區內。理想情況下,我想產生一個1和0的矢量來描述經緯度點列表是否在街道周圍的緩衝區內。

任何想法?

這是我一直在使用的代碼,但我得到所有缺少的值(我知道這不應該是這種情況)。我已經使用gContains功能從rgeos也嘗試過,但它墜毀R.

#Load shapefile in R and transform to appropriate CRS 
shp <- readOGR(dsn="/Users/Maps/shapes", layer="shp") 
shp_transf <- spTransform(shp_transf, CRS("+init=epsg:21897")) 

#Create buffer around polygons 
shp_buff <- gBuffer(shp_transf, width=40, byid=TRUE, quadsegs=10) 

#Make my dataframe of lat/lon points into same projection as buffers 
points <- SpatialPoints(points,proj4string=CRS(proj4string(shp_buff))) 

#Use over function from SP pacakge 
result <- as.integer(over(points, shp_buff)$OBJECTID) 
+0

剛剛運行'result < - over(points,shp_buff)'時會發生什麼? –

+0

它創建一個與shp_buff相同的空數據框 – op4

+0

當您聲明您的'points'對象時,數據框中的座標是否已經在epsg:21897 CRS中?上面的評論的措辭就像你想要改變它們一樣。另外,當你運行'plot(shp_buff)'然後'plot(points,add = T)'時會發生什麼? –

回答

0

原來,因爲與緩衝區shape文件和GPS座標表是在一個不同的over()功能不工作之前CRS。我固定它是這樣的:

shp <- spTransform(shp, CRS("+proj=longlat +datum=WGS84")) proj4string(points) <- CRS("+proj=longlat +datum=WGS84")

然後,運行over()功能,它會給你的次數每一個點在每個緩衝區:

x <- over(points, shp) table(x$ID)

181 304

118 8

所以一特定的GPS脈衝來自分段ID181總共118次,並且來自分段ID304總共8次。