Создайте вектор координат для фильтрации данных в определенной области

Пользователь Rookie R здесь, и я был бы очень признателен за любую помощь, которую вы могли бы мне оказать.

Мой проект требует, чтобы я создал векторную рамку вокруг города по своему выбору, а затем отфильтровал много данных, чтобы у меня были данные только относительно области. Тем не менее, прошло несколько лет с тех пор, как я использовал R studio, и справедливо сказать, что я почти ничего не помню об этом языке.

Я изначально использовал

geocode("Hereford, UK")

bbox <-c(Longitude=-2.72,Latitude=52.1)

myMap <- get_map(location = "Hereford, UK",source="google",maptype="roadmap")

Затем я должен создать новую табличку, которая отфильтровывает и дает только соответствующие данные для области.

Я не знаю, как это сделать, и затем я должен наложить данные на карту, которую я создал.

Поскольку у меня есть только центральная точка координат, можно ли создать круг радиусом, скажем, 3 мили вокруг центра моего местоположения, чтобы я мог затем отфильтровать эту область?

Спасибо всем, что нашли время, чтобы прочитать мой пост. Ваше здоровье!


person T.Omalley    schedule 12.04.2020    source источник


Ответы (1)


Большая часть пространственной работы теперь может быть легко выполнена с помощью пакета sf.

Ниже приведен пример кода для аналогичной проблемы. Комментарии объясняют большую часть того, что он делает.

Трудная часть может заключаться в понимании картографических проекций (CRS). Некоторые используют единицы (метры, футы и т. д.), а другие используют широту/долготу. Какой из них вы выберете, зависит от того, с какой областью земного шара вы работаете и чего вы пытаетесь достичь. В большинстве веб-карт используется crs 4326, но он не включает легко используемое измерение расстояния.

На карте ниже точки за пределами примерно в 3 милях от Херефорда отмечены красным цветом, а внутри — темно-бордовым. Синяя точка используется как центр Херефорда и буферной зоны.

library(tidyverse)
library(sf)
#> Linking to GEOS 3.6.2, GDAL 2.2.3, PROJ 4.9.3
library(mapview)

set.seed(4)
#hereford approx location, ggmap requires api key
hereford <- data.frame(place = 'hereford', lat = -2.7160, lon = 52.0564) %>% 
  st_as_sf(coords = c('lat', 'lon')) %>% st_set_crs(4326)

#simulation of data points near-ish hereford
random_points <- data.frame(point_num = 1:20, 
                            lat = runif(20, min = -2.8, max = -2.6),
                            lon = runif(20, min = 52, max = 52.1)) %>%
  st_as_sf(coords = c('lat', 'lon')) %>% st_set_crs(4326) %>%st_transform(27700)

#make a buffer of ~3miles (4800m) around hereford
h_buffer <- hereford %>% st_transform(27700) %>% #change crs to one measured in meters
  st_buffer(4800)


#only points inside ~3mi buffer
points_within <- random_points[st_within( random_points, h_buffer, sparse = F), ]

head(points_within)
#> Simple feature collection with 6 features and 1 field
#> geometry type:  POINT
#> dimension:      XY
#> bbox:           xmin: 346243.2 ymin: 239070.3 xmax: 355169.8 ymax: 243011.4
#> CRS:            EPSG:27700
#>    point_num                  geometry
#> 1          1 POINT (353293.1 241673.9)
#> 3          3   POINT (349265.8 239397)
#> 4          4 POINT (349039.5 239217.7)
#> 6          6 POINT (348846.1 243011.4)
#> 7          7 POINT (355169.8 239070.3)
#> 10        10 POINT (346243.2 239690.3)

#shown in mapview
mapview(hereford, color = 'blue') + 
  mapview(random_points, color = 'red', legend = F, col.regions = 'red') + 
  mapview(h_buffer, legend = F) + 
  mapview(points_within, color = 'black', legend = F, col.regions = 'black')

Создано 12 апреля 2020 г. в пакете reprex (v0.3.0)

person mrhellmann    schedule 12.04.2020