#r
Вопрос:
У меня есть пространственный фрейм данных, в котором, насколько я могу судить, есть некоторые искаженные формы. Мне нужно избавиться от этих наблюдений (или исправить их), но я не могу их найти. Это то, что я делал до сих пор:
Во-первых, я обнаружил проблему с некоторыми основными проверками этого:
>class(df)
[1] "sf" "data.frame"
> st_crs(df)
Coordinate Reference System:
User input: NAD83 / Texas South Central (ftUS)
wkt:
....
>df$geocheck <- st_is_valid(df)
>table(df$geocheck, useNA="always")
<NA>
1440173
Я попытался буферизировать его и использовать st_make_valid из этой статьи; никаких проблем
> df_buffer <- st_buffer(df, 0.0)
Error in CPL_geos_op("buffer", x, dist, nQ, numeric(0), logical(0)) :
Evaluation error: IllegalArgumentException: Invalid number of points in LinearRing found 3 - must be 0 or >= 4.
> harris_parcel <- st_make_valid(harris_parcel)
Error in CPL_geos_make_valid(x) :
Evaluation error: IllegalArgumentException: Invalid number of points in LinearRing found 3 - must be 0 or >= 4.
Итак, затем я попытался подмножествовать 100 строк, чтобы попытаться сопоставить их и посмотреть, смогу ли я понять, что происходит, и вот, эти первые 100 строк являются счастливыми и правильными геометриями:
> df_sub <- head(df, n=100)
> df_sub$geocheck <- st_is_valid(df_sub)
> table(df_sub$geocheck, useNA="always")
TRUE <NA>
100 0
Что ставит меня в некоторое замешательство. Я знаю, что в df есть искаженные геометрии, но приемы, которые я знаю, чтобы их найти, не работают. И я чувствую, что умножать на несколько сотен за раз, пока не найду проблемы, вероятно, не лучшее решение, но я не знаю, что еще попробовать, кроме этого. У кого-нибудь есть лучший способ проверить геометрию на наличие проблем?