Для данного Пространственного объекта в R, как я могу обрезать все его элементы, чтобы они лежали внутри ограничительной рамки?
Я хотел бы сделать две вещи (в идеале я бы знал, как сделать обе, но любая из них является приемлемым решением моей текущей проблемы - ограничение шейп-файла полигона для континентальной части США).
Удалите каждый элемент не полностью в пределах ограничительной рамки. Это кажется
bbox()<-
логичным, но такого метода не существует.Выполните настоящую операцию обрезки, чтобы на границе были обрезаны элементы, не являющиеся бесконечно малыми (например, многоугольники, линии) .
sp::bbox
отсутствует метод присваивания, поэтому единственный способ, которым я придумал, - это использоватьover
илиgContains
/gCrosses
в сочетании с объектом SpatialPolygons, содержащим прямоугольник с координатами нового ограничивающего прямоугольника. Затем при обрезке объекта многоугольника вы должны выяснить, какие из них содержатся в сравнении с крестом, и изменить координаты этих многоугольников, чтобы они не превышали рамки. Или что-то вродеgIntersection
. Но наверняка есть более простой способ?
Хотя я знаю, что существует много проблем с ограничивающими прямоугольниками и что пространственное наложение на многоугольник, определяющий интересующую область, обычно предпочтительнее, во многих ситуациях ограничивающие прямоугольники работают нормально и проще.
gIntersection
и придумалError in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, "rgeos_intersection") : TopologyException: no outgoing dirEdge found at 3 2.5
Нет времени для отладки сегодня; написал небрежную версию и исправлю в будущем.Ответы:
Я создал небольшую функцию для этой цели, и она была использована другими с хорошими отзывами!
Это должно решить вашу проблему. Дальнейшее объяснение здесь: http://robinlovelace.net/r/2014/07/29/clipping-with-r.html
Созданный фиктивный многоугольник
b_poly
не имеет строки proj4, что приводит к « Предупреждение: spgeom1 и spgeom2 имеют разные строки proj4 », но это безвредно.источник
sp
,maptools
,rgdal
иrgeos
загружен.Error in .class1(object) : could not find function "extent"
Возможно, у меня проблема с версией R / пакета?library(raster)
в моем уроке: robinlovelace.net/r/2014/07/29/clipping-with-r.html дайте нам знать, как вы ладите ! Приветствия.Вот неаккуратная граничная версия (достаточная для того, чтобы успеть вовремя к завтрашнему мини-сроку :-)):
Если вам нужен ограничивающий прямоугольник для проекта, версия здесь добавляет
interpolate
аргумент, так что в результате проецируются окно изогнут.источник