Я пытаюсь выполнить пространственное соединение между данными точек и данными многоугольников.
У меня есть данные, которые указывают пространственные координаты события в моем CSV-файле A, и у меня есть другой файл, шейп-файл B, который содержит границы области в виде полигонов.
head(A)
month longitude latitude lsoa_code crime_type
1 2014-09 -1.550626 53.59740 E01007359 Anti-social behaviour
2 2014-09 -1.550626 53.59740 E01007359 Public order
3 2014-09 -1.865236 53.93678 E01010646 Anti-social behaviour
head(B@data)
code name altname
0 E05004934 Longfield, New Barn and Southfleet <NA>
1 E05000448 Lewisham Central <NA>
2 E05003149 Hawcoat <NA>
Я хочу соединить данные преступления A с моим шейп-файлом B, чтобы отобразить события преступления, которые происходят в моей области A. К сожалению, я не могу выполнить соединение атрибутов на основе, code
поскольку код в A ссылается на другие единицы, чем код в B.
Я прочитал несколько уроков и постов, но не смог найти ответ. Я старался:
joined = over(A, B)
и overlay
, но не выполнить то, что я хотел.
Есть ли способ сделать это соединение напрямую или потребуется промежуточное преобразование из А в другой формат?
Концептуально я хочу выбрать те точки A, которые попадают в code
области B (аналогично «объединению на основе пространственного расположения в ArcGIS»).
Был ли у кого-то этот вопрос и решил его?
источник
point.in.polygon()
в упаковкеsp
?point.in.polygon
том, сохранит ли это переменныеmonth
иcrime_type
. Ты знаешь об этом?point.in.poly
и наконец выбрал те точки, которые попадают в соответствующие многоугольники. Благодарю.Ответы:
Функция point.in.poly в пакетеatialEco возвращает объект SpatialPointsDataFrame точек, которые пересекают объект sp polygon, и дополнительно добавляет атрибуты polygon.
Сначала давайте добавим требуемые пакеты и создадим пример данных.
Теперь давайте взглянем на данные и нанесем их на график.
Наконец, мы можем пересекать точки с полигонами. Результатом будет объект SpatialPointsDataFrame, в данном случае два дополнительных атрибута (PIDS, y), которые содержались в данных многоугольника srdf.
Если в данных многоугольника нет уникальной идентификационной колонки, ее можно легко добавить.
После пересечения точек и многоугольников мы можем объединить точки, используя уникальные идентификаторы многоугольников, которые были атрибутом в данных многоугольника.
источник
sp::point.in.polygon
фактически возвращает числовое значение (0 = точка снаружи, 1 = внутри, 2 = по краю, 3 = по вершине). Может быть правильным для некоторых обстоятельств. Думаю, что это было полезно отметить здесь, так как это лучший результат Google для связанных терминовover()
из пакетаsp
может быть немного запутанным, но работает хорошо. Я предполагаю, что вы уже сделали "A" пространственным сcoordinates(A) <- ~longitude+latitude
:Вместо точечного пространственного объекта это просто дает вам фрейм данных с тем же самым номером. строки как A, и одна переменная "код" из каждого пересекающегося многоугольника из B.
источник
over()
возникли проблемы с точками в вершинах многоугольников, хотя я думаю, что это самое простое решение, которое я нашел до сих пор.Вот решение, похожее на dplyr:
Данные о населении получены по адресу : https://www.ons.gov.uk/peoplepopulationandcommunity/populationandmigration/populationestimates/datasets/par Parliamentaryconstituencymidyearpopulationestimates.
Мне пришлось преобразовать файлы форм, загруженные из, в geoJson: https://geoportal.statistics.gov.uk/datasets/westminster-par Parliamentary-constituencies-de December-2018-uk-bgc/data?page=1
Вы можете сделать это:
источник