Я пытаюсь вычислить центроиды множества полигонов.
Мой набор данных, 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
не была подходящей функцией, или я должен был указать ее параметры.