Python/Django Ninja

[Django Ninja] GIS 데이터 처리 관련 정리

yubi5050 2023. 5. 24. 00:13

Django Ninja & GIS 관련 설계 조사 정리 내용

 

Postgis : PostgreSQL DB의 gis 기능이 추가 된 확장 플러그인 (GIS 데이터 처리에 용이)

GIS 데이터라 함은 위/경도 데이터 및 반경 내 xx 조사 등, GIS 기반의 기능 구현에 사용됨

 

 

1. Postgis 및 GIS 데이터 활용하기 위해서 일반적인 방법

- geoDjango라는 Project 기반으로 작업 가능 

- PointField 등 자유롭게 활용 가능 

- 단, 프로젝트 자체가 geoDjango로 진행되어야 한다는 단점이 존재

- https://docs.djangoproject.com/en/4.1/ref/contrib/gis/install/ 

 

 

2. Django Ninja + Pydantic (geo_json)

- Django.db.models.gis.db 하위에는 기본적으로 fields 중 PointField가 존재함

- 그러나 Django Ninja의 Schema Level 에서 PointField를 미지원

- https://github.com/vitalik/django-ninja/issues/335 의 해당 방법 (pydantic의 geo_json spec용 추가라이브러리 활용하여 검증 가능)

 

3. Django 내 DecimalField 사용

- Postgis 를 사용하기 위해선 부가적인 라이브러리 설치가 많음. (gdal, geos 등 + 설치 간 높은 복잡성)

- Django에서 기본적으로 제공하는 Decimal Field로도 진행 가능하며, 일반적으로 위경도 데이터를 처리하는데 큰 이질감이 없음

- 단 반경 내 거리 계산 등에 특화 되지는 않음 (계산 공식등 직접 구현 - 단 계산 등에 대한 참고할 자료들은 많음)

https://stackoverflow.com/questions/30706799/which-model-field-to-use-in-django-to-store-longitude-and-latitude-values