Published on

Django-rest-framework-gis 에 필요한 라이브러리 알아보기(python 3.9)

Authors

기존에 DRF(django-rest-framework) 를 사용하면서,

Django-rest-framework-gis 사용에 필요한 라이브러리를 정리했습니다.

설치 단계(OS, 파이썬, DB)별로 필요한 것이 많은데, 그 중에서 꼭 필요한 것 위주로 정리했습니다.

이 부분은 python 버전과 배포에 영향을 받습니다.

직접 스크립트로 설치하지 않았지만, 눈에 띄는 라이브러리 들도 몇개 있길래 같이 알아봤습니다.

Django-rest-framework-gis

1. OS 단에서, django-rest-framework-gis 에 필요한 세팅

제가 작업한 로컬 환경은 MacOS(M1 Sonoma 14.0) 입니다.

배포는 Docker Image -> python 3.9 버전을 사용했습니다. (AWS ECS에 했으며, 경량이미지는 패키지 관련 에러가 발생해 사용하지 않았습니다.)

FROM python:3.9

(참고)설치에 사용한 Docker 명령어는 아래와 같습니다.

RUN apt-get update && apt-get install -y \
gcc \
libcurl4-openssl-dev \
libssl-dev -y \
libgdal-dev \
gdal-bin \
libgeos-dev \
&& rm -rf /var/lib/apt/lists/*

1.1 GDAL

GDAL (Geospatial Data Abstraction Library)은 공간 데이터 형식을 다루기 위한 오픈소스 라이브러리입니다.

  • 주요 기능 : 다양한 벡터 지리 공간 데이터 형식 읽기 및 쓰기를 지원합니다.
  • 프로젝트 내부적으로 활용: 데이터 변환, 지도 투영 조정, 공간 데이터 처리 및 분석을 수행합니다.

1.2 GEOS

GEOS (Geometry Engine - Open Source)는 C++로 작성된 오픈소스 지오메트릭 함수 라이브러리입니다.

  • 주요 기능: 공간 관계, 공간 연산 및 버퍼 작업 등의 지오메트릭을 처리 합니다.
  • 프로젝트 내부적으로 활용: 공간 데이터의 정확한 지오메트릭 분석 및 처리를 수행합니다. JTS (Java Topology Suite)와 호환되는 API, 강력한 지오메트릭 연산을 지원합니다.

2. Python 단에서 사용하는 패키지

2.1 django-rest-framework-gis

django-rest-framework(DRF)에서 GIS 를 사용하기 위한 라이브러리이자, 프레임워크 입니다.

DRF 와 유사하게 사용되지만, GIS로 랩핑 되었다고도 볼 수 있고 확장되었다고 볼 수 있습니다.

  • 주요 기능: GeoDjango 모델을 RESTful API로 쉽게 노출하게 해줍니다.
  • 프로젝트에서의 활용: 지리공간 데이터를 사용하는 API 개발하는데 유용합니다. 그렇기에 클라이언트와의 효율적인 데이터 교환이 이뤄질 수 있습니다.

공식문서

2.1.1 Djangoframework-gisCompatibility Version(DRF, Django, Python)

공식문서에서 호환되는 버전이 명시되어 있습니다.

사용하는 버전은 1.0.x 을 사용하는 것이 좋아보입니다.

파이썬 버전을 높혀, 효율을 끌어내기에 아직은 3.9 가 최대라 아쉽게 느껴집니다.

DRF-gis versionDRF versionDjango versionPython version
1.0.x3.10up to3.132.2 to 4.03.6to3.9

2.2 GeoPandas

GeoPandas는 Python에서 상용하는 데이터 분석 라이브러리 Pandas와 통합된 지리공간 데이터 처리를 위한 라이브러리입니다.

  • 주요 기능: 공간 데이터 분석, 데이터 처리를 수행할 수 있습니다. 다른 라이브러리와 같이 사용하면 지도 시각화 도 가능합니다.
  • 프로젝트에서의 활용: Pandas의 데이터프레임 구조를 사용해 다양한 지리 공간 데이터 형식과 호환됩니다.데이터셋의 공간적 조작 및 분석, 간편한 데이터 시각화에 활용할 수 있습니다.저는 데이터 변환과 확인을 위한 용도로만 활용했습니다.

3. DB

데이터베이스는 Postgresql 을 사용했습니다.

GIS 연산을 수행하는데 PostGIS를 설치(확장)해야 합니다.

Postgis

3.1 PostGIS , 확장 명령어

PostGIS는 PostgreSQL 데이터베이스의 확장으로, 공간 데이터를 위한 지원을 제공합니다.

DB단에서 Extension 으로 쉽게 적용이 가능하고, 명령어는 아래와 같습니다.

CREATE EXTENSION postgis;
  • 주요 기능: 공간 쿼리, 지오메트릭 연산, 지도 생성에 바탕이 됩니다.
  • 프로젝트에서의 활용: 위에서 언급된 라이브러리들은 PostGIS 환경이 갖춰져 있어야 동작합니다.

3.1.1 Docker로 만든 Postgresql에서 확장하는 방법 을 참고

TODO https://hongreat.co.kr/postgis-%ED%99%95%EC%9E%A5%ED%95%98%EA%B8%B0-gis3%ED%8E%B8-docker%EA%B8%B0%EB%B0%98-postgresql-db-postgis/

4. 직접 설치하지 않았지만 알아두면 좋은 라이브러리

직접 CLI 로 설치 하지 않았더라도 다른 패키지에 랩핑되어 아래 라이브러리들이 설치 될 수 있습니다.

4.1 Shapely

Shapely는 지오메트릭 객체를 조작하고 분석하기 위한 라이브러리입니다.

4.2 Fiona

Fiona는 OGR 라이브러리의 간단한 Python 인터페이스로, 공간 데이터 파일을 읽고 쓰는 기능을 제공합니다..

실제로 공간 데이터 파일의 관리 및 변환, 데이터 입출력 자동화를 수행합니다.

4.3 pyshp

pyshp는 Python에서 ESRI Shapefile 형식의 공간 데이터를 쉽게 읽고 쓸 수 있는 라이브러리입니다.

Shapefile 데이터의 읽기 및 쓰기를 지원해,

4.4 pyproj

pyproj는 Python에서 공간 데이터의 지도 투영 및 좌표 변환을 위한 라이브러리입니다.

4.5 Rasterio

Rasterio는 Python에서 래스터 데이터를 쉽게 읽고, 쓰고, 분석할 수 있는 라이브러리입니다.

래스터 파일 형식의 읽기/쓰기, 공간 분석 및 위성 이미지나 지형 데이터 분석을 수행합니다.

hongreat 블로그의 글을 봐주셔서 감사합니다!