Rumah >pembangunan bahagian belakang >Tutorial Python >Bina aplikasi Web GIS berdasarkan Django
Dengan perkembangan pesat Sistem Kedudukan Global (GPS) dan teknologi pengimejan satelit, Sistem Maklumat Geografi (GIS) telah menjadi bidang aplikasi yang penting. GIS tidak terhad kepada pengeluaran dan analisis peta, tetapi juga digunakan secara meluas dalam pengurusan alam sekitar, pengurusan tanah, perancangan bandar dan bidang lain. Pembangunan aplikasi Web GIS membolehkan pengguna membuat pertanyaan, menganalisis dan mengurus data GIS di mana-mana tempat, pada bila-bila masa dan melalui mana-mana peranti, yang mempunyai prospek aplikasi yang hebat.
Django ialah rangka kerja pembangunan web berdasarkan bahasa Python Ia menyediakan satu siri alatan dan teknologi pembangunan yang boleh membantu kami membina aplikasi web yang cekap. Artikel ini akan memperkenalkan cara menggunakan Django untuk membina aplikasi Web GIS yang mudah.
1. Persediaan persekitaran
Sebelum bermula, kita perlu memastikan bahawa persekitaran yang diperlukan berikut telah dipasang:
Antaranya, GDAL ialah perpustakaan pemprosesan data geografi yang biasa digunakan, kami akan menggunakannya untuk memproses data GIS.
2. Cipta projek Django baharu
Anda boleh mencipta projek Django baharu melalui arahan berikut:
django-admin startproject webgis
Arahan ini mencipta projek Django bernama webgis. Kita boleh memasukkan direktori akar projek dengan arahan berikut:
cd webgis
Seterusnya, kita boleh mencipta aplikasi bernama gisapp dengan arahan berikut:
python manage.py startapp gisapp
Arahan ini mencipta aplikasi bernama gisapp Django aplikasi dan cipta subdirektori dengan nama yang sama dalam direktori projek.
3. Konfigurasikan projek Django
Kami perlu mengkonfigurasi GDAL dan aplikasi dalam fail tetapan.py projek:
# 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 >
Kami perlu mencipta beberapa model ciri geografi dalam fail models.py aplikasi untuk menyimpan data ciri geografi dalam pangkalan data. Sebagai contoh, kita boleh mencipta model yang dipanggil "WorldBorder" untuk menyimpan maklumat sempadan negara di dunia. Berikut ialah takrifan model:# 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.nameDalam model ini, kami mentakrifkan beberapa medan untuk menyimpan maklumat asas negara/rantau (seperti nama, kawasan, penduduk, dll.), dan kami juga mentakrifkan medan jenis MultiPolygonField untuk menyimpan maklumat sempadan. 5. Cipta data ciri geografi Kami perlu mencipta beberapa data ciri geografi untuk penyimpanan dalam pangkalan data. Kita boleh mengimport data ke dalam pangkalan data melalui arahan berikut:
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.shpPerintah ini akan mengimport data dalam fail world_borders.shp ke dalam jadual bernama "worldborder". 6. Tulis fungsi paparan Kami perlu menulis beberapa fungsi paparan dalam fail views.py aplikasi untuk membalas permintaan pengguna. Sebagai contoh, kita boleh menulis fungsi paparan bernama "peta" untuk memaparkan maklumat sempadan negara di seluruh dunia pada peta. Berikut ialah takrifan fungsi paparan:
# 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})Fungsi ini mula-mula mendapat maklumat semua negara/rantau dan kemudian menukarnya kepada data format GeoJSON. Akhir sekali, data dihantar ke templat bernama "map.html" untuk paparan. 7. Menulis templat Kita perlu mencipta templat bernama "map.html" dalam direktori templat aplikasi untuk memaparkan peta dan data. Berikut ialah definisi templat:
<!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>Templat ini menggunakan perpustakaan peta JavaScript yang dipanggil "Risalah". 8. Jalankan aplikasi Kita boleh melaksanakan arahan berikut pada baris arahan untuk memulakan pelayan Django:
python manage.py runserverKemudian, lawati alamat berikut untuk membukanya pelayar Lihat Aplikasi GIS Web:
http://127.0.0.1:8000/mapRingkasan Artikel ini menerangkan cara membina aplikasi GIS Web mudah menggunakan Django dan GDAL. Dengan menggunakan alat dan teknik ini, kami boleh membangunkan aplikasi web yang cekap dengan mudah untuk memaparkan dan menganalisis data geografi. Selain itu, kami boleh menggunakan perpustakaan peta lain dan sumber data GIS untuk melanjutkan dan mengoptimumkan aplikasi kami.
Atas ialah kandungan terperinci Bina aplikasi Web GIS berdasarkan Django. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!