나는 포인트 노출 (~ 2,000 산업 호그 작업-IHO)이있는 환경 역학 프로젝트를 진행하고 있습니다. 이 IHO는 근처 필드에 뿌려 지지만 대변 물방울과 냄새는 수 마일을 여행 할 수 있습니다. 따라서 이러한 점 노출은 3mi 버퍼를 얻습니다. 나는 NC 인구 조사 블록 당 IHO 노출 수 (다양한 종류-분뇨의 양, 호그 수, 가장 단순한, 겹치는 노출 버퍼 수)를 알고 싶습니다. (~ 200,000). 제외 인구 조사 블록 (파란색)은 (1) 가장 인구가 많은 상위 5 개 도시의 도시 및 (2) IHO와 카운티를 경계로하지 않는 카운티 (참고 : gRelate 함수 및 DE-9IM 코드로 수행됨- 매우 매끄러운!). 비주얼은 아래 이미지를 참조하십시오
마지막 단계는 버퍼링 된 노출 표현을 모든 센서스 블록으로 집계하는 것입니다. 내가 여기에 끼인 곳입니다.
지금까지 sp 패키지의 % over % 함수를 사용하여 좋은 시간을 보냈지 만 rpolys에서 poly-poly 및 poly-line over가 구현되어 있음을 오버 비네팅에서 이해할 수 있습니다. 비네팅은 선 폴리 및 자체 참조 폴리에만 적용되며 집계에는 포함되지 않으므로 합계 또는 평균과 같은 함수 집계와 함께 폴리 폴리에 대한 옵션이 무엇인지 약간 혼동됩니다.
테스트 사례의 경우 세계 국가 테두리 파일로 작업하는 아래의 다소 자세한 스 니펫을 고려하십시오. 포인트에 임의의 시드를 사용하고 코드에서 월드 파일을 다운로드하고 압축을 풀기 때문에 이것은 그대로 복사하고 실행할 수 있어야합니다.
먼저 100 점을 만든 다음 fn 인수와 함께 over 함수를 사용하여 데이터 프레임에 요소를 추가합니다. 여기에는 많은 포인트가 있지만 호주를 살펴보십시오 : 3 포인트, 3 번 레이블. 여태까지는 그런대로 잘됐다.
이제 지오메트리를 변환하여 버퍼를 생성하고 다시 변환하고 버퍼를 매핑 할 수 있습니다. (두 개의 링크로 제한되어 있기 때문에 이전지도에 포함되어 있습니다.) 우리는 각 나라가 얼마나 많은 버퍼를 겹치는 지 알고 싶습니다. 호주의 경우 눈으로는 4입니다. 오버 기능으로 그것을 얻을 수 있습니다. 마지막 코드 줄에서 시도의 혼란을 보라.
편집 : r-sis-geo의 주석자가 스택 교환 질문 63577에서 참조 된 집계 함수를 언급 했으므로 해결 방법 / 흐름이 해당 기능을 통해 이루어질 수 있지만 왜 갈 필요가 있는지 이해하지 못합니다. 다 공간에 대한 집계는 다른 공간 객체에 대해 그 기능을 갖는 것 같습니다.
require(maptools)
require(sp)
require(rgdal)
require(rgeos)
download.file("http://thematicmapping.org/downloads/TM_WORLD_BORDERS_SIMPL-0.3.zip", destfile="world.zip")
unzip("world.zip")
world.map = readOGR(dsn=".", "TM_WORLD_BORDERS_SIMPL-0.3", stringsAsFactors = F)
orig.world.map = world.map #hold the object, since I'm going to mess with it.
#Let's create 500 random lat/long points with a single value in the data frame: the number 1
set.seed(1)
n=100
lat.v = runif(n, -90, 90)
lon.v = runif(n, -180, 180)
coords.df = data.frame(lon.v, lat.v)
val.v = data.frame(rep(1,n))
names(val.v) = c("val")
names(coords.df) = c("lon", "lat")
points.spdf = SpatialPointsDataFrame(coords=coords.df, proj4string=CRS("+proj=longlat +datum=WGS84"), data=val.v)
points.spdf = spTransform(points.spdf, CRS(proj4string(world.map)))
plot(world.map, main="World map and points") #replot the map
plot(points.spdf, col="red", pch=20, cex=1, add=T) #...and add points.
#Let's use over with the point data
join.df = over(geometry(world.map), points.spdf, fn=sum)
plot(world.map, main="World with sum of points, 750mi buffers") #Note - happens to be the count of points, but only b/c val=1.
plot(points.spdf, col="red", pch=20, cex=1, add=T) #...and add points.
world.map@data = data.frame(c(world.map@data, join.df))
#world.map@data = data.frame(c(world.map@data, over(world.map, points.spdf, fun="sum")))
invisible(text(getSpPPolygonsLabptSlots(world.map), labels=as.character(world.map$val), cex=1))
#Note I don't love making labels like above, and am open to better ways... plus I think it's deprecated/ing
#Now buffer...
pointbuff.spdf = gBuffer(spTransform(points.spdf, CRS("+init=EPSG:3358")), width=c(750*1609.344), byid=T)
pointbuff.spdf = spTransform(pointbuff.spdf, world.map@proj4string)
plot(pointbuff.spdf, col=NA, border="pink", add=T)
#Now over with the buffer (poly %over% poly). How do I do this?
world.map = orig.world.map
join.df = data.frame(unname(over(geometry(world.map), pointbuff.spdf, fn=sum, returnList = F)) ) #Seems I need to unname this...?
names(join.df) = c("val")
world.map@data = data.frame(c(world.map@data, join.df)) #If I don't mess with the join.df, world.map's df is a mess..
plot(world.map, main="World map, points, buffers...and a mess of wrong counts") #replot the map
plot(points.spdf, col="red", pch=20, cex=1, add=T) #...and add points.
plot(pointbuff.spdf, col=NA, border="pink", add=T)
invisible(text(getSpPPolygonsLabptSlots(world.map), labels=as.character(world.map$val), cex=1))
#^ But if I do strip it of labels, it seems to be misassigning the results?
# Australia should now show 4 instead of 3. I'm obviously super confused, probably about the structure of over poly-poly returns. Help?