R sf: точки LinearRing не образуют замкнутую линейную линию - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь вычислить центроиды множества полигонов.

Мой набор данных, geodata, содержит пять столбцов, включая один geometry столбец класса sfc_GEOMETRY, с 45759 строками.

Когда я запускаю sf::st_centroid(geodata), я получаю следующее сообщение

Ошибка в CPL_geos_op ("centroid", x, цифра c (0), целое число (0), цифра c (0),: ошибка оценки: IllegalArgumentException: точки LinearRing не образуют замкнутую линейную строку.

Дополнительно: предупреждающие сообщения:

1: в st_centroid.sf (геоданные ): st_centroid предполагает, что атрибуты постоянны по геометриям x

2: в st_centroid.sf c (st_geometry (x), of_largest_polygon = of_largest_polygon): st_centroid не дает правильных центроидов для данных долготы / широты

  • Должен ли я запустить al oop, чтобы определить, какая геометрия не закрыта?
  • Это проблема с классом моей геометрии? Это должно быть sfc_MULTIPOLYGON?

Возможное решение:

Я столкнулся с этой проблемой при чтении списка файлов через al oop. L oop будет читать файлы, а затем rbind их вместе в geodata, а , а затем рассчитать entroid:

for(i in 1:length(list)){
  file <- st_read(list[i])
  geodata <- rbind(geodata, file) #geodata is here a void sf object
}
geocent <- st_centroid(geodata)

Когда я вычислил центроиды в пределах l oop (для каждого файла в списке), ошибка исчезла.

for(i in 1:length(list)){
  file <- st_read(list[i])
  file <- st_centroid(file)
  geocent <- rbind(geodata, file) #geodata is here a void sf object
}

Следовательно, я думаю, что проблема заключалась в операции привязки.

  • Возможно, я не правильно определил свой пустой объект sf.
  • Возможно, rbind не была подходящей функцией, или я должен был указать ее параметры.

1 Ответ

0 голосов
/ 15 января 2020

Нет необходимости запускать al oop, чтобы определить, какая геометрия плохая. Функция st_is_valid() должна сообщать вам, какие строки имеют проблему.

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

Подробнее о поиске и устранении проблемы в r-space: https://www.r-spatial.org/r/2017/03/19/invalid.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...