Maison  >  Article  >  développement back-end  >  Créer des applications SIG Web basées sur Django

Créer des applications SIG Web basées sur Django

PHPz
PHPzoriginal
2023-06-17 13:12:031851parcourir

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 :

  1. Python 3. , nous l'utiliserons pour traiter les données SIG.
  2. 2. Créer un nouveau projet Django
  3. Vous pouvez créer un nouveau projet Django via la commande suivante :
  4. django-admin startproject webgis
Cette commande crée un projet Django nommé webgis. On peut entrer dans le répertoire racine du projet avec la commande suivante :

cd webgis

Ensuite, on peut créer une application nommée gisapp avec la commande suivante :

python manage.py startapp gisapp

Cette 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 = True

4. 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.name

Dans 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éographiques

Nous 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.shp

Cette 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èles

Nous 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'application

Nous pouvons exécuter la commande suivante dans la ligne de commande pour démarrer le serveur Django :

python manage.py runserver

Ensuite, visitez l'adresse suivante pour afficher l'application Web SIG dans le navigateur :

http://127.0.0.1:8000/map

Ré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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn