ホームページ  >  記事  >  バックエンド開発  >  Django に基づいて Web GIS アプリケーションを構築する

Django に基づいて Web GIS アプリケーションを構築する

PHPz
PHPzオリジナル
2023-06-17 13:12:031851ブラウズ

全地球測位システム (GPS) と衛星画像技術の急速な発展により、地理情報システム (GIS) は重要な応用分野になりました。 GISは地図の作成や解析にとどまらず、環境管理、土地管理、都市計画などの分野でも広く活用されています。 Web GIS アプリケーションの開発により、ユーザーはいつでも、どこでも、あらゆるデバイスを通じて GIS データのクエリ、分析、管理ができるため、大きな応用の可能性が期待できます。

Django は、Python 言語に基づく Web 開発フレームワークで、効率的な Web アプリケーションを迅速に構築するのに役立つ一連の開発ツールとテクノロジを提供します。この記事では、Django を使用して簡単な Web GIS アプリケーションを構築する方法を紹介します。

1. 環境の準備

開始する前に、次の必要な環境がインストールされていることを確認する必要があります:

  1. Python 3.xx
  2. Django
  3. GDAL

このうち、GDAL はよく使われる地理データ処理ライブラリです。これを使用して GIS データを処理します。

2. 新しい Django プロジェクトを作成する

次のコマンドを使用して、新しい Django プロジェクトを作成できます:

django-admin startproject webgis

このコマンドは、webgis という名前の Django プロジェクトを作成します。次のコマンドを使用してプロジェクトのルート ディレクトリに入ることができます:

cd webgis

次に、次のコマンドを使用して gisapp という名前のアプリケーションを作成できます:

python manage.py startapp gisapp

このコマンドは gisapp Django というアプリケーションを作成しますアプリケーションを作成し、プロジェクト ディレクトリに同じ名前のサブディレクトリを作成します。

3. Django プロジェクトを構成する

プロジェクトの settings.py ファイルで GDAL とアプリケーションを構成する必要があります:

# 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. 地理フィーチャ モデルを作成する

地理フィーチャ データをデータベースに保存するには、アプリケーションの models.py ファイルにいくつかの地理フィーチャ モデルを作成する必要があります。たとえば、世界の国の国境情報を保存する「WorldBorder」というモデルを作成できます。モデルの定義は次のとおりです。

# 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

このモデルでは、国/地域の基本情報 (名前、面積、人口など) を格納するためのいくつかのフィールドを定義し、また、境界情報を格納する MultiPolygonField タイプのフィールド。

5. 地理的特徴データの作成

データベースに保存するためにいくつかの地理的特徴データを作成する必要があります。次のコマンドを使用して、データをデータベースにインポートできます。

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

このコマンドは、world_borders.shp ファイル内のデータを「worldborder」という名前のテーブルにインポートします。

6. ビュー関数を記述する

ユーザーのリクエストに応答するために、アプリケーションの views.py ファイルにいくつかのビュー関数を記述する必要があります。たとえば、「map」という名前のビュー関数を作成して、世界中の国の国境情報を地図上に表示できます。 view 関数の定義は次のとおりです。

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

この関数は、まずすべての国/地域の情報を取得し、GeoJSON 形式のデータに変換します。最後に、データは表示のために「map.html」という名前のテンプレートに渡されます。

7. テンプレートの作成

地図とデータを表示するには、アプリケーションのテンプレート ディレクトリに「map.html」という名前のテンプレートを作成する必要があります。テンプレートの定義は次のとおりです。

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

このテンプレートは、「Leaflet」という JavaScript マップ ライブラリを使用します。

8. アプリケーションを実行します

コマンド ラインで次のコマンドを実行して Django サーバーを起動できます:

python manage.py runserver

次に、次のアドレスにアクセスして Django サーバーを開きます。ブラウザ内のサーバー Web GIS アプリケーションの表示:

http://127.0.0.1:8000/map

概要

この記事では、Django と GDAL を使用して単純な Web GIS アプリケーションを構築する方法について説明します。これらのツールと技術を使用すると、地理データを表示および分析する効率的な Web アプリケーションを簡単に開発できます。さらに、他のマップ ライブラリや GIS データ ソースを使用して、アプリケーションをさらに拡張および最適化できます。

以上がDjango に基づいて Web GIS アプリケーションを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。