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.name
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
# 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})
<!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>
python manage.py runserver
http://127.0.0.1:8000/map
Atas ialah kandungan terperinci Bina aplikasi Web GIS berdasarkan Django. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!