全地球測位システム (GPS) と衛星画像技術の急速な発展により、地理情報システム (GIS) は重要な応用分野になりました。 GISは地図の作成や解析にとどまらず、環境管理、土地管理、都市計画などの分野でも広く活用されています。 Web GIS アプリケーションの開発により、ユーザーはいつでも、どこでも、あらゆるデバイスを通じて GIS データのクエリ、分析、管理ができるため、大きな応用の可能性が期待できます。
Django は、Python 言語に基づく Web 開発フレームワークで、効率的な Web アプリケーションを迅速に構築するのに役立つ一連の開発ツールとテクノロジを提供します。この記事では、Django を使用して簡単な Web GIS アプリケーションを構築する方法を紹介します。
1. 環境の準備
開始する前に、次の必要な環境がインストールされていることを確認する必要があります:
このうち、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 サイトの他の関連記事を参照してください。