У меня большой шейп-файл (1 ГБ), и мне нужно растеризовать его. Я уже попробовал следующее.
1.) Импортировать его в GRASS, используя v.in.ogr
эту ошибку, с сообщением об ошибке: ОШИБКА: G_realloc: невозможно выделить 498240036 байт в break_polygons.c: 188
2.) Моя вторая идея заключалась в использовании PostGIS. Импортируйте шейп-файл, измените его выборку в точке x, y сетки, а затем экспортируйте эти точки и создайте сетку из xyz. Я успешно импортировал шейп-файлы (полигоны и точки), но пересечение 1 миллиона полигонов с 300k точек кажется очень медленным. Я использовал следующий пост PostGIS, возможно, есть место для улучшения.
select polygons.land_id,grid.geom from grid,polygons where grid.geom && polygons.geom and within(grid.geom,polygons.geom)
3.) Я также пытался использовать simplify()
в PostGIS. Но я проиграл многим маленьким полигонам (то есть некоторые области, которые были покрыты только маленькими полигонами, стали нулевыми).
Любые идеи очень приветствуются.
Ответы:
Вы можете попробовать gdal_rasterize , хотя я не использовал его с таким большим шейп-файлом, поэтому у вас могут возникнуть те же проблемы, что и с GRASS. Я считаю, что что-то вроде следующего должно работать (с GDAL> = 1.8.0):
Конечно, вам придется поэкспериментировать с некоторыми из опций в зависимости от вашего исходного шейп-файла. Наиболее важным параметром является -tr, который определяет разрешение пикселя; без него вы можете оказаться с очень большим растром ...
Если вы хотите придерживаться GRASS, попробуйте установить меньший экстент для растеризации и разделите процесс на управляемые куски, а затем объедините растры в один.
источник
Что касается вашего первого намерения, не могли бы вы попробовать запустить команду v.in.ogr на машине с большим объемом оперативной памяти или дискового пространства подкачки?
Если нет, вы можете разбить его на несколько файлов и растеризовать каждый из них, прежде чем объединить их снова.
источник
Если вам нужно больше контроля при выполнении растеризации, посмотрите сценарий perrygeo poly_density.py, который использует GDAL под капотом, но может использоваться для перекрывающихся функций или добавления условных оценок, помимо тех, которые возможны
gdal_rasterize
только с помощью одного.источник
Как и Джек Потрошитель, делай это по частям. Из postgis экспортируем кусочки данных, импортируем в траву и конвертируем.
источник
Вот руководство о том, как растеризовать векторную таблицу в PostGIS ...
источник