Django, un framework web créé par Python, est livré avec un framework appelé GeoDjango qui crée des applications qui utilisent les informations de localisation sur Django.
Je n'ai pas trouvé beaucoup d'informations sur l'utilisation de GeoDjango, donc j'étais accro, donc je vais le résumer.
Pour utiliser GeoDjango, vous devez installer une extension qui peut gérer les objets Geographic dans une base de données normalement disponible telle que PostgreSQL / SQLite / MySQL.
La construction de l'environnement avec PostgreSQL + PostGIS est officiellement recommandée, mais cette fois SQLite + Spatia Lite Construisez la façon dont vous l'avez utilisé.
Présentez SQLite et Spatia Lite.
La documentation officielle décrit comment apporter le paquet et l'installer, mais il est plus facile de le mettre avec Homebrew.
Installing Spatialite | Django documentation | Django
$ brew install sqlite
$ brew install libspatialite
$ brew install spatialite-tools
$ brew install librasterlite
Si vous essayez de le mettre en utilisant pip normalement, vous serez accro plus tard.
$ pip install pysqlite #Addictif
Cette fois, il est nécessaire d'introduire à partir de la source
$ 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
Réécrivez setup.cfg
comme suit.
[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 .
Je vais changer le MOTEUR de settings.py
utilisé dans le projet
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
Remplacez le backend par celui fourni par gis.
Ajoutez également contrib.gis
à ʻINSTALLED_APPS`
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.gis',
)
Je vais créer un modèle avec un champ géographique approprié. tout va bien
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'))
N'oubliez pas de l'ajouter à ʻINSTALLED_APPS` comme vous le feriez normalement. Il est également judicieux de créer un administrateur pour confirmation.
import django.contrib import admin
admin.site.register(City)
Avant de pouvoir normalement syncdb
, vous devez créer un modèle de base de données à l'aide de SpatiaLite.
$ 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
Terminé lorsque DB est créé comme d'habitude
De plus, si l'erreur suivante se produit au moment de 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.
L'installation de pysqlite
peut échouer. Je l'ai résolu en construisant à partir de la source comme décrit ci-dessus.
Si tout se passe bien, vous pouvez modifier la carte à partir de la page Admin.
C'est un peu plus difficile à utiliser que Google Map.
En plus de pouvoir enregistrer GeoDjango et la latitude / longitude, il est également équipé d'un mappeur O / R qui vous permet d'avoir des polygones sur la carte et d'utiliser des conditions de recherche telles que l'inclusion de points spécifiques.
Cependant, comme il s'agit de Django, qui est sans précédent au Japon, et que son utilisation est limitée, je ne l'ai jamais vu utilisé. J'espère que cela deviendra plus populaire.
Recommended Posts