Пространственные операторы в R?

12

Как я могу сделать пространственные выделения или фильтры в R? Я могу сделать это в PostGIS, используя (например):

SELECT * FROM mypoint, mypoly
WHERE ST_Within(mypoint.geom, mypoly.geom);

и это аналогично в большинстве других программ ГИС. Так что я ожидаю, что что-то в R будет выглядеть так:

mypoint[within(mypoint, mypoly),]

но я нигде не могу найти никаких указаний. Я ищу что-то, что использует общую терминологию пространственных предикатов, используемую в PostGIS / GEOS / JTS / Shapely (внутри, содержит, пересекает, перекрывает, касается и т. Д .; DWithin будет бонусом). Эта функциональность или библиотека существует для R? Если нет, есть ли что-то похожее?

Примечание. В R я использую spкласс для своих объектов ( SpatialPointsDataFrameи т. Д.).

Майк Т
источник

Ответы:

11

Для вашего конкретного вопроса, вы должны быть в состоянии использовать point.in.polygon( документы ) или overlay( виньетка ) для выполнения анализа.

Язык пространственных предикатов не прост для реализации, и все упомянутые вами примеры в какой-то момент сводятся к портам или оболочкам JTS. Существует предварительная версия rgeos , недавней записи Google SOC, которая предоставляет доступ к GEOS непосредственно из R.

В целом, кажется, что разработчики R сталкиваются с тем, хотят ли они поддерживать полную реализацию ГИС внутри самого R, или вместо этого полагаются на упрощающие пакеты, которые позволяют взаимодействие с PostGIS, GRASS ( spgrass), SAGA ( rsaga) и т.п., чтобы обеспечить более глубокое понимание. пространственная смекалка.

SCW
источник
point.in.polygonхорошее начало для базовых полигонов, хотя и немного грубое (например): point.in.polygon(pnt@coords[,1], pnt@coords[,2], lake@polygons[[1]]@Polygons[[1]]@coords[,1], lake@polygons[[1]]@Polygons[[1]]@coords[,2]) я очень жду того, rgeosчто вы упомянули, и имеет все двоичные предикаты и многое другое.
Майк Т
Для примеров spgrass6 с GRASS, см. Grass.osgeo.org/wiki/R_statistics
markusN
1
rgeosсейчас на CRAN и очень прост в установке / использовании / etc.
Майк Т