래스터에 큰 shapefile


13

대형 shapefile (1 기가 바이트)이 있으며 래스터 화해야합니다. 나는 이미 다음을 시도했다.

1.) v.in.ogr다음 오류 메시지와 함께 실패 하여 GRASS로 가져옵니다 . ERROR : G_realloc : break_polygons.c : 498240036 바이트를 할당 할 수 없습니다.

2.) 두 번째 아이디어는 PostGIS를 사용하는 것이 었습니다. 모양 파일을 가져 와서 그리드의 x, y 위치에서 다시 샘플링 한 다음이 점을 내보내고 xyz에서 그리드를 만듭니다. 셰이프 파일 (다각형 및 점)을 성공적으로 가져 왔지만 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 에서도 사용하려고했습니다 . 그러나 나는 많은 작은 다각형을 잃었습니다 (즉, 작은 다각형으로 만 덮인 일부 영역은 null이되었습니다).

어떤 아이디어라도 대단히 감사하겠습니다.


1
어떤 GRASS 버전을 사용하셨습니까? 6.4 이상이어야합니다. GRASS 7에서는 벡터 맵에 대해서도 큰 파일 지원이 구현되어 표시된 문제를 극복하는 데 도움이됩니다 (또한 훨씬 빠릅니다).
markusN

현재 GRASS 6.4를 사용하고 있습니다. 힌트 덕분에 곧 7로 업데이트 할 것입니다.
johannes

최신 사전 컴파일 된 winGRASS 7 바이너리를 여기에서 얻을 수 있습니다. wingrass.fsv.cvut.cz/grass70
markusN

답변:


14

gdal_rasterize을 시도해 볼 수는 있지만 큰 모양 파일에는 사용하지 않았으므로 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

물론 소스 셰이프 파일에 따라 일부 옵션을 가지고 놀아야합니다. 가장 중요한 매개 변수는 픽셀의 해상도를 지정하는 -tr입니다. 그것 없이는 매우 큰 래스터를 발견 할 수 있습니다.

GRASS를 고수하려면 래스터 화를 위해 더 작은 범위를 설정하고 프로세스를 관리 가능한 덩어리로 분할 한 다음 래스터를 하나로 모자이크하십시오.


1
gdal rasterize는 약 5 분 안에 모든 작업을 수행했습니다. 고마워요!
johannes

멋있는! 나는 그것이 효과가 기쁘다.
MerseyViking

3

첫 번째 의도와 관련하여 더 많은 RAM 또는 스왑 디스크 공간이있는 시스템 에서 v.in.ogr 명령을 실행할 수 있습니까?

그렇지 않은 경우 여러 파일로 분할하여 다시 병합하기 전에 각 파일을 래스터 화하십시오.


1

래스터 화를 수행 할 때 더 많은 제어가 필요한 경우 에는 후드에서 GDAL을 사용 하는 perrygeo의 poly_density.py 스크립트 를 확인하십시오 . 그러나 기능을 겹치거나 gdal_rasterize단독으로 가능한 것 이상의 조건부 평가를 추가하는 데 사용할 수 있습니다 .


0

리퍼 잭처럼 부품별로 작업하십시오. postgis에서 데이터 조각을 풀로 가져 와서 변환합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.