Учитывая вектор координат, идентифицируйте многоугольник из шейп-файла, в который он попадает.

У меня есть многоугольники, хранящиеся в SpatialPolygonsDataFrame, а мои координаты - во фрейме данных.

Я хочу получить дополнительный столбец в моем фрейме данных, который помечает OBJECTID (идентификатор многоугольника из шейп-файла), в который попадают координаты.

Моя проблема такая же, как и с это

Но его результат немного отличается. Кроме того, это довольно медленно. Я попытался пометить всего 4 координаты, и это заняло более 5 минут. Я собираюсь пометить координаты 16k, можно ли сделать это быстрее?


person Brent Carbonera    schedule 15.03.2018    source источник


Ответы (1)


Текущие методы, о которых я знаю, не будут делать этого точно (т.е., создают один идентификатор многоугольника для каждой координаты), потому что они обобщены на случай, если одна точка содержится в нескольких (перекрывающихся многоугольниках).

См. sp::over(), который раньше назывался overlay().

Пример:

over(sr, geometry(meuse), returnList = TRUE)
over(sr, meuse, returnList = TRUE)

Возможные дубликаты (сложно сказать, не увидев данных из вашего примера):

person wibeasley    schedule 15.03.2018
comment
Функция over работает с моим использованием! Также пригодилось использование cbind из вашей второй статьи. Я заставлял себя использовать gContains, но теперь вижу, что он используется по-другому. Спасибо за помощь. - person Brent Carbonera; 15.03.2018
comment
Рад слышать это. Подумайте, добавляет ли одно из этих действий информацию к вопросу: stackoverflow.com/help/someone-answers - person wibeasley; 15.03.2018