Django, ein von Python erstelltes Webframework, enthält ein Framework namens GeoDjango, mit dem Apps erstellt werden, die Standortinformationen auf Django verwenden.
Ich konnte nicht viele Informationen über die Verwendung von GeoDjango finden, also war ich süchtig danach, also werde ich es zusammenfassen.
Um GeoDjango verwenden zu können, müssen Sie eine Erweiterung installieren, die geografische Objekte in einer normalerweise verfügbaren Datenbank wie PostgreSQL / SQLite / MySQL verarbeiten kann.
Die Umgebungskonstruktion mit PostgreSQL + PostGIS wird offiziell empfohlen, diesmal jedoch SQLite + Spatia Lite Bauen Sie so, wie Sie es benutzt haben.
Führen Sie SQLite und Spatia Lite ein.
In der offiziellen Dokumentation wird beschrieben, wie Sie das Paket mitbringen und installieren. Es ist jedoch einfacher, es mit Homebrew einzulegen.
Installing Spatialite | Django documentation | Django
$ brew install sqlite
$ brew install libspatialite
$ brew install spatialite-tools
$ brew install librasterlite
Wenn Sie versuchen, es mit pip normal einzusetzen, werden Sie später süchtig.
$ pip install pysqlite #Süchtig machend
Diesmal ist es notwendig, aus der Quelle einzuführen
$ 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
Schreiben Sie setup.cfg
wie folgt um.
[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 .
Ich werde den ENGINE von settings.py
ändern, der im Projekt verwendet wird
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
Ändern Sie das Backend in das von gis bereitgestellte.
Fügen Sie auch "contrib.gis" zu "INSTALLED_APPS" hinzu
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.gis',
)
Ich werde ein Modell mit einem geeigneten geografischen Feld erstellen. Alles ist gut
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'))
Vergessen Sie nicht, es wie gewohnt zu INSTALLED_APPS
hinzuzufügen. Es ist auch eine gute Idee, Admin zur Bestätigung zu erstellen.
import django.contrib import admin
admin.site.register(City)
Bevor Sie normalerweise "synchronisieren" können, müssen Sie eine DB-Vorlage mit SpatiaLite erstellen.
$ 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
Vollständig, wenn die Datenbank wie gewohnt erstellt wird
Auch wenn der folgende Fehler zum Zeitpunkt von "syncdb" auftritt
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.
Die Installation von pysqlite
ist möglicherweise nicht erfolgreich. Ich habe es gelöst, indem ich wie oben beschrieben aus der Quelle gebaut habe.
Wenn alles gut geht, können Sie die Karte auf der Admin-Seite bearbeiten.
Es ist etwas schwieriger zu bedienen als Google Map.
GeoDjango und Längen- / Breitengrade können nicht nur gespeichert werden, sondern es ist auch mit einem O / R-Mapper ausgestattet, mit dem Sie Polygone auf der Karte haben und Suchbedingungen wie das Einbeziehen bestimmter Punkte verwenden können.
Da es sich jedoch um einen Django handelt, der in Japan beispiellos ist und dessen Verwendung begrenzt ist, habe ich ihn noch nie gesehen. Ich hoffe es wird populärer.
Recommended Posts