OS X에서 GeoDjango + SQLite 환경 구축

7586 단어 파이썬장고sqlite
Python의 웹 프레임 워크 Django에는 GeoDjango이라는 Django에서 위치 정보를 사용하여 앱을 만드는 프레임 워크가 포함되어 있습니다.

GeoDjango를 사용하고 있는 정보가 거의 보이지 않고, 빠졌기 때문에 정리해 보겠습니다.

사용할 DB 선택



GeoDjango를 사용하기 위해서는 PostgreSQL/SQLite/MySQL 등, 통상 사용할 수 있는 DB에 Geographic 객체를 취급할 수 있도록 하는 확장을 인스톨 하지 않으면 안됩니다.

PostgreSQL + PostGIS에서의 환경 구축이 공식적으로 추천 되고 있습니다만, 이번은 SQLite + SpatiaLite를 사용한 방법으로 구축합니다.

SQLite와 SpatiaLite 도입



SQLite와 SpatiaLite를 소개합니다.

공식 문서에서는 패키지를 가져와 도입하는 방법이 쓰여져 있지만 Homebrew로 넣는 것이 편하다.

Installing Spatialite | 장고 문서화 | 장고
$ brew install sqlite
$ brew install libspatialite
$ brew install spatialite-tools
$ brew install librasterlite

pysqlite 소개



일반적으로 pip를 사용하여 넣으려고하면 나중에 빠진다.
$ pip install pysqlite # ハマる

이번에는 소스에서 소개해야합니다.
$ curl -O https://pypi.python.org/packages/source/p/pysqlite/pysqlite-2.6.3.tar.gz
$ tar xzf pysqlite-2.6.3.tar.gz
$ cd pysqlite-2.6.3
$ $EDITOR setup.cfg
setup.cfg를 다음과 같이 다시 씁니다.
[build_ext]
#define=
include_dirs=/usr/local/Cellar/sqlite/3.8.3/include
library_dirs=/usr/local/Cellar/sqlite/3.8.3/lib
libraries=sqlite3
#define=SQLITE_OMIT_LOAD_EXTENSION
$ python setup.py install
$ pip install -e .

settings.py 변경



프로젝트에서 사용 settings.py의 ENGINE을 변경하고
DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.spatialite',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

backend를 gis에서 제공되는 것으로 바꾼다.

또한 INSTALLED_APPScontrib.gis 추가
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.gis',
)

모델 정의



적당한 Geographic 필드를 가진 Model을 만들어 준다. 뭐든지 좋은
from django.contrib.gis.db import models
from django.utils.translation import ugettext as _

class City(models.Model):
    name = models.CharField(_('Name'), max_length=32)
    location = models.PointField(_('Location'))

평소와 같이 잊지 않고 INSTALLED_APPS에 추가해 준다. 또한 확인을 위해 Admin을 만들어 두는 것이 좋습니다.
import django.contrib import admin
admin.site.register(City)

DB 만들기



일반적으로 syncdb하기 전에 SpatiaLite를 사용하여 DB 템플릿을 만들어야합니다.
$ spatialite db.sqlite3 "SELECT InitSpatialMetaData();"
the SPATIAL_REF_SYS table already contains some row(s)
InitSpatiaMetaData ()error:"table spatial_ref_sys already exists"
$ python manage.py syncdb

평소대로 DB를 만들 수 있으면 완료

또한, syncdb의 때,
ImproperlyConfigured: The pysqlite library does not support C extension loading. Both SQLite and pysqlite must be configured to allow the loading of extensions to use SpatiaLite.
pysqlite 설치가 잘못되었을 수 있습니다. 위에서 쓴 것처럼 소스에서 빌드하면 해결했습니다.

Admin 페이지에 모델이 표시되는지 확인



잘 가면 Admin 페이지 등에서 지도를 편집할 수 있다.



Google Map에 비해 미묘한 사용이 어렵습니다.

요약



GeoDjango, 위도 경도를 보존할 수 있는 것 외에, 맵상에서 폴리곤이 갖고 있거나, 특정의 지점을 포함하고 있는 등의 검색 조건을 사용할 수 있는 O/R 매퍼가 탑재되고 있거나와 낭비에 고기능!

그러나 다만 국내에서는 예를 보지 않는 Django인데, 사용지가 한정되어 있으므로, 사용되고 있는 곳을 본 적이 없습니다. 더 유행하면 좋네요.

좋은 웹페이지 즐겨찾기