ошибка при использовании st_intersects, в CPL_geos_binop (st_geometry (x), st_geometry (y), op, par, pattern: ошибка оценки: IllegalArgumentException - PullRequest
0 голосов
/ 24 апреля 2020

Wi sh для пересечения двух LINESTRING в R.

nc1 = st_read(shp_file_1)
nc2 = st_read(shp_file_2)

Вышеуказанные шаги выполнены успешно, шейп-файлы могут быть загружены в R.

res= st_intersects(nc1, nc2)
Error in CPL_geos_binop(st_geometry(x), st_geometry(y), op, par, pattern,  :
  Evaluation error: IllegalArgumentException: point array must contain 0 or >1 elements.

Итак, как почини это? Спасибо.

1 Ответ

0 голосов
/ 25 апреля 2020

Я проверил шейп-файл nc1 и обнаружил, что объекты имеют только 1 точку на объект, даже если они LINESTRING.

. Удалите эти 1-точечные LINESTRING, операция st_intersects может быть успешной.

nc1$cnt2 = stringr::str_count(nc1$geometry, ",")

Здесь cnt2 - это недавно созданный столбец data.frame для хранения номера "," в столбце geometry. Это может указывать количество баллов за каждую функцию.

library('dplyr')
nc3 = filter(nc1, cnt2>1)

Мы можем сделать:

res= st_intersects(nc3, nc2)

или:

res = st_join(nc3, nc2, join = st_intersects)
...