Определить линейный объект на растровой карте и вернуть объект линейной формы с помощью R

Я хотел бы идентифицировать линейные объекты, такие как дороги и реки, на растровых картах и ​​преобразовать их в линейный пространственный объект (класс SpatialLines) с использованием R.

Пакеты raster и sp можно использовать для преобразования объектов из растров в полигональные векторные объекты. (класс SpatialPolygons). rasterToPolygons() будет извлекать ячейки определенного значения из растра и возвращать полигональный объект. Продукт можно упростить с помощью параметра dissolve=TRUE, который вызывает для этого подпрограммы из пакета rgeos.

Все это прекрасно работает, но я бы предпочел, чтобы это был объект SpatialLines. Как я могу это сделать?

Рассмотрим следующий пример:

## Produce a sinuous linear feature on a raster as an example
library(raster)
r <- raster(nrow=400, ncol=400, xmn=0, ymn=0, xmx=400, ymx=400)
r[] <- NA
x <-seq(1, 100, by=0.01)
r[cellFromRowCol(r, round((sin(0.2*x) + cos(0.06*x)+2)*100), round(x*4))] <- 1

## Quick trick to make it three cells wide
r[edge(r, type="outer")] <- 1

## Plot
plot(r, legend=FALSE, axes=FALSE)

Raster representation of linear feature as an example

## Convert linear feature to a SpatialPolygons object
library(rgeos)
rPoly <- rasterToPolygons(r, fun=function(x) x==1, dissolve=TRUE)
plot(rPoly)

SpatialPolygons representation of the linear feature

Будет ли лучшим подходом найти центральную линию, проходящую через многоугольник?
Или существует существующий код для этого?

РЕДАКТИРОВАТЬ: Спасибо @mdsumner за указание на то, что это называется скелетированием.

13
задан digitalmaps 7 March 2012 в 03:58
поделиться