Создавайте многоугольники для каждой строки и сохраняйте столбцы - PullRequest
2 голосов
/ 04 августа 2020

Доброе утро, днем ​​или вечером

Я сгруппировал некоторые позиционные данные в интервалы по 1 часу.

Для каждого я извлек минимальные широты и долготы.

Это выглядит так:

df <- "ID    time_bin count      lat       lon    maxlat   minlat    maxlon    minlon
1 2018-10-07 22:00:00    47 51.21723 -5.021828  51.22082 51.21457 -5.019105 -5.024372
2 2018-10-07 23:00:00    61 51.21797 -4.907367  51.23592 51.21224 -4.743538 -5.018899
3 2018-10-08 00:00:00    65 51.27263 -4.612118  51.32474 51.23751 -4.576005 -4.734378
4 2018-10-08 01:00:00   107 51.42989 -4.563178  51.52467 51.32735 -4.553063 -4.575208
5 2018-10-08 02:00:00    65 51.59331 -4.565254  51.64160 51.52571 -4.550257 -4.598212
6 2018-10-08 03:00:00    84 51.59082 -4.637655  51.63241 51.57906 -4.600483 -4.674987"
    
df <- read.table(text=df, header = TRUE)

Используя минимальные и максимальные широты и журналы, я sh создаю многоугольник для каждой строки. Я знаю, что могу сделать это, используя функцию coords2Polygons из пакета orcs.

Например, если я возьму первую строку и введу их вручную, как в примере :

library(sp)
library(Orcs)
library(mapview)

test <- cbind(c(51.21457, 51.22082, 51.22082, 51.21457),
              c(-5.024372, -5.024372, -5.019105, -5.019105))


spy1 <- coords2Polygons(test, ID = "A")
plot(spy1, col = 34)

Создается с использованием комбинации минимальных и максимальных значений широты / длины для определения четырех углов.

Я хочу создать многоугольник в каждой строке. Сохраните всю остальную информацию и график в leaflet.

У меня было несколько попыток, но все начинает становиться немного беспорядочным.

1 Ответ

1 голос
/ 04 августа 2020

Один из подходов - использовать sf пакет из этого отличного ответа здесь . Реализация ваших данных с помощью leaflet:

library(sf)
library(leaflet)
lst <- lapply(1:nrow(df), function(x){
  res <- matrix(c(df[x, 'maxlat'], df[x, 'maxlon'],
                  df[x, 'maxlat'], df[x, 'minlon'],
                  df[x, 'minlat'], df[x, 'minlon'],
                  df[x, 'minlat'], df[x, 'maxlon'],
                  df[x, 'maxlat'], df[x, 'maxlon'])  
                , ncol =2, byrow = T
  )
  st_polygon(list(res))
  
})
df$geomtry <- st_sfc(lst)
str(df)
sfdf <- st_sf(df)
leaflet() %>%
  addTiles() %>%
  addPolygons(data = sfdf)

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...