大型shapefile到栅格


13

我有一个很大的shapefile(1 gb),需要对其进行栅格化。我已经尝试了以下方法。

1.)使用v.in.ogr此失败将其导入GRASS,并显示以下错误消息:错误:G_realloc:无法在break_polygons.c:188上分配498240036字节

2.)我的第二个想法是使用PostGIS。导入shapefile,在网格的x,y位置对其重新采样,然后导出这些点并从xyz创建网格。我成功导入了shapefile(多边形和点),但是将300万个点与100万个多边形相交似乎很慢。我使用了以下PostGIS条件,也许还有改进的余地。

select polygons.land_id,grid.geom from grid,polygons where grid.geom && polygons.geom and within(grid.geom,polygons.geom)

3.)我也曾尝试simplify()在PostGIS中使用。但是我迷失了许多小多边形(即某些仅由小多边形覆盖的区域变为空)。

任何想法将不胜感激。


1
您使用了哪个GRASS版本?至少应为6.4。请注意,在GRASS 7中,矢量地图也实现了大文件支持,这应该有助于克服所示的问题(而且速度要快得多)。
markusN 2011年

我目前正在使用GRASS 6.4。我将很快更新到7,谢谢您的提示。
johannes

您可以在此处获取最新的预编译winGRASS 7二进制文件:wingrass.fsv.cvut.cz/grass70
markusN 2011年

Answers:


14

您可以尝试gdal_rasterize,尽管我还没有使用过这么大的shapefile,所以您可能会遇到与GRASS相同的问题。我认为类似以下内容的东西应该可以工作(GDAL> = 1.8.0):

gdal_rasterize -a AN_ATTRIB -l THE_LAYER -a_nodata -9999 -a_srs EPSG:27700 -co TILED=YES -tr 10 10 -ot Float32 src.shp dest.tif

当然,您将不得不根据源shapefile尝试一些选项。最重要的参数是-tr,它指定像素的分辨率;没有它,您可能会发现自己的栅格很大。

如果要坚持使用GRASS,请尝试为栅格化设置较小的范围,然后将过程分成可管理的块,然后将栅格拼接成一个。


1
gdal栅格化在大约5分钟内完成了所有操作:)。为此非常感谢!
johannes

凉!我很高兴它奏效。
MerseyViking 2011年

3

关于您的初衷,您可以尝试在具有更多RAM或交换磁盘空间的计算机上运行v.in.ogr命令吗?

如果没有,您可以将其拆分为多个文件,然后在重新合并之前对其栅格化。



0

就像开膛手杰克一样,分部分完成。从postgis导出切片的数据导入草并进行转换。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.