Heim  >  Artikel  >  Backend-Entwicklung  >  Erstellen Sie Web-GIS-Anwendungen basierend auf Django

Erstellen Sie Web-GIS-Anwendungen basierend auf Django

PHPz
PHPzOriginal
2023-06-17 13:12:031799Durchsuche

Mit der rasanten Entwicklung des globalen Positionierungssystems (GPS) und der Satellitenbildtechnologie ist das geografische Informationssystem (GIS) zu einem wichtigen Anwendungsgebiet geworden. GIS beschränkt sich nicht nur auf die Kartenerstellung und -analyse, sondern wird auch häufig in den Bereichen Umweltmanagement, Landmanagement, Stadtplanung und anderen Bereichen eingesetzt. Die Entwicklung von Web-GIS-Anwendungen ermöglicht es Benutzern, GIS-Daten an jedem Ort, zu jeder Zeit und über jedes Gerät abzufragen, zu analysieren und zu verwalten, was große Anwendungsaussichten bietet.

Django ist ein Webentwicklungs-Framework, das auf der Python-Sprache basiert. Es bietet eine Reihe von Entwicklungstools und -technologien, die uns helfen können, schnell effiziente Webanwendungen zu erstellen. In diesem Artikel wird erläutert, wie Sie mit Django eine einfache Web-GIS-Anwendung erstellen.

1. Umgebungsvorbereitung

Bevor wir beginnen, müssen wir sicherstellen, dass die folgenden erforderlichen Umgebungen installiert wurden:

  1. Python 3. Wir werden es zur Verarbeitung von GIS-Daten verwenden.
  2. 2. Erstellen Sie ein neues Django-Projekt
  3. Sie können ein neues Django-Projekt mit dem folgenden Befehl erstellen:
  4. django-admin startproject webgis
Dieser Befehl erstellt ein Django-Projekt mit dem Namen webgis. Mit dem folgenden Befehl können wir das Stammverzeichnis des Projekts aufrufen:

cd webgis

Als nächstes können wir mit dem folgenden Befehl eine Anwendung namens gisapp erstellen:

python manage.py startapp gisapp

Dieser Befehl erstellt eine Django-Anwendung mit dem Namen gisapp und fügt sie dem Unterverzeichnis des Projekts A hinzu Unter dem Verzeichnis wird ein Ordner mit demselben Namen erstellt.

3. Konfigurieren Sie das Django-Projekt

Wir müssen GDAL und die Anwendung in der Datei „settings.py“ des Projekts konfigurieren:

# 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. Erstellen Sie ein geografisches Feature-Modell

Wir müssen etwas Geografie in der Datei „models.py“ der Anwendung erstellen Datei-Feature-Modell zum Speichern geografischer Feature-Daten in der Datenbank. Beispielsweise können wir ein Modell namens „WorldBorder“ erstellen, um Grenzinformationen von Ländern auf der Welt zu speichern. Das Folgende ist die Definition des Modells:

# 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

In diesem Modell definieren wir einige Felder, um die grundlegenden Informationen des Landes/der Region (wie Name, Fläche, Bevölkerung usw.) zu speichern, und wir definieren auch ein Feld von Geben Sie MultiPolygonField ein, um Grenzinformationen zu speichern.

5. Geografische Feature-Daten erstellen

Wir müssen einige geografische Feature-Daten für die Speicherung in der Datenbank erstellen. Mit dem folgenden Befehl können wir Daten in die Datenbank importieren:

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

Dieser Befehl importiert die Daten in der Datei world_borders.shp in eine Tabelle mit dem Namen „worldborder“.

6. Ansichtsfunktionen schreiben

Wir müssen einige Ansichtsfunktionen in die Datei „views.py“ der Anwendung schreiben, um auf Benutzeranfragen reagieren zu können. Beispielsweise können wir eine Ansichtsfunktion namens „map“ schreiben, um die Grenzinformationen von Ländern auf der ganzen Welt auf der Karte anzuzeigen. Hier ist die Definition dieser Ansichtsfunktion:

# 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})

Diese Funktion ruft zunächst die Informationen aller Länder ab und wandelt sie dann in GeoJSON-formatierte Daten um. Abschließend werden die Daten zur Anzeige an eine Vorlage namens „map.html“ übergeben.

7. Vorlagen schreiben

Wir müssen eine Vorlage mit dem Namen „map.html“ im Vorlagenverzeichnis der Anwendung erstellen, um Karten und Daten anzuzeigen. Hier ist die Definition dieser Vorlage:

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

Diese Vorlage verwendet eine JavaScript-Kartenbibliothek namens „Leaflet“.

8. Führen Sie die Anwendung aus

Wir können den folgenden Befehl in der Befehlszeile ausführen, um den Django-Server zu starten:

python manage.py runserver

Besuchen Sie dann die folgende Adresse, um die Web-GIS-Anwendung im Browser anzuzeigen:

http://127.0.0.1:8000/map

Zusammenfassung

In diesem Artikel wird beschrieben, wie Sie mit Django und GDAL eine einfache Web-GIS-Anwendung erstellen. Mithilfe dieser Tools und Techniken können wir auf einfache Weise effiziente Webanwendungen entwickeln, in denen geografische Daten angezeigt und analysiert werden. Darüber hinaus können wir andere Kartenbibliotheken und GIS-Datenquellen nutzen, um unsere Anwendung weiter zu erweitern und zu optimieren.

Das obige ist der detaillierte Inhalt vonErstellen Sie Web-GIS-Anwendungen basierend auf Django. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn