Maison > Article > développement back-end > Créer des applications SIG Web basées sur Django
Avec le développement rapide du système de positionnement global (GPS) et de la technologie d'imagerie satellitaire, le système d'information géographique (SIG) est devenu un domaine d'application important. Le SIG ne se limite pas à la production et à l'analyse de cartes, mais est également largement utilisé dans la gestion de l'environnement, la gestion des terres, la planification urbaine et d'autres domaines. Le développement d'applications Web SIG permet aux utilisateurs d'interroger, d'analyser et de gérer des données SIG en tout lieu, à tout moment et via n'importe quel appareil, ce qui offre de grandes perspectives d'application.
Django est un framework de développement Web basé sur le langage Python. Il fournit une série d'outils et de technologies de développement qui peuvent nous aider à créer rapidement des applications Web efficaces. Cet article explique comment utiliser Django pour créer une application SIG Web simple.
1. Préparation de l'environnement
Avant de commencer, nous devons nous assurer que les environnements nécessaires suivants ont été installés :
django-admin startproject webgis
cd webgisEnsuite, on peut créer une application nommée gisapp avec la commande suivante :
python manage.py startapp gisappCette commande crée une application Django nommée gisapp et l'ajoute au projet Un sous-répertoire avec le même nom est créé sous le répertoire. 3. Configurez le projet Django Nous devons configurer GDAL et l'application dans le fichier settings.py du projet :
# settings.py # 导入GDAL库 from django.contrib.gis import gdal # 数据库设置 DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', # 使用PostGIS数据库 'NAME': 'webgis', # 数据库名称 'USER': 'postgres', # 数据库用户名 'PASSWORD': '****', # 数据库密码 'HOST': '127.0.0.1', # 数据库地址 'PORT': '5432', # 数据库端口 } } # 应用设置 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.gis', 'gisapp', # 加入我们的应用程序 ] # 时间区域设置 TIME_ZONE = 'Asia/Shanghai' # GDAL设置 gdal.HAS_GDAL = True gdal.HAS_SRS = True4. Créer un modèle de caractéristiques géographiques Nous devons créer un peu de géographie dans le models.py de l'application fichier Modèle d'entité pour stocker les données d'entités géographiques dans la base de données. Par exemple, nous pouvons créer un modèle appelé « WorldBorder » pour stocker les informations sur les frontières des pays du monde. Voici la définition du modèle :
# models.py from django.contrib.gis.db import models class WorldBorder(models.Model): name = models.CharField(max_length=50) area = models.IntegerField(default=0) pop2005 = models.IntegerField(default=0) fips = models.CharField(max_length=2) iso2 = models.CharField(max_length=2) iso3 = models.CharField(max_length=3) un = models.IntegerField(default=0) region = models.IntegerField(default=0) subregion = models.IntegerField(default=0) lon = models.FloatField() lat = models.FloatField() mpoly = models.MultiPolygonField() def __str__(self): return self.nameDans ce modèle, nous définissons certains champs pour stocker les informations de base du pays/région (telles que le nom, la superficie, la population, etc.), et nous définissons également un champ de tapez MultiPolygonField pour stocker les informations de limite. 5. Créer des données de caractéristiques géographiquesNous devons créer des données de caractéristiques géographiques pour les stocker dans la base de données. On peut importer des données dans la base de données avec la commande suivante :
ogr2ogr -f "PostgreSQL" PG:"dbname=webgis user=postgres host=127.0.0.1 password=**** port=5432" -nln worldborder -nlt MULTIPOLYGON -update -overwrite -lco GEOMETRY_NAME=mpoly -skipfailures ./world_borders.shpCette commande importe les données du fichier world_borders.shp dans une table nommée "worldborder". 6. Écrire des fonctions de vue Nous devons écrire certaines fonctions de vue dans le fichier vues.py de l'application afin de répondre aux demandes des utilisateurs. Par exemple, nous pouvons écrire une fonction d'affichage nommée « carte » pour afficher les informations sur les frontières des pays du monde sur la carte. Voici la définition de cette fonction d'affichage :
# views.py from django.shortcuts import render from django.contrib.gis.geos import GEOSGeometry from .models import WorldBorder def map(request): # 获取所有国家/地区 countries = WorldBorder.objects.all() # 构造GeoJSON格式数据 geojson = { "type": "FeatureCollection", "features": [] } for country in countries: feature = { "type": "Feature", "geometry": country.mpoly.geojson, "properties": { "name": country.name, "area": country.area, "pop2005": country.pop2005, "fips": country.fips, "iso2": country.iso2, "iso3": country.iso3, "un": country.un, "region": country.region, "subregion": country.subregion } } geojson["features"].append(feature) # 返回地图页面 return render(request, 'map.html', {'geojson': geojson})Cette fonction récupère d'abord les informations de tous les pays puis les convertit en données au format GeoJSON. Enfin, les données sont transmises à un modèle nommé « map.html » pour affichage. 7. Écriture de modèlesNous devons créer un modèle nommé "map.html" dans le répertoire des modèles de l'application pour afficher les cartes et les données. Voici la définition de ce modèle :
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Web GIS Application</title> <style> #map { width: 100%; height: 100%; position: absolute; top: 0; left: 0; z-index: -1; } </style> <script src="{% static 'leaflet/leaflet.js' %}"></script> <link rel="stylesheet" href="{% static 'leaflet/leaflet.css' %}"/> </head> <body> <div id="map"></div> <script> // 初始化地图 var map = L.map('map').setView([39.9, 116.4], 3); // 添加图层 var geojson = {{ geojson | safe }}; var countries = L.geoJSON(geojson, { onEachFeature: function (feature, layer) { layer.bindPopup(feature.properties.name); } }).addTo(map); // 添加控件 L.control.scale().addTo(map); // 添加底图 var osm = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors' }); osm.addTo(map); </script> </body> </html>Ce modèle utilise une bibliothèque de cartes JavaScript appelée "Leaflet". 8. Exécutez l'applicationNous pouvons exécuter la commande suivante dans la ligne de commande pour démarrer le serveur Django :
python manage.py runserverEnsuite, visitez l'adresse suivante pour afficher l'application Web SIG dans le navigateur :
http://127.0.0.1:8000/mapRésumé Cet article décrit comment créer une application SIG Web simple à l'aide de Django et GDAL. En utilisant ces outils et techniques, nous pouvons facilement développer des applications Web efficaces dans lesquelles afficher et analyser des données géographiques. De plus, nous pouvons utiliser d’autres bibliothèques de cartes et sources de données SIG pour étendre et optimiser davantage notre application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!