Пересечение между пространственными линиями и пространственным полигоном для идентификации - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь определить пространственные линии, которые пересекаются с многоугольником, чтобы устранить их

Я пробовал разные пакеты, чтобы выполнить эту работу, но все они выдают одну и ту же ошибку "Ошибка в RGEOSBinPredFunc (spgeom1, spgeom2, byid, func): IllegalArgumentException: массив точек должен содержать 0 или> 1 элементов "

Пространственные линии и полигоны можно скачать по этой ссылке https://drive.google.com/drive/folders/1CWzZzZucBjhfAthApnOGgSEL7dLXlPt5

библиотека (rgeos)

lines_onland <-gIntersection (my.lines, polygons, byid = TRUE) "Ошибка в RGEOSBinPredFunc (spgeom1, spgeom2, byid, func): IllegalArgumentException: массив точек должен содержать 0 или> 1 элементов "

lines_onland <-gIntersect (my.lines, polygons, byid = TRUE) "Ошибка в RGEOSBinPredFunc (spgeom1, spgeom2, byid, func): IllegalArgumentException: массив точек должен содержать 0 или> 1 элементов "

библиотека (растр)

lines_onland <- растр :: пересечение (my.lines, polygons) Ошибка в RGEOSBinPredFunc (spgeom1, spgeom2, byid, func): IllegalArgumentException: массив точек должен содержать 0 или> 1 элементов

Линии, пересекающие землю

1 Ответ

0 голосов
/ 16 апреля 2019

Данные

library(raster)
my.lines <- shapefile("my.lines.shp")
polygons <- shapefile("polygons.shp")

Сначала выясните, где происходит ошибка

err <- NULL
for (i in 1:length(my.lines)) {
    x <- try(raster::intersect(my.lines[i,], polygons))
    if (class(x) == "try-error") {
        err <- c(err, i)
    }
}

err
#[1]  48  59 191 294

Ошибка возникает для четырех строк, состоящих из одного местоположения, что делает их недействительными

geom(my.lines[err,])
#     object part cump         x        y
#[1,]      1    1    1 -28.53502 38.53658
#[2,]      2    1    2 -28.53413 38.53638
#[3,]      3    1    3 -28.54550 38.53687
#[4,]      4    1    4 -28.53340 38.53602

Удалите недопустимые строки и все будет работать как надо

x <- raster::intersect(my.lines[-err,], polygons) 
...