2017-03-27 4 views
3

그의 article 카일 워커 (Kyle Walker)는 리플렛에 보로 노이 폴리곤을 만드는 방법을 보여주었습니다. 그는 다음 코드에 의해 drew Voronoi polygons around each starbucks coffeehouse in Fort Worth :중력 (마커)의 데이터를 속하는 보로 노이/티 센 폴리곤에 어떻게 할당합니까? (

library(leaflet); library(rgeos) 
library(rgdal); library(spatstat) 
library(maptools) 

starbucks <- read.csv('starbucks.csv') 
fw <- subset(starbucks, City == 'Fort Worth') 
coords <- cbind(fw$Longitude, fw$Latitude) 
## Spatial points w/the WGS84 datum 
sp_fw <- SpatialPointsDataFrame(coords = coords, data = fw, 
       proj4string = CRS("+proj=longlat +datum=WGS84")) 
sp_fw_proj <- spTransform(sp_fw, CRS("+init=epsg:26914")) 
fw_coords <- [email protected] 
## Create the window for the polygons 
window <- owin(range(fw_coords[,1]), range(fw_coords[,2])) 
## Create the polygons 
d <- dirichlet(as.ppp(fw_coords, window)) 
## Convert to a SpatialPolygonsDataFrame and calculate an "area" field. 
dsp <- as(d, "SpatialPolygons") 
dsp_df <- SpatialPolygonsDataFrame(dsp, 
            data = data.frame(id = 1:length([email protected]))) 
proj4string(dsp_df) <- CRS("+init=epsg:26914") 
dsp_df$area <- round((gArea(dsp_df, byid = TRUE)/1000000), 1) 
dsp_xy <- spTransform(dsp_df, CRS("+proj=longlat +datum=WGS84")) 
## Map it! 
leaflet() %>% 
    addMarkers(data = fw, 
     lat = ~ Latitude, 
     lng = ~ Longitude, 
     popup = fw$Name) %>% 
    addPolygons(data = dsp_xy, 
      color = "green", 
      fill = "green", 
      popup = paste0("Area: ", 
         as.character(dsp_xy$area), 
         " square km")) %>% 
    addTiles() 

나는 그의지도에 추가 기능을 추가 할 : 나는 다각형에 특정 색을 지정합니다. 이 색상은 가장 가까운 마커 (중심)의 특성에 따라 다릅니다.

예를 들어 스타 벅스 중심이 "녹색"인 모든 다각형과 Dunkin 'Donuts 중심이 보라색 인 색상으로 색상을 지정합니다. (starbucks.csv에 Dunkin 'Donuts의 좌표가 포함되어 있다고 가정)

즉, 중점의 데이터 ("fw")와 그것이 속한 다각형의 데이터 ("dsp_xy")를 병합하고자합니다. .

누군가 나를 도와 줄 수 있습니까?

+1

우리는 숙제를하러 여기에 오지 않았습니다. 지금까지 뭐 해봤 어? 어디서 붙어 있니? 특히 당신이 문제가있는 것은 무엇입니까? – Adam

+0

아마도 'sp :: over'가 여기 관련 될 수 있습니다. – dash2

답변

2

dismo 패키지의 voronoi 기능이 필요합니다.

library(leaflet) 
library(sf) 
library(dismo) 
library(sp) 

set.seed(1983) 

# Get some sample data 

long <- sample(seq(-118.4, -118.2, 0.001), 50, replace = TRUE) 

lat <- sample(seq(33.9, 34.1, 0.001), 50, replace = TRUE) 

type <- sample(c("Starbucks", "Dunkin"), 50, replace = TRUE) 

다음,의는 sf 데이터 프레임을 만들 수 있습니다 : 나는 또한

이의 스타 벅스와 던킨 도너츠 위치의 재현 가짜 데이터 세트를 생성하자 R.

에 대한 새로운 김포 패키지를 데모이 게시물을 사용합니다 우리의 데이터로부터, 그리고 살펴 :

points <- data.frame(long = long, lat = lat, type = type) %>% 
    st_as_sf(crs = 4326, coords = c("long", "lat")) 

plot(points) 

enter image description here

다음 dismo 패키지의 voronoi 함수로 된 Voronoi 폴리곤을 만듭니다. 매우 간단하며, 우리 포인트와 동일한 좌표계를 부여합니다. 실제 워크 플로우에서는 투영 된 좌표계를 사용해야하지만 일러스트레이션을 위해 WGS84 (평면형으로 가정합니다)를 사용합니다. 또한 sfsp 클래스 사이를왔다 갔다합니다. R 세계는 시간이 흐르면서 sf을 완전히 지원할 것입니다. 그러나 잠시 동안 강요는 간단합니다. 김포

pal <- colorFactor(c("purple", "green"), polys$type) 

polys %>% 
    leaflet() %>% 
    addProviderTiles(providers$CartoDB.Positron) %>% 
    addPolygons(fillColor = ~pal(type), weight = 0.5, color = "grey") %>% 
    addCircleMarkers(data = points, label = ~type, color = ~pal(type)) 

enter image description here

우리는 여기 필요하지 않았지만, 함수 : enter image description here

polys <- points %>% 
    as("Spatial") %>% 
    voronoi() %>% 
    st_as_sf() %>% 
    st_set_crs(., 4326) 

plot(polys) 

지금, 당신의 원하는 색상을 사용하여 리플릿과 시각화 당신도 잘 알고 싶어 할 것입니다. st_join, 이는 공간 조인을 처리합니다. 무의미하고 원래 제안한 오버레이 형식으로 작동합니다.