_taras_ писал(а): ↑29 ноя 2024, 16:28 Какой командой в сделать генеализацию вектора? Кроме как упростить геометрию ничего не увидел.
 
не вектора, а растра. С вектором слишком много проблем
программку сделал, но сохранять пришлось через одно место - после замены S4 слота объект рисуется, но не сохраняется, R вылетает без сообщений, что-то внутри. Но в sf преобразуется нормально, и сохраняеться. Порог площади - конcтанта в начале скрипта.
Код: Выделить всё
library(rgdal)
library(raster)
library(sf)
tmp.dir = "c:/temp"
fn = sprintf("%s/class_-1.shp",tmp.dir)
v = readOGR(fn)
v.src=v
min_area = 1000
area_list = c()
first=TRUE
for(i.obj in 1:nrow(v)) {
  v1 = v[i.obj,]
  polygons.list = v1@polygons
  for(i.poly in 1:length(polygons.list)) {
    cur.poly = polygons.list[[i.poly]]
    ring.list = cur.poly@Polygons
    new.ring.pos = c()
    for(i.ring in 1:length(ring.list)) {
      cur.ring = ring.list[[i.ring]]
      if(cur.ring@hole) area_list = c(area_list,cur.ring@area)
      if(!cur.ring@hole || cur.ring@area > min_area) {
        new.ring.pos = c(new.ring.pos,i.ring)
      } else {
        # print(c(i.obj,i.poly,i.ring))
      }
    }
    v1@polygons[[i.poly]]@Polygons = ring.list[new.ring.pos]
    v1@polygons[[i.poly]]@plotOrder = 1:length(new.ring.pos)
  }
  v2 = foo=new("SpatialPolygonsDataFrame",data=v1@data,polygons=v1@polygons,plotOrder=v1@plotOrder,bbox=v1@bbox,proj4string=v1@proj4string)
  if(first) {
    first = FALSE
    v.new = v2
  } else {
    v.new = rbind(v.new,v2)
  }
}
fn1 = sprintf("%s/class_-1_filtered.shp",tmp.dir)
foo=st_as_sf(v.new)
st_write(foo, fn1, "test",delete_dsn=TRUE)
			
		
				
			 
- foo.jpg (156.11 КБ) 3232 просмотра