#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
, и т.д..
Пожалуйста, дайте мне знать, если вам нужна дополнительная помощь.