郭鹍 蔣曉龍 趙甲文
摘要:Django 是Python 的一個(gè)優(yōu)秀開(kāi)源 Web 開(kāi)發(fā)框架,該文基于Django框架建立電子海圖服務(wù)器,通過(guò)該服務(wù)器提供船用電子海圖終端遠(yuǎn)程更新電子海圖數(shù)據(jù)手段,數(shù)據(jù)下載可在近岸條件使用移動(dòng)通信網(wǎng)絡(luò)更新,有力地保障了船舶航行安全。
關(guān)鍵詞: Django;電子海圖;遠(yuǎn)程更新
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1009-3044(2018)19-0061-03
Abstract: Django is an excellent open source Web development framework for Python. This paper builds an electronic chart server based on the Django framework. Through the server, it provides a remote update of the electronic chart data by Ecdis. The data downloads can be updated in the near shore condition using the mobile communication network, which effectively guarantees the safety of the ship navigation.
Key words: Django; electronic chart; remote update
1 引言
本文設(shè)計(jì)實(shí)現(xiàn)的電子海圖服務(wù)器是一個(gè)基于互聯(lián)網(wǎng)的電子海圖數(shù)據(jù)更新服務(wù)平臺(tái),船舶在近岸航行時(shí),電子海圖終端可使用移動(dòng)3G/4G網(wǎng)絡(luò)訪問(wèn)該電子海圖服務(wù)器。
電子海圖服務(wù)器采用Django開(kāi)源開(kāi)發(fā)框架進(jìn)行Web服務(wù)設(shè)計(jì),需要進(jìn)行網(wǎng)頁(yè)功能設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)、海圖元數(shù)據(jù)表格配置等等,通過(guò)模型、模板、應(yīng)用數(shù)據(jù)分離的形式對(duì)外提供電子海圖數(shù)據(jù)下載。電子海圖終端可根據(jù)海圖名、海圖號(hào)信息對(duì)電子海圖數(shù)據(jù)進(jìn)行查詢,根據(jù)海圖元數(shù)據(jù)信息對(duì)海圖進(jìn)行選擇下載。該電子海圖服務(wù)器的工作流程如圖1所示。
2 電子海圖服務(wù)器環(huán)境配置
本文中電子海圖服務(wù)器采用Fedora14發(fā)行版,內(nèi)核版本2.6.35.6-45.fc14.i686。以下是電子海圖服務(wù)器配置過(guò)程,共包括三項(xiàng)軟件的配置,分別為Python-2.7.5開(kāi)發(fā)環(huán)境、Django-1.8.17Web服務(wù)架構(gòu)、Postgresql-8.4數(shù)據(jù)庫(kù)服務(wù)軟件。這里設(shè)定安裝目錄在/usr/local/,按順序進(jìn)行軟件安裝:
1) 安裝Python-2.7.5開(kāi)發(fā)環(huán)境
//解壓安裝包
#tar xvf Python-2.7.5.tar.bz2
//創(chuàng)建安裝目錄
#mkdir /usr/local/Python27
//安裝Python
#/configure –prefix=/usr/local/Python27
#make
#make install
2) 安裝Django-1.8.17Web服務(wù)架構(gòu)
//解壓安裝包
#tar xvf Django-1.8.7.tar
//安裝Django
#cd ./Django-1.8.7
#python setup.py install
3) 安裝Postgresql數(shù)據(jù)庫(kù)服務(wù)軟件
//解壓安裝包
#tar xvf
postgresql-8.4.8.tar
//安裝Postgresql
#cd postgresql-8.4.8
#make
#make install
服務(wù)器系統(tǒng)配置流程如圖2所示。
3 海圖元數(shù)據(jù)庫(kù)表格設(shè)計(jì)
服務(wù)器端海圖元數(shù)據(jù)庫(kù)表格由Postgresql數(shù)據(jù)庫(kù)實(shí)現(xiàn),根據(jù)需要?jiǎng)?chuàng)建一個(gè)名為chartdb海圖數(shù)據(jù)庫(kù),生成一個(gè)名為chart_sea_cell的數(shù)據(jù)表,存放海圖元數(shù)據(jù)。具體實(shí)現(xiàn)步驟如下:
1) 使用postgres數(shù)據(jù)庫(kù)賬戶,初始化數(shù)據(jù)庫(kù)服務(wù)
//切換到postgres賬戶
#su postgres
//初始化數(shù)據(jù)庫(kù)服務(wù),生成數(shù)據(jù)庫(kù)data文件結(jié)構(gòu)
#/usr/local/pgsql/bin/initdb-D /home/postgres/data
//啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)
#/usr/localpgsql/bin/pg_ctl-D /home/postgres/data start
2) 創(chuàng)建海圖數(shù)據(jù)庫(kù)及海圖元數(shù)據(jù)表
創(chuàng)建chartdb數(shù)據(jù)庫(kù)的SQL語(yǔ)句:
CREATE DATABASE chartdb
WITH OWNER = postgres
ENCODING = ‘SQL_ASCII
TABLESPACE = ‘pg_default
LC_COLLATE = ‘en_US.UTF-8
LC_CTYPE = ‘en_US.UTF-8
CNNECTION LIMIT = -1;
創(chuàng)建seamap數(shù)據(jù)表,表中添加字段“id”為數(shù)據(jù)表主鍵,其他字段為海圖元數(shù)據(jù),分別為“number”圖號(hào)、“name”圖名、“scale”比例尺、“l(fā)at_max”最大緯度、lat_min”最小緯度、lon_max”最大經(jīng)度、lon_min”最小經(jīng)度、“path”海圖文件存放位置。SQL語(yǔ)句如下:
CREATE TABLE seamap
(
id integer NOT NULL DEFAULT nextval(‘seamap_id_seq::regclass),
“number” character vaying(16) NOT NULL,
name character varying(32) NOT NULL,
scale double precision NOT NULL,
lat_max double precision NOT NULL,
lat_min double precision NOT NULL,
lon_max double precision NOT NULL,
lon_min double precision NOT NULL,
path character varying(512) NOT NULL,
CONSTRAINT seamap_pkey PRIMARY KEY(id)
)
4 啟動(dòng)Web頁(yè)面
配置實(shí)現(xiàn)海圖元數(shù)據(jù)遠(yuǎn)程訪問(wèn)WEB服務(wù)使用安裝好的Django框架工具,初始化一個(gè)名為mapWebsite的工程,并在工程中添加一個(gè)名為app-map的應(yīng)用,再將海圖元數(shù)據(jù)庫(kù)chartdb配置方法添加工程中,定義相關(guān)視圖函數(shù)及URL,從而完成WEB服務(wù)配置。具體操作流程如下:
1) 創(chuàng)建一個(gè)mapWebsite工程
#django-admin.py startproject mapWebsite
創(chuàng)建成功后會(huì)生成如下目錄,manage.py、mapWebsite、_init_.py、settings.py、urls.py、wsgi.py。
2) 新建一個(gè)APP命名為app-map
#python manage.py startapp app-map
創(chuàng)建成功后會(huì)在app-map下生成如下目錄,_init_.py、admin.py、models.py、tests.py、views.py。
3) 設(shè)定啟動(dòng)服務(wù)器
修改apWebsite/settings.py,把App的名字app-map添加到settings.py文件中,添加內(nèi)容如下
INSTALLED_APPS = (
‘django.contrib.admin,
‘django.contrib.auth,
‘django.contrib.contenttypes,
‘django.contrib.sessions,
‘django.contrib.messages,
‘django.contrib.staticfiles,
‘a(chǎn)pp-map,
)
4) 配置數(shù)據(jù)庫(kù)
修改mapWebsite/settings.py,把海圖元數(shù)據(jù)庫(kù)”chartdb”配置信息添加到settings.py文件中,添加Postgresql數(shù)據(jù)庫(kù)配置文件,添加內(nèi)容如下
DATABASES = {
‘Default:{ ‘ENGINE:django.db.backends.postgresql_psyconpg2,
‘NAME:chartdb,
‘USER:postgres,
‘PASSWORD:123456,
‘HOST:168.3.0.44,
‘POST:5432,
}
}
修改mapWebsite/app-map/views.py文件,定義視圖函數(shù),根據(jù)客戶端HTTP請(qǐng)求的比例尺和經(jīng)緯度范圍,將海圖元數(shù)據(jù)從數(shù)據(jù)庫(kù)按條件讀取,然后將經(jīng)緯度格式進(jìn)行轉(zhuǎn)換后返回Http Response
#coding:utf-8
from django.http import HttpResponse
from app-map.models import Seamap
import myPrj.settings
def index(request):
maps = Seamap.object.all()
mapname=” ”
for map in maps:
mapname=map.name
map.lon_min= round(map.lon_min*180.0/3.1459265358979,2)
map.lon_max= round(map.lon_max*180.0/3.1459265358979,2)
map.lat_min= round(map.lat_min*180.0/3.1459265358979,2)
map.lat_max= round(map.lat_max*180.0/3.1459265358979,2)
return render_to_response(‘index.html‘,{‘maps:maps,mapname:mapname})
5) 定義展示方式
在mapWebsite/app-map/templates目錄下,添加index.html網(wǎng)頁(yè),定義海圖元數(shù)據(jù)的WEB頁(yè)面展示方式,并修改mapWebsite/urls.py文件,定義視圖函數(shù)相關(guān)的URL,鏈接海圖元數(shù)據(jù)展示頁(yè)面
urlpatterns = [
url(r^admin/,include(admin.site.urls)),
url(r^$,app-map.views.index,name=home),
]
5 遠(yuǎn)程測(cè)試
經(jīng)過(guò)上述配置即完成了海圖元數(shù)據(jù)遠(yuǎn)程訪問(wèn)WEB服務(wù)的基礎(chǔ)服務(wù)配置工作,啟動(dòng)WEB服務(wù)器后,其他用戶即可以通過(guò)瀏覽器來(lái)遠(yuǎn)程訪問(wèn)海圖元數(shù)據(jù)。根據(jù)獲取海圖元數(shù)據(jù)可以把需要更新的電子海圖數(shù)據(jù)下載到船載Ecdis系統(tǒng)中。在mapWebsite工程目錄下,啟動(dòng)WEB測(cè)試服務(wù)器:
#cd /usr/local/mapWebsite
#python manage.py runserver
電子海圖客戶端用戶使用瀏覽器訪問(wèn)IP地址:168.3.0.44:8000,即可獲取到海圖元數(shù)據(jù)Html頁(yè)面,根據(jù)該頁(yè)面可以選擇電子海圖數(shù)據(jù)下載。
6 結(jié)論
綜上所述,基于Django框架建立電子海圖服務(wù)器,非常方便船舶進(jìn)行電子海圖數(shù)據(jù)更新,在近岸條件使用移動(dòng)通信網(wǎng)絡(luò)更新,其成本很低,有力地保障了船舶航行安全。
參考文獻(xiàn):
[1] 傅瑤. Python框架在WEB開(kāi)發(fā)中的運(yùn)用[J].電腦迷,2017(8).
[2] 楊志慶.基于Django的Blog系統(tǒng)的開(kāi)發(fā)與實(shí)現(xiàn)[J].機(jī)電一體化,2013(9) .
[3] 陳濤. 基于Web的質(zhì)量測(cè)評(píng)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2016(20) .
[4] 符宇航,鄭宗良,曾莉.基于Web的科研項(xiàng)目管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2016(27) .
[5] 徐偉志.基于WEB的學(xué)生考勤管理系統(tǒng)的設(shè)計(jì)[J].中國(guó)新技術(shù)新產(chǎn)品, 2017(2).