Добавление записей фрейма данных в полигон и фильтрация в R

#r #shiny #polygon #spatial #shapefile

#r #блестящий #полигон #пространственный #шейп-файл

Вопрос:

Итак, я создаю R-shinyapp с интегрированной в него картой листовок. У
меня есть все эти записи с указанием даты, времени, координат и значения в фрейме данных (пример -данные, показанные ниже)

                dateTime longitude latitude    value
1   2020-12-16 17:01:20   5.39288  52.1695   7.8750
2   2020-12-16 17:01:17   5.13751  52.0565   6.6250
3   2020-12-16 17:01:14   5.06665  51.5589   7.9375
4   2020-12-16 17:01:14   5.06876  51.5407   7.8750
5   2020-12-16 17:01:10   5.37686  52.1628   7.8750
6   2020-12-16 17:01:10   4.48129  51.8972   8.4375
7   2020-12-16 17:00:56   5.36868  52.1512   7.2500
8   2020-12-16 17:00:50   5.37665  52.1625   7.9375
9   2020-12-16 17:00:40   4.76126  51.5904   8.6250
10  2020-12-16 17:00:28   5.03778  51.6557   8.2500
11  2020-12-16 17:00:19   5.39493  52.1604   7.4375
12  2020-12-16 17:00:18   6.00140  52.2250  11.5000
13  2020-12-16 17:00:18   5.38287  52.1591 -26.0000
14  2020-12-16 17:00:13   4.68015  52.0269   7.6250
15  2020-12-16 17:00:11   5.38129  52.2039   7.6250
16  2020-12-16 17:00:08   5.37653  52.1581   7.8125
17  2020-12-16 17:00:05   5.31345  60.3948   8.3125
18  2020-12-16 16:59:32   5.36609  52.1619   7.5000
19  2020-12-16 16:59:21   5.39023  52.1761   7.5625
20  2020-12-16 16:59:15   5.38635  52.1781   7.8125
21  2020-12-16 16:59:08   5.11014  51.5553   8.4375
22  2020-12-16 16:59:04  10.66060  59.8672  -0.6250
23  2020-12-16 16:58:59   5.07648  51.5539   8.1250
24  2020-12-16 16:58:49   5.35388  52.1633   8.0625
25  2020-12-16 16:58:46   5.39020  52.1735   7.9375
 

У меня также есть эти полигоны, которые я извлек из файла .shp и прикрепил к карте листовки.
Я хочу, чтобы эти записи, показанные выше, были прикреплены к полигонам, чтобы я мог использовать фильтр для отображения минимального, максимального и среднего значений всех значений в каждом полигоне.

Я пытался искать ответы здесь и в других местах, но совершенно не понимаю, как я буду это делать, поэтому, если вам нужна какая-либо дополнительная информация, я могу ее предоставить.

Ответ №1:

Если я вас правильно понял, вы хотите проверить, какие точки данных попадают в полигоны в зависимости от местоположения, и присоединить данные к полигонам. Таким образом, становится возможным дальнейший анализ данных. Лично я бы пошел с sf пакетом, чтобы преобразовать ваши точечные данные в объект пространственных объектов, а затем выполнить пространственное соединение.

 #convert  data to spatial feature (assuming data is called 'df')
points <- st_as_sf(df, coords = c("longitude", "latitude"), crs = 4326)

 

Проверьте crs ваших данных! На данный момент я предполагал WSG1984. Теперь, когда оба ваших данных представлены в виде пространственных объектов (полигонов и точечных данных), вы можете использовать st_join для объединения данных (при условии, что они находятся в одном и том же crs):

 #perform spatial join
polygons_with_data <- st_join(points, nameofpolygonfile, join = st_intersects)
 

Эта функция проверяет, где точки пересекаются с полигоном, а затем объединяет данные. Вы можете использовать множество различных способов join , таких как st_within , st_within_distance , и т.д..

Пожалуйста, дайте мне знать, если вам нужна дополнительная помощь.