Shapefile lớn để raster


13

Tôi có một shapefile lớn (1 gb) và cần rasterise nó. Tôi đã thử những điều sau đây.

1.) Nhập nó vào GRASS bằng cách sử dụng v.in.ogrthất bại với thông báo lỗi: ERROR: G_realloc: không thể phân bổ 498240036 byte tại break_polygons.c: 188

2.) Ý tưởng thứ hai của tôi là sử dụng PostGIS. Nhập shapefile, lấy mẫu lại tại vị trí x, y của lưới và sau đó xuất các điểm này và tạo lưới từ xyz. Tôi đã nhập thành công các shapefiles (đa giác và điểm) nhưng giao nhau 1 triệu đa giác với 300k điểm dường như là rất chậm. Tôi đã sử dụng satement PostGIS sau đây, có thể có chỗ để cải thiện.

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

3.) Tôi cũng đã thử sử dụng simplify()trong PostGIS. Nhưng tôi đã thua nhiều đa giác nhỏ (tức là một số khu vực chỉ được bao phủ bởi các đa giác nhỏ đã trở thành null).

bất kì ý kiến ​​nào đều được đánh giá cao.


1
Phiên bản GRASS nào bạn đã sử dụng? Nó phải là ít nhất 6,4. Lưu ý rằng trong GRASS 7 hỗ trợ tệp lớn cũng được triển khai cho các bản đồ vectơ sẽ giúp khắc phục vấn đề được chỉ định (cũng nhanh hơn nhiều).
markusN

Tôi hiện đang sử dụng GRASS 6.4. Tôi sẽ cập nhật lên 7 sớm, cảm ơn vì gợi ý.
johannes

Bạn có thể nhận được các nhị phân winGRASS 7 được biên dịch trước mới nhất tại đây: wingrass.fsv.cvut.cz/grass70
markusN

Câu trả lời:


14

Bạn có thể thử gdal_rasterize , mặc dù tôi chưa sử dụng nó với một shapefile lớn như vậy, vì vậy bạn có thể gặp các vấn đề tương tự như bạn đã làm với GRASS. Tôi nghĩ một cái gì đó như sau sẽ hoạt động (với 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

Tất nhiên, bạn sẽ phải chơi xung quanh với một số tùy chọn tùy thuộc vào shapefile nguồn của bạn. Tham số quan trọng nhất là -tr chỉ định độ phân giải của pixel; không có nó, bạn có thể thấy mình với một raster rất lớn ...

Nếu bạn muốn gắn bó với GRASS, hãy thử đặt một mức độ nhỏ hơn cho quá trình rasterization, và chia quá trình thành các phần có thể quản lý được, sau đó khảm các trình quét thành một.


1
gdal rasterize đã làm tất cả trong khoảng 5 phút :). Cảm ơn rất nhiều vì điều đó!
johannes

Mát mẻ! Tôi rất vui vì nó đã làm việc.
MerseyViking

3

Về mục đích đầu tiên của bạn, bạn có thể thử chạy lệnh v.in.ogr trên một máy có nhiều RAM hoặc trao đổi không gian đĩa không?

Nếu không, bạn có thể chia nó thành nhiều tệp, rasterize từng tệp trước khi hợp nhất lại.


1

Nếu bạn cần kiểm soát nhiều hơn khi thực hiện rasterization, hãy kiểm tra tập lệnh poly_d mật độ của perrygeo , sử dụng GDAL dưới mui xe, nhưng có thể được sử dụng cho các tính năng chồng chéo hoặc thêm các đánh giá có điều kiện ngoài các tính năng có thể gdal_rasterizemột mình.


0

Giống như Jack the Ripper, hãy làm điều đó theo từng phần. Từ các lát xuất khẩu postgis của nhập dữ liệu trong cỏ và chuyển đổi.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.