특정 shapefile을 사용하여 NetCDF에서 데이터를 서브셋해야합니다. 데이터는 1/4도 해상도의 해수면 온도와 바다 색입니다. 미국을 설명하는 4 개의 다각형이 있습니다. 동북 대륙 선반 대형 해양 생태계와 데이터 추출에 사용해야하는 하위 구성 요소입니다. 1982-2014의 월간 복합 파일로 작업 중이므로이 데이터 추출 루틴을 자동화해야합니다. 파일은 [35, 45, -80, -60]의 대략적인 작업 영역 그리드로 이미 서브 세트되어 있습니다.
이전에는 HDF5 데이터 파일을 R의 래스터로 변환하여 이러한 방식으로 처리했지만이 방법은 실제로 비효율적이며 현재 NetCDF 파일을 사용하는 Python에는 더 나은 솔루션이 있다고 확신합니다.
지금까지 GDAL과 Fiona를 사용하여 shapefile을 읽고 NetCDF4를 사용하여 데이터 파일을로드했습니다. 데이터 하위 설정 방법을 잘 모르겠습니다. 나는 이것을 찾았다:
Python 용 GDAL : NetCDF 파일에서 하위 도메인을 추출합니까?
그러나 간단한 다각형 상자 이외의 다른 것을 사용하여 NetCDF 파일을 부분 집합으로 만드는 방법에 대해 가장 모호한 아이디어는 없습니다.
다각형 루틴의 점은 작동하는 데 영원이 필요하지만 초기 모양으로 이러한 모양에 맞게 회전 된 작은 경계 상자를 사용하여 데이터를 부분 집합으로 만든 다음 폴리 점 검색을 수행 할 수 있습니다.
lon / lat 바운딩 박스를 사용하여 곡선 netCDF 파일 (ROMS 모델 출력)을 서브 셋팅.
어떤 아이디어?
편집 1 :
방금 OpenClimateGIS 패키지를 보았는데 청구서에 완벽하게 맞을 것 같습니다 …
http://ncpp.github.io/ocgis/examples. html # advanced-subsetting
답변
이것은 귀하의 요구에 맞게 조정될 수 있습니다.
파이썬에서 명령 줄을 호출하는 것이 마음에 들지 않으면 다음과 같이 할 수 gdalwarp -cutline clip.shp -cl clip -crop_to_cutline input_raster output_raster_clipped.tif
있습니다. -cwhere
그리고 -csql
더 적합 할 수 있습니다 gdalwarp 옵션 클리핑 네 개의 다각형 중 하나를 선택합니다.
답변
이것을보십시오 : https : //.com/questions/34585582/how-to-mask-the-specific-array-data-based-on-the-shapefile
염두에 두어야 할 것은 NetCDF를로드 한 후에는 NumPy 어레이를 사용하고 있다는 것입니다.
무엇을 출력하려고합니까? 다각형 영역을 기반으로 한 요약 통계?
어쨌든, 여기 내가 할 일이 있습니다 :
- shapefile을로드하고 해당 영역을 지원되는 형식으로 만듭니다 (위의 링크 사운드에서 matplotlib 마스크 프로세스를 목표로합니다)
- NetCDF 파일을로드하고 단일 X, Y, T numpy 배열로 데이터 가져 오기
- 다각형을 사용하여 해당 배열을 한 번에 하나씩 마스크합니까?
- 요약 통계를 내 보냅니다.
답변
rioxarray를 사용할 수 있습니다. 예를 들면 다음과 같습니다. https://corteva.github.io/rioxarray/stable/examples/clip_geom.html
import rioxarray
import geopandas
geodf = geopandas.read_file(...)
xds = rioxarray.open_rasterio(...)
clipped = xds.rio.clip(geodf.geometry.apply(mapping), geodf.crs)