GDAL을 사용하여 파이썬에서 래스터 스무딩 / 보간?


20

파이썬으로 개발 중이며 OSGEO의 GDAL을 사용하여 래스터 및 shapefile을 조작하고 상호 작용합니다.

포인트 피처가있는 쉐이프 파일을 가져 와서 표면 래스터에 보간하고 싶습니다. 지금은 포인트 기능의 값을 래스터 (모든 nodata 값으로 설정 됨)로 레코딩하지만 만지지 않은 모든 픽셀을 'nodata'값으로 남겨 두는 'RasterizeLayer'메서드를 사용하고 있습니다. 따라서 바둑판 형 래스터가 남았습니다.

RasterizeLayer를 사용한 후의 내용 :

[gdal.rasterizelayer를 사용하여 래스터]

최종 제품에 필요한 것 :

여기에 이미지 설명을 입력하십시오

필자가 찾고있는 함수는 arcgisscripting import에서 'Spline_sa ()'라고 알려져 있습니다.

GDAL도 비슷한 기능을 가지고 있거나 원하는 출력을 얻는 다른 방법이 있습니까?

답변:


18

NumPy와 Scipy를 살펴 보겠습니다 . scipy.interpolate.griddata 함수를 사용하여 SciPy Cookbook 에 포인트 데이터를 보간하는 좋은 예가 있습니다. 분명히 이것은 데이터를 numpy 배열로 가지고 있어야합니다.

  • GDAL 파이썬 바인딩을 사용 gdal.Dataset.ReadAsArray()하면 래스터를 사용하여 파이썬으로 데이터를 읽을 수 있습니다 .
  • OGR을 사용하면 기능 레이어를 반복하고 모양 파일에서 점 데이터를 추출 할 수 있습니다 (또는 더 좋은 방법은 GEOMETRY=AS_XYZ[ OGR CSV 파일 형식 참조]를 사용하여 모양 파일을 CSV에 작성 하고 csv를 Python으로 읽습니다).

그리드 출력을 얻었 으면 GDAL을 사용하여 결과 numpy 배열을 래스터에 쓸 수 있습니다.

마지막으로, Scipy interpolate 라이브러리를 사용하여 운이 없다면 항상 scipy.ndimage 를 사용해보십시오 .


도와 주셔서 감사합니다! Scipy.interpolate.griddata 접근 방식에 소용돌이가 발생합니다. 결과를 다시 게시하겠습니다.
Doug

1
이 게시물로 돌아 오는 데 너무 오래 걸린 것에 대해 사과드립니다. 위의 대답은 기본적으로 내 문제를 해결하기 위해 한 것입니다. Scipy 보간 라이브러리를 사용하여 해당 데이터 공간을 채우고 래스터 밴드에 다시 썼습니다. 도와 주셔서 감사합니다!
Doug

@Doug 걱정하지 마세요.
om_henners 2016 년

1
이 솔루션은 얼마나 빠릅니까? 모든 100x100 만 알려진 값인 10k x 10k 그리드에 사용할 수 있습니까? 보간에 비해 엄청나게 빠른 gdal_fillnodata를 시도했지만 너무 드문 점에서는 제대로 작동하지 않습니다. 지금은 Saga에서 삼각 측량을 사용하고 있지만 중간 배열에서는 매우 느리고 큰 배열에서는 실패합니다.
Miro

12

GDAL 그리드 API를 살펴보십시오 . 그것이 파이썬 바인딩에 노출되어 있는지는 모르겠지만, 그렇지 않으면 하위 프로세스 모듈을 통해 gdal_grid 유틸리티를 호출합니다 .

GDAL 그리드 API는 역 거리 가중치, 이동 평균 및 가장 가까운 이웃 만 사용하며 스플라인을 구현하지 않습니다. 다른 옵션은 Scipy 를 사용하는 입니다.


1

이 스레드에 약간 오래되었지만 skspatial이라는 sklearn의 KNN 알고리즘을 사용하는 간단한 모듈을 작성했습니다.

https://github.com/rosskush/skspatial

geopandas를 사용하여 shapefile을 가져오고 열을 선택하면 래스터로 내보낼 수있는 표면을 보간합니다. 매우 기본적이고 아마도 최선의 방법은 아니지만 적어도 순수한 파이썬을 유지합니다.

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