• 沒有找到結果。

一個基於地理資訊系統的車輛途程展現系統

N/A
N/A
Protected

Academic year: 2022

Share "一個基於地理資訊系統的車輛途程展現系統"

Copied!
100
0
0

加載中.... (立即查看全文)

全文

(1)

東吳大學商學院 資訊管理學系碩士論文

指 導 教 授 :鄭為民 博士

一個基於地理資訊系統的車輛途程展現系統

A GIS-based Vehicle Routing Presentation System

研 究 生:陳桂勤 撰

中 華 民 國 一百 年 十一 月

(2)

一個基於地理資訊系統的車輛途程展現系統 A GIS-based Vehicle Routing Presentation System

研究生:陳桂勤 Student:Kuei-Chin Chen 指導教授:鄭為民 Advisor:Wei-Min Jeng

東吳大學商學院 資訊管理學系

碩士論文

A Thesis

Submitted to Department of Computer Science and Information Management School of Business

Soochow University

November 2011

Taipei, Taiwan, Republic of China

中華民國一百年十一月

(3)
(4)

誌 謝

這篇論文可以順利完成,首先要感謝的是我的恩師鄭為民主任,持續激勵我 獨立去面對、解決問題,並且客觀、耐心地對研究的合理性提出講評與建議。在 老師身上我學到做研究的嚴謹態度,也體會到實事求是的敬業精神,及待人接物 的道理。此外還要感謝口試委員余銘忠老師、鄭武德老師遠道而來惠賜論文建議,

讓我得以加強論文中沒有注意到的環節。

在研究所求學過程中,要感謝英泉學長、盈君、育軒、建佑在論文及研究上 的幫忙,他們在我遇到瓶頸的時候,給予我適時的建議及幫助。設計實驗時,大 學同窗柄樺、書毅在地理資訊系統方面提供了許多研究上的寶貴經驗與參考資 料,多次見面討論使我獲益良多。還有並肩作戰的聖淵,即使研究領域完全不同,

仍定期幫我審視論文架構與實驗方法,提出問題與批判。另外也要感謝求學過程 中的同實驗室的展鑑、子宏、宗誼、曉嵐、凌淵、珮芸平常時的互相砥礪與幫助,

感謝他們平常時的鼓勵,以及舉辦聚餐活動,最後感謝其他沒在此提到的同學及 朋友,讓我可以順利完成這篇論文。

此外,還要特別感謝我的祖母、伯父、叔父、嬸嬸、姑姑協助我渡過失去雙 親的難關,含辛茹苦把我撫養成人,對我視同己出的教育、關懷、包容、栽培,

讓我有心力與資源完成幼年的夢想-就讀東吳大學,取得學位。桂勤如今完成學 業,進入職場,必定會在社會上做個有用的人,也分擔部分家計。因為你們的支 持,讓我發現上天關閉的一道門,旁邊的確有一扇窗,能夠展翅高飛!在此致上由 衷的感激。

(5)

摘 要

車輛途程與時窗問題已被學者歸類為 NP-Hard 問題,但其演算法效能評比仍 是當代車輛途程研究之重要議題。研究者常用 Solomon Benchmark Problems(簡 稱 Solomon 問題)作為演算法效能評比之測試標竿。Solomon 問題提供難易程度 不一的題型讓研究者測試演算法是否達到預估的車輛數、整體服務時間、整體路 徑長度等等效能指標。由於 Solomon Benchmark 問題將服務點設定為六大類之分 類方式,並非以對應真實之路網圖為基礎,車輛途程研究者難以直接模擬都市逆 物流觀察其效能。本研究參考 Solomon 問題之基本精神設計範例,利用台北市路 網圖與便利商店位置資訊,結合最短路徑為基礎之演算法、時窗與距離分析演算 法規劃車輛途程,透過開放式地理資訊系統與線上地圖提供車輛途程的效能觀察 平台。經過測試,本研究之系統,在小規模與大規模的模擬都能順利完成。本次 研究結果顯示,在效能及實務上更具應用價值。

(6)

Abstract

Vehicle Routing Problem with Time Window (VRPTW) has been recognized as NP-hard problem by researchers, but performance evaluation of its algorithms remains to be an important issue of contemporary Vehicle Routing research. Researchers often use Solomon Benchmark Problems (referred to as the Solomon Problems) as the performance benchmark for algorithms. Solomon Problems provide problems with varying degrees of difficulty for researchers to see if their algorithms reach the supposed performance indicators, such as vehicle number, total service time and total route length. Customer nodes of Solomon Benchmark Problems are classified into 6 categories and none of them are addressed with corresponding real-world road maps.

Thus, performance observation for simulating urban reverse-logistics is difficult for Vehicle Routing researchers. Refer to the concept of Solomon Problems, we design test cases from Convenience store location information and road maps of Taipei City. We combine both shortest-path-based algorithm and time-window-and-distance analysis to a hybrid scheme as well. Test cases are processed with the scheme with Open GIS and Web Map Services to provide a platform for performance observation of vehicle routes.

We test the system with small and large scale simulations and it works well. The result demonstrates its superiority in performance and applicability in practice.

(7)

目錄

誌謝...i

中文摘要...ii

英文摘要………...iii

目錄...iv

表 目 錄 . . . v i 圖目錄...vii

1. 緒論 .. . .. . . .. . . . .. . . .. .. . . .. . . .. . . . .. . . .. . . .. .. . . .. . . .. . . . .. . . .. . . .. .. . . .. 1

1.1 研究動機...1

1.2 研究目的... .2

1.3 論文架構... 2

2. 文獻探討...4

2.1 車輛途程規劃...4

2.2 地理資訊系統簡介...5

3. 研究方法 .... . .. .. .. .. .. .. .. .. . .. .. .. .. . .. .. .. . . . .. .. .. . .. .. .. .. .. . .. .. . .. .. .. . 7

(8)

3.1 問題描述 …... ... 7

3.2 實 驗 環 境 … . . . … … … … . . . … … . . . 7

3.3 實驗流程…...…...……… ... .

.

... .10

4. 實 驗 結 果 與 討 論 . . . 1 7 5. 結 論 . . . 3 6 參考文獻 ... ... ... 37

附錄一-本研究引用的線上資源...39

附錄二-VRP2GIS 系統組態...40

附錄三-VRP2GIS 程式說明...40

附錄四-PostGIS 與 QGIS 安裝與使用說明...46

(9)

表目錄

表 3-1 逆物流需求檔案欄位定義表...10

表 3-2 服務點資料表...10

表 3-3 poi_list 資料表欄位定義...15

表 3-4 行車路徑資料表...16

表 4-1 台北市中山區 30 間 7-ELEVEN 與車隊總站行車距離與時間...18

表 4-2 台北市中山區 30 間 7-ELEVEN 逆物流需求表...19

表 4-3 台北市 111 間 7-ELEVEN 逆物流需求表...27

(10)

圖目錄

圖 3-1 VRP2GIS 系統架構圖...8

圖 3-2 TWDA 與 PostGIS 互動圖...9

圖 3-3 數位路網圖...9

圖 3-4 QGIS: Field Calculator…...12

圖 3-5 數位路網圖前處理…...12

圖 3-6 芬蘭全國路網圖與隨機途程…...13

圖 3-7 服務點資料匯入…...13

圖 3-8 繪製路線底圖…...14

圖 3-9 選擇定位點…...15

圖 3-10 指定服務點定位點…...15

圖 3-11 計算最短行車路徑…...16

圖 3-12 執行車輛排程…...17

圖 4-1 台北市中山區 30 間 7-ELEVEN 路網圖…...18

(11)

圖 4-3 台北市中山區 30 間 7-ELEVEN 服務路線圖…...22

圖 4-4 7-ELEVEN 大吉門市資料…...22

圖 4-5 7-ELEVEN 大吉門市之指定定位點...23

圖 4-6 中 繼 路 段 1 . . . 2 3 圖 4-7 中 繼 路 段 2 . . . 2 4 圖 4-8 中繼 路段 3... 24

圖 4-9 7-ELEVEN 勝權門市之指定定位點...25

圖 4-10 7-ELEVEN 勝權門市資料...25

圖 4-11 台北市中山區 30 間 7-ELEVEN 排程細節...26

圖 4-12 台北市 111 間 7-ELEVEN 路網圖...27

圖 4-13 台北市交叉路口分佈圖... ...30

圖 4-14 台北市 111 間 7-ELEVEN 服務路線圖...32

圖 4-15 調 整 圖 層 顏 色 . . . 3 2 圖 4-16 台北市 111 間 7-ELEVEN 服務路線圖與 Google Maps...33

圖 4-17 台北市 111 間 7-ELEVEN 服務路線圖與 Microsoft Bing Map..33

(12)

圖 4-18 台北市 111 間 7-ELEVEN 服務路線圖與 OpenStreetMap...34

圖 4-19 台北市 111 間 7-ELEVEN 服務路線圖與 Yahoo! Maps...34

圖 4-20 台北市 111 間 7-ELEVEN 排程細節...35

(13)

1. 緒論

1.1 研究動機

逆物流是供應鏈中,從客戶端回收物件以供退貨、維修、資源再生的流通作 業。逆物流之物件相當多樣化,包括過期或故障商品、包裝容器、有害物質等等。

良好的逆物流能夠達成提升客戶滿意度與環境永續經營的目標。企業為了降低逆 物流運輸成本,通常將逆物流作業委外,由第三方物流公司負責處理。第三方物 流公司為了自身的營利,必頇在運輸成本上進行精確管控。因此有效率的逆物流 車隊排程可以縮短物件運輸的時間,同時兼顧客戶服務時間的及時性,進而提高 客戶對公司的忠誠度與企業口碑,是第三方物流公司獲利的基礎。運輸成本管控 包括運送車輛的減少、整體服務時間和路徑的縮短,亦為車輛途程(Vehicle Routing) 問題之研究方向。

車輛途程與時窗問題之研究已有數十年之歷史,已知有許多不同的演算法能 處理此問題,但研究上仍難以評斷何為最佳解,畢竟車輛途程與時窗問題已被學 者一致歸類為 NP-Hard 問題。不過,車輛途程演算法之效能評比,是近年車輛途 程 研 究 之 重 要 課 題 。 車 輛 途 程 規 劃 問 題 的 研 究 者 常 用 Solomon Benchmark Problems(以下簡稱 Solomon 問題)作為演算法效能評比之測試標竿。Solomon 問題內容包括可用的車輛數、每台車輛能負荷的載重量、服務點的平面座標,搭 配服務點開始接受服務與停止接受服務的時間點,以及各服務點的載重量與服務 時間;透過以上限制條件提供難易程度不一的題型讓研究者測試自己設計的演算 法是否能達到預期估計的車輛數、整體服務時間、整體路徑長度這些效能指標。

然而 Solomon 問題採用的座標是簡易的平面座標,並非對映真實路網圖上的 經緯度定位。故學者多半以方正的棋盤式路網作為假想背景環境,使用歐基里德 距離公式計算任二點的行車距離。這樣的觀點在實務上的適切性有限,難以直接 模擬都市逆物流作業、觀察評估車輛途程規劃的效能,因為真實世界的路網圖充 滿蜿蜒曲折的街道,勢必比棋盤式地圖複雜許多。於是,參考 Solomon 問題之基 本精神,本研究設計若干範例以模擬都市逆物流作業情形。

(14)

1.2 研究目的

本研究採用免費、具公信力的交通部台北市數位路網圖和便利商店 POI(Point of Interest)資料作為逆物流範例的背景環境,利用開放式地理資訊系統(Open GIS) 計算任二服務點間之最短行車路徑與距離,分析時窗與距離參數,以最短車輛數、

最短整體服務時間、最短整體路徑長度之訴求規劃車輛途程,示範效能觀測與分 析方式,並將成果套疊網際網路社群常用的線上地圖,如 Google Maps、Microsoft Bing Maps、Yahoo Street Maps 與 OpenStreetMap 而視覺化展現車輛路線圖,並探 討不同地圖資訊與車輛途程搭配的適用性。相關領域研究人員透過本研究提出之 系統能夠以更便利的方式分析評估車輛途程規劃演算法之效能並視覺化觀察車輛 途程在實際地理環境上的實用性與應用價值。

研究目的彙整如下:

(1)參考 Solomon 題庫設計測試案例,描述都市逆物流作業。

(2)利用開放式地理資訊系統與數位路網圖資料,計算服務點間最短行車路徑。

(3)分析逆物流問題時窗與距離參數,規劃車輛途程。

(4)將車輛途程規劃成果以車輛路線圖的方式呈現,提供豐富多元的地理空間資 訊,加以解釋說明,使其容易理解。

1.3 論文架構

其他章節分敘如下:

(1)文獻探討:介紹車輛途程規劃問題相關研究,與結合開放式地理資訊系統與車輛

(15)

(3)實驗結果:針對逆物流範例進行模擬,得到數據,進行呈現與解釋說明。

(4)結論:本研究之結論與未來研究方向。

(16)

2.文獻探討

2.1 車輛途程規劃

車輛途程規劃問題最早由 Dantzig[6]提出,意義為在路程最短、成本最小、

耗費時間最少等約束下,組織適宜的行車路線予車隊,分送貨物,滿足不同客戶 的貨運需求。車輛途程規劃問題有許多種變體,本研究著重於 VRPTW (Vehicle Routing Problem with Time Window),也就是考慮抵達服務點的時窗限制的車輛途 程規劃問題。學者 Solomon[11][12]針對 VRPTW 設計了一套具有公信力的題庫,

供管理科學研究者評測自行設計的演算法效能。Solomon 的題庫中,服務點的分 佈情形、服務需求與服務時窗的緊密程度影響求解的難易度;題型依服務點的分 佈情形共可分為六大類,群集型、長距離群集型、隨機分配型、長距離隨機分配 型、半群集型、長距離半群集型。群集型、長距離群集型的服務點分佈較為密集,

類似都市;隨機分配型、長距離隨機分配型的服務點分佈較為鬆散,類似郊區;

而半群集型、長距離半群集型服務點的分佈類似市郊混合區。林思安[1]針對可 用車輛數、車輛容量、客戶點地理位置分佈、客戶需求量、時間窗寬度、時 間窗位置與地理位置分佈之相關性等六項因素之 864 種不同組合作測試,量 化使用的車輛數、車隊行駛總距離、車隊總服務時間、遲到的客戶點數、及 早到的客戶點數這些影響。結果顯示時間窗位置與地理位置分佈之相關性對 於 VRPTW 求解結果之影響力最為顯著。林建佑[2]分析 Solomon 題庫六大題型 之時窗與距離特徵,設計動態加權參數為基礎的啟發式途程規劃演算法。黃盈錚 [3]應用車輛途程問題求解模式與 LINDO 程式語言,對遊憩景點的網狀結構 分析,結合遊憩行程偏好,尋找出最適合遊客旅行的遊憩路線。

(17)

分析、和顯示地理資訊的計算機系統。本研究所採用的地理資訊系統為 Quantum GIS (QGIS)與 PostGIS;QGIS 負責匯入地圖檔到資料庫、繪製車輛路線圖;PostGIS 是 QGIS 的後端資料庫,儲存地圖的點、線、面幾何屬性資料,執行資料查詢與 處理。PgRouting 是 PostGIS 的最短路徑函式庫。

Yoshida[13]利用 PgRouting 整理 GPS 導航器的歷史定位紀錄,過濾不符合道 路走向與冗餘的軌跡,疊合 OpenStreetMap 與 Google Maps 路網圖,作旅程軌跡 展示。Firdhousd[7]將道路的單向、雙向、封閉情形輸入 PgRouting,建構以網際 網路、行動裝置為雙重平台的行車路徑建議系統,服務不熟悉當地路況卻自行駕 車的旅客。Pulis[10]結合 PgRouting 與天氣、道路坡度、道路擁塞時段、汽車引擎 類型等因子分析,發展節省油耗、減少空氣汙染為目的之即時行車導航系統。

Choosumrong[5]將路段的長度、擁塞情形與速限量化為風險參數,套入 PgRouting 計算以交通安全為第一考量的行車路徑,並搭配 OpenStreetMap 與 Google Maps 路網圖展示路線與沿途路標。廖國利[4]運用 K-means 與叢集聚類(Clustering),以 及啟發式演算法技巧得到車輛途程的解,再利用 Google 地圖作地理資訊呈現,輔 以視覺化工具作解的最終微調,而降低物流的作業成本。Kawano[8]擴展 VRPTW 的應用到醫療照護,考慮更多的限制(constraints)以求獲得更精確實用的路徑,並 且建構一個 GIS-based Solution 來規劃醫療照護車輛的路線排程。方法為先收集數 位路網、交通路徑、車速、服務事件,輸入 ArcGIS Network Analyst,考慮醫療照 護設施、車輛數目、需求、接送時間這些限制而分析與推導路徑。實驗的作法是 將對照組(以行車記錄器錄下的真實行駛路徑)與實驗組(GIS-based Solution)作 比對的方式。實驗結果發現,對照組路徑與實驗組的最佳路徑相仿。然而實驗組 方面,地址與地圖上的服務點位置有明顯誤差,原因是地址轉譯經緯度(Geocoding) 不夠精準;Kawano 並且提到,如果增加停車點和交通資訊這些動態限制,規劃 路線排程更為困難! Kawano[9]隨後將 GIS-based Solution 應用於解決「教師參訪學 校問題」。教師參訪學校問題為 Traveling Salesman Problem with Time Window 的 變體,規劃目的是路徑稠密度和工作量的平衡,決策考量為總時間最小化、每個

(18)

人的工作差異最小化、每個路徑的點最少。以上決策需求可以透過對地理資料作 叢集聚類,搭配工作排程演算法而滿足,所以作者採用資料挖掘的叢集演算法 K-means 作資料前處理,同樣使用 ArcGIS Network Analyst 完成規劃。

總而論之,地理資訊系統輔助的車輛途程規劃能充分考量時間窗與地理 位 置分佈因素,提供友善的使用者介面與使用者互動,簡化求解的困難度,讓成果 易於說明、解釋,精確而簡潔的提供使用者豐富的決策資訊,達到貼切模擬現實 商業流程、創造應用價值的目的。

(19)

3.研究方法

3.1 問題描述

VRPTW 服務需求包括車輛數目限制、車輛負重限制、服務點編號、服務點 x 座標、服務點 y 座標、需求量、時窗開始點、時窗結束點、服務時間。舉例來說,

Solomon 題庫中的 c103 問題規定車輛數目不得超過 25 輛、車輛負重不得超過 200;編號 1 的服務點位於座標(45,68),需求量為 10,時窗介於 0 到 1127,服務 時間為 90。雖然 Solomon 題庫具有服務點稠密度特性,仍無法直接模擬真實環境 的街道。本研究決定利用都市街道圖的 GPS(Global Positioning System)定位點、便 利商店資料與 VRPTW 服務需求的定義方式,舉例展示車輛途程。都市街道圖與 商店資料日後亦可任意抽換,呈現不同商業應用的決策資訊。為了簡化問題,本 研究計算最短行車路徑不考量即時路況與道路坡度,並且以建構資訊系統、執行 模擬的方式完成實驗。

3.2 實驗環境

計算機硬體方面,使用桌上型電腦,中央處理器為 Intel Core i7 870 - 2.93Ghz 四核心處理器,實體記憶體為 4G,採用 ATI Radeon HD 5450 顯示晶片,解析度 為 1280x1024,色彩 32 位元。作業系統則選擇硬體配套的 Windows 7。本研究以 林建佑時窗與距離分析演算法(Time Window and Distance Analysis)為基礎之途程 規劃系統(以下簡稱 TWDA)、Quantum GIS(QGIS)、PostGIS、PgRouting 開放式地 理資訊系統,Access 與 PostgreSQL 資料庫,Visual Basic、Python、SQL 程式語言 開發資訊系統 VRP2GIS 進行實驗。VRP2GIS 的輸入資料為數位路網圖、逆物流 需求、服務點資料,處理之後,展示車輛路線圖與詳細路線資訊(圖 3-1)。TWDA 採用 PostGIS 提供的服務點間最短行車路徑,進行時窗與距離分析,指派每台貨 車走訪的服務點與順序,回饋給 PostGIS(圖 3-2),PostGIS 隨後展示車輛途程於

(20)

QGIS。

(21)

圖 3-2. TWDA 與 PostGIS 互動圖

數位路網圖範圍為新北市的蘆洲區及三重區,臺北市的士林區、大同區、中

山區、松山區及內湖區。(圖 3-3)

圖 3-3. 數位路網圖

資料來源: 中華民國交通部運輸研究所網站

範例的逆物流需求格式參考學者 Solomon 的 VRPTW Benchmark Problems,

檔案欄位定義如表 3-1。

(22)

表 3-1.逆物流需求檔案欄位定義表 車輛數目 車輛負重限制

服務點編號 指定定位點編號 需求量 時窗開始 點

時窗結束

點 服務時間 服務點資料內容是台北市 7-ELEVEN 便利商店的資料,包括經緯度、店名、地址 與電話(表 3-2)。

表 3-2.服務點資料表(節錄)

經度 緯度 店名 地址 電話

121.522903 25.043751

7-ELEVEN 便利商店-千成門

台北市中正區林森南路 4 號

之 3 (02)23577481

121.528585 25.038423

7-ELEVEN 便利商店-仁金門

台北市中正區仁愛路二段

39、39-1 號 (02)23583428

資料來源: WikiGPS 網站

為了充分利用數位路網圖、最短行車路徑資料,並融入以時窗距離分析為基 礎的演算法規劃車輛路線,進而圖像化展現成果以供效能分析評估,本研究制定 一個完整的實驗流程並且實作。本系統大致上可分為 GIS 與 TWDA 兩個子系統,

利用資料庫互相整合,既可維持資料的一致性,又維持系統的可擴充性。系統建 置所使用的線上資源、組態、程式安裝與使用說明請見附錄。

3.3 實驗流程

實驗流程分六個階段,依序為數位路網圖前處理、服務點資料匯入、繪製路 線底圖、指定服務點定位點、計算最短行車路徑、執行車輛排程。數位路網圖前 處理階段主要驗證地圖的連通性與計算所有街道的長度並標示交叉路口,因為連 通、具備街道長度資料的地圖才能透過 Dijkstra 演算法分析距離成本計算最短行 車路徑,而交叉路口為商店的指定定位點,商店走訪路線即為走訪指定定位點的

(23)

的交叉路口定位,儲存此配對關係;計算最短行車路徑階段,GIS 利用 Dijkstra 最短路徑演算法計算所有定位點間的最短行車路徑,預備 TWDA 使用。TWDA 考量地圖大小、服務點密集程度、服務點時窗差異度、服務點時窗寬度、服務時 間,以實體距離、時窗距離計算加權參數,演算車輛路線。然而,TWDA 原本以 歐基里得公式計算服務點間實體距離,不適用於蜿蜒曲折的街道,為了適配都市 街道,本研究將 TWDA 演算法修改為採用 GIS 最短行車路徑作為服務點間實體 距離。最後,TWDA 規劃成果所得到的車輛路線進一步由 GIS 展開,圖像化行車 路徑,整合線上地圖而呈現,使車輛路線的品質易於審視、評估。各階段之細節 詳述如下。

數位路網圖前處理階段: 數位路網圖(A)經過 QGIS: Field Calculator 模組的 length()函數計算,得到每條路段的長度(單位為公尺,精確度至小數點後 2 位) 儲 存在 length_m 欄位(圖 3-4),並另存為數位路網圖(B) (圖 3-5 步驟 1-1 至 1-2)。QGIS 匯入數位路網圖(B)到 PostGIS(圖 3-5 步驟 1-3)。本研究在 PostGIS 執行程式 makeRoutable.sql 從數位路網圖(B)衍生交叉路口資料表與路網資料表,完成「指 定服務點定位點」與「計算最短行車路徑」的前置作業(圖 3-5 步驟 1-4)。

(24)

圖 3-4.QGIS: Field Calculator

(25)

為了陳述數位路網圖前處理如何測試一個給定的路網圖之連通性,本研究在 此以芬蘭全國路網圖(總共 13696 條路段、9342 個交叉路口)作為簡易範例。隨機 取樣路徑起始點,計算最短行車路徑並繪製。如果最短路徑繪製成功,表示路網 圖是連通的(圖 3-6)

圖 3-6 芬蘭全國路網圖與隨機途程

服務點資料(台北市 7-ELEVEN 便利商店資料)是.csv 檔案格式,無法直接匯 入 PostGIS 。 本 研 究 使 用 CSV2SQL 程 式 轉 換 服 務 點 資 料 匯 入 PostGIS 為 seveneleven_taipei 資料表(圖 3-7)。

(26)

圖 3-7. 服務點資料匯入

PostGIS 匯出交叉路口資料表、路網資料表、seveneleven_taipei 資料表到 QGIS 圖層展示區,套疊繪製路線底圖(A)(圖 3-8)。

圖 3-8. 繪製路線底圖

每個服務點(7-ELEVEN 便利商店)搭配一個距離最近的交叉路口,作為指定 定位點(圖 3-9)。這種配對關係以 poi_list 資料表儲存(圖 3-10 步驟 4-1) (表 3-3)。

poi_list 資料表與第 3 階段的底圖(A)套疊,產生底圖(B),繪製成有服務點標記的 路線底圖。(圖 3-9 步驟 4-2)

(27)

圖 3-9. 選擇定位點

圖 3-10. 指定服務點定位點

表 3-3. poi_list 資料表欄位定義

poi_id pos_id poi_name

DoRoute.vb 利用 PgRouting 的 Dijkstra 最短路徑演算法計算指定定位點間的

(28)

最短行車路徑,儲存在行車路徑資料表(圖 3-11)。行車路徑資料表的每一筆記錄 都有三個欄位,vertex_id 儲存交叉路口編號,edge_id 儲存路段編號,cost 儲存路 段長度(表 3-4)。一個行車路徑資料表代表從甲服務點到乙服務點循序走訪的所有 交叉路口、路段(包括長度)。

圖 3-11.計算最短行車路徑

表 3-4.行車路徑資料表

vertex_id edge_id cost

TWDA 考慮最短行車路徑(由行車路徑資料表擷取)、服務時窗、車輛負重限 制(由逆物流需求檔案擷取),分析時窗與距離而計算途程,儲存結果為車輛路線 資料表與途程敘述檔案(圖 3-12 步驟 6-1)。QGIS 圖層套疊模組把底圖(B)與車輛路 線資料表套疊,展示完整的車輛路線圖(圖 3-12 步驟 6-2)。QGIS Plug-in: Route Details 載入途程敘述檔案,展示詳細的車輛途程資訊(車輛編號、走訪服務點的順 序與抵達時間、服務點總數、貨物總重) (圖 3-12 步驟 6-3)。

(29)

圖 3-12. 執行車輛排程

為了說明本系統在大型地圖與小型地圖的車輛路線規劃與展示功能,本研究 分別以芬蘭全國、台北市兩種不同規模的數位路網圖設計範例執行實驗。

4.實驗結果與討論

4.1 台北市中山區 30 間 7-ELEVEN 便利商店的車輛途程範例

為了測試本系統在小型地圖、棋盤狀區塊的表現,本研究於台北市中山區挑 選了約 2 平方公里,包括 902 條路段、558 個交叉路口(圖 4-2 綠色圓點)的區塊,

30 間 7-ELEVEN 便利商店與 1 個車隊總站(圖 4-2 紅星圖案)。Solomon c103 題型 是屬於短程服務區域之問題,距離車隊總站近的服務點可能會有極寬時窗也可能 有極窄時窗,距離車隊總站遠的服務點亦然,使得排程方面稍有難度。本研究從 Google Maps 取得各便利商店與車隊總站之行車距離與時間(表 4-1),參考 Solomon

(30)

c103 題型之服務點分佈樣式與時窗寬度,以合理時間比例(1 時窗單位代表 1 分 鐘,服務時間為行車時間加上 10 時窗的停留時間)與重量單位(車輛負重限制與需 求量單位皆為公斤)設計逆物流需求。給定逆物流需求(表 4-2)之後,選出商店的 指定定位點(圖 4-3 紅色圓點)、指定服務點定位點、計算最短行車路徑並執行車輛 排程。

圖 4-1.台北市中山區 30 間 7-ELEVEN 路網圖

表 4-1.台北市中山區 30 間 7-ELEVEN 與車隊總站行車距離與時間 服務端點編號 指定定位點編

號 與車隊總站距離 (公尺) 行車時間 (分鐘) 0 6466 0 (此為車隊總站) 0 (此為車隊總站)

1 7899 1663.01 9

2 6685 336.13 1

3 7564 1118.02 6

4 6483 425.59 2

(31)

服務端點編號 指定定位點編

號 與車隊總站距離 (公尺) 行車時間 (分鐘)

9 6935 456.92 2

10 7688 1227.87 7

11 7378 919.72 5

12 7392 1088.62 6

13 7699 1280.59 7

14 6672 258.48 1

15 7682 1155.06 7

16 6991 465.07 3

17 6915 453.08 2

18 6308 781.73 4

19 7953 1632.67 9

20 7838 1715.68 10

21 7965 1735.93 10

22 7573 1062.48 6

23 7957 1654.02 9

24 7582 1290.25 8

25 7705 1442.86 8

26 6922 329.31 1

27 7917 1891.3 11

28 6263 531.36 3

29 7130 863.82 5

30 7954 1510.58 8

表 4-2.台北市中山區 30 間 7-ELEVEN 逆物流需求表 車輛數目 車輛負重限制

25 200

服務端點編

號 指定定位點編號 需求量 時窗開始 點

時窗結束

點 服務時間

0 6466 0 0 1236 0

1 7899 10 264 321 19

2 6685 30 0 1136 11

3 7564 10 0 1121 16

4 6483 10 732 777 12

5 6667 10 0 1130 13

服務端點編 指定定位點編號 需求量 時窗開始 時窗結束 服務時間

(32)

號 點 點

6 7243 20 0 1130 15

7 6985 20 76 129 14

8 6936 20 12 77 14

9 6935 10 0 1131 12

10 7688 10 85 144 17

11 7378 10 0 1130 15

12 7392 20 0 1125 16

13 7699 30 0 1119 17

14 6672 10 0 1135 11

15 7682 40 645 708 17

16 6991 40 261 316 13

17 6915 20 169 224 12

18 6308 20 826 875 14

19 7953 10 166 235 19

20 7838 10 541 600 20

21 7965 20 0 1122 20

22 7573 20 0 1123 16

23 7957 10 734 777 19

24 7582 10 0 1127 18

25 7705 40 621 702 18

26 6922 10 812 883 11

27 7917 10 0 1123 21

28 6263 20 0 1128 13

29 7130 10 0 1130 15

30 7954 10 727 782 18

(33)

圖 4-2.台北市中山區 30 間 7-ELEVEN 路網圖(標示指定定位點)

VRP2GIS 系統根據服務點間的最短路徑、時窗限制、車輛負重限制規劃排 程,套疊台北市路網圖展示車輛走訪路線與排程細節。

此例排程結果,車輛走訪路線分為 4 條,1 號車路線為紅色,2 號車為深綠色,

3 號車為淺綠色,4 號車為棕色(圖 4-4)。進一步點選棕色路線的路段,本研究得 知 4 號車由 7-ELEVEN 大吉門市(6466 號定位點,吉林路 144 巷與松江路 170 巷 交叉路口)出發,經過吉林路 144 巷並右轉,直走中原街到達服務點 18,也就是 7-ELEVEN 勝權門市(6308 號定位點,中原街與民權東路二段交叉路口),最後沿 原路折返(圖 4-5 至 4-11);其他路線的行車資訊也能以同樣方式檢視。

排程細節透過 Route Details plug-in 展示;以 3 號車為例,由總站出發,於時 間點 640 抵達服務點 25 (7-ELEVEN 錦龍門市),再於時間點 664 抵達服務點 15 (7-ELEVEN 春龍門市),以此類推,拜訪 7-ELEVEN 吉林門市,7-ELEVEN 錢櫃 門市之後,返回總站,總載重 100 公斤。透過系統,本研究觀察到一個現象,由 於服務點 18 位於地圖之左上角,與其他服務點距離相對遙遠,時窗開始點又太 晚(時間點 826)、時窗太窄(49 分鐘),必頇佔用一部專車前往拾取其區區 20 公斤 的物件,產生異常昂貴的成本。(圖 4-12)

(34)

圖 4-3.台北市中山區 30 間 7-ELEVEN 服務路線圖

圖 4-4. 7-ELEVEN 大吉門市資料

(35)

圖 4-5.7-ELEVEN 大吉門市之指定定位點

圖 4-6.中繼路段 1.

(36)

圖 4-7.中繼路段 2.

(37)

圖 4-9.7-ELEVEN 勝權門市之指定定位點

圖 4-10.7-ELEVEN 勝權門市資料

(38)

圖 4-11.台北市中山區 30 間 7-ELEVEN 排程細節

4.2 台北市士林區、大同區、中山區、松山區及內湖區共 111 間 7-ELEVEN 便 利商店的車輛途程範例

為了測試本系統在小型地圖、全域的表現,本研究再以同樣的實驗流程,選 取台北市士林區、大同區、中山區、松山區及內湖區共 111 間 7-ELEVEN 便利商 店作為服務點,東吳大學雙溪校區作為物流車隊總站,進行更大規模的逆物流車 輛排程(如圖 4-13 所示,共 112 個指定定位點)。假設逆物流需求如表 4-3 所示。

(39)

圖 4-12. 台北市 111 間 7-ELEVEN 路網圖 表 4-3. 台北市 111 間 7-ELEVEN 逆物流需求表 車輛數目 車輛負重限制

25 200

服務端點編號 指定定位點編號 需求量 時窗開始點 時窗結束點 服務時間

0 8261 0 0 1236 0

1 4732 10 0 1127 90

2 4430 30 0 1125 90

3 3859 10 0 1129 90

4 4839 10 727 782 90

5 4014 10 0 1130 90

6 4059 20 621 702 90

7 4094 20 0 1130 90

8 3994 20 255 324 90

9 4555 10 534 605 90

10 4734 10 357 410 90

11 4714 10 448 505 90

12 4214 20 0 1107 90

13 4452 30 30 92 90

14 4278 10 0 1106 90

15 4072 40 384 429 90

16 4272 40 0 1105 90

17 4025 20 99 148 90

18 4047 20 0 1110 90

19 4033 10 0 1106 90

20 3905 10 0 1136 90

(40)

服務端點編號 指定定位點編號 需求量 時窗開始點 時窗結束點 服務時間

21 6466 20 0 1135 90

22 7899 20 812 883 90

23 6685 10 732 777 90

24 7564 10 0 1131 90

25 6935 40 169 224 90

26 6667 10 0 1130 90

27 7243 10 261 316 90

28 6985 20 0 1128 90

29 6936 10 0 1126 90

30 6935 10 449 504 90

31 7688 10 0 1127 90

32 7378 30 0 1125 90

33 7392 10 0 1129 90

34 7699 10 727 782 90

35 6672 10 0 1130 90

36 7682 20 621 702 90

37 6991 20 0 1130 90

38 6915 20 255 324 90

39 6308 10 534 605 90

40 7953 10 357 410 90

41 7838 10 448 505 90

42 7965 20 0 1107 90

43 7573 30 30 92 90

44 7957 10 0 1106 90

45 7582 40 384 429 90

46 7705 40 0 1105 90

47 6922 20 99 148 90

48 7917 20 0 1110 90

49 6263 10 0 1106 90

50 7130 10 0 1136 90

51 8367 20 0 1135 90

52 9113 20 812 883 90

(41)

服務端點編號 指定定位點編號 需求量 時窗開始點 時窗結束點 服務時間

57 8034 10 261 316 90

58 8747 20 0 1128 90

59 8642 10 0 1126 90

60 8728 10 449 504 90

61 8670 10 0 1127 90

62 9372 30 0 1125 90

63 9370 10 0 1129 90

64 8806 10 727 782 90

65 9240 10 0 1130 90

66 8888 20 621 702 90

67 9018 20 0 1130 90

68 9735 20 255 324 90

69 8730 10 534 605 90

70 8907 10 357 410 90

71 7954 10 448 505 90

72 5442 20 0 1107 90

73 6071 30 30 92 90

74 5842 10 0 1106 90

75 4650 40 384 429 90

76 6249 40 0 1105 90

77 5632 20 99 148 90

78 5816 20 0 1110 90

79 7879 10 0 1106 90

80 5508 10 0 1136 90

81 8146 20 0 1135 90

82 5381 20 812 883 90

83 6847 10 732 777 90

84 3704 10 0 1131 90

85 6627 40 169 224 90

86 5923 10 0 1130 90

87 6457 10 261 316 90

88 6747 20 0 1128 90

89 6310 10 0 1126 90

90 6974 10 449 504 90

91 6718 10 0 1127 90

92 9866 30 0 1125 90

(42)

服務端點編號 指定定位點編號 需求量 時窗開始點 時窗結束點 服務時間

93 10026 10 0 1129 90

94 10317 10 727 782 90

95 10423 10 0 1130 90

96 10603 20 621 702 90

97 10355 20 0 1130 90

98 10910 20 255 324 90

99 10040 10 534 605 90

100 10154 10 357 410 90

101 9439 10 448 505 90

102 9514 10 0 304 90

103 11235 30 0 255 90

104 9959 20 0 620 90

105 11243 10 0 645 90

106 10503 20 0 777 90

107 10170 20 0 267 90

108 9250 10 0 260 90

109 10789 30 0 518 90

110 9683 10 0 1111 90

111 10460 10 0 401 90

同樣地,VRP2GIS 系統利用地圖內 11409 個交叉路口(圖 4-14 藍點)與 17119 條路段產生服務點間的最短路徑,連同時窗限制、車輛負重限制,規劃排程,展

示最終結果。

(43)

圖 4-13. 台北市交叉路口分佈圖

12 條不同顏色的線代表編號 1 到 12 車輛,由車隊總站-東吳大學雙溪校區(圖 4-15 藍點)出發,走訪各 7-ELEVEN 門市,最後返回總站的路線;每個車輛所屬 的顏色標示在圖層工作區(圖 4-15 左方);如果車輛路線和標記點顏色不夠醒目,

可依照個人喜好調整顏色(圖 4-16)。為了精確表達車輛路線在都市街道上的相對 位置、忠實呈現地形與地貌,VRP2GIS 利用 Web Service 載入 Google Maps、

Microsoft Bing Maps、OpenStreetMap 或 Yahoo! Maps 作為底圖(圖 4-17 至 4-20)。

Google Maps 提供的本地資訊最為豐富,具有最詳盡的省道路標、捷運站與火車 站標記、政府機關、私人行號、學校、醫院等等地標,並貼心地標示所有巷弄的 遵行方向(單向或雙向),所以適用於桌上型電腦。Microsoft Bing Maps 目前僅提 供英文介面、簡略的大眾運輸設施標示(火車站、捷運站、機場),因此較適合外 國旅客使用。OpenStreetMap 提供的地標圖示較不醒目、數量較少,遵行方向也 只有標示在主要幹道上,較適用於螢幕較小、顯示功能較差的行動裝置。Yahoo!

Maps 提供的本地資訊最為簡略,地標最為稀少,如果想避免地標造成畫面雜亂的 情形,不妨選用 Yahoo! Maps。

(44)

圖 4-14. 台北市 111 間 7-ELEVEN 服務路線圖

(45)

圖 4-16. 台北市 111 間 7-ELEVEN 服務路線圖與 Google Maps

圖 4-17.台北市 111 間 7-ELEVEN 服務路線圖與 Microsoft Bing Maps

(46)

圖 4-18.台北市 111 間 7-ELEVEN 服務路線圖與 OpenStreetMap

(47)

排程細節透過 Route Details plug-in 展示如圖 4-21。

圖 4-20.台北市 111 間 7-ELEVEN 排程細節

(48)

5.結論

逆物流是供應鏈中不可或缺的環節。第三方物流公司在逆物流業務方面追求 營利之最大化,必頇在運輸成本上進行精確管控。運輸成本管控包括運送車輛的 減少、整體服務時間和路徑的縮短,亦為車輛途程(Vehicle Routing)問題之研究方 向。車輛途程規劃問題的研究者常用 Solomon Benchmark Problems(以下簡稱 Solomon 問題)作為演算法效能評比之測試標竿。

為了模擬都市逆物流作業情形,本研究參考 Solomon 問題之基本精神設計若 干範例,利用真實路網圖與商店位置資訊,結合最短路徑演算法、時窗與距離分 析演算法,以最短車輛數、最短整體服務時間、最短整體路徑長度之訴求規劃車 輛途程,舉例描述都市逆物流並透過開放式地理資訊系統提供車輛途程的效能觀 察平台,協助車輛途程研究者觀察每輛車的路線、負重、走訪服務點的順序與時 間點等服務品質與逆物流成本影響因素,並將成果套疊網際網路社群常用的線上 地圖並探討不同地圖資訊與車輛途程搭配的適用性。經過 Solomon 題庫測試、調 校過的車輛途程演算法,如 TWDA,透過本研究能夠視覺化觀察在都市路網上的 效能。經過測試,本研究之系統,在小規模(902 條路段、558 個交叉路口、30 個服務點)與大規模(17119 條路段、11409 個交叉路口、111 個服務點)的模擬 都能順利完成。

本研究與廖國利相比,相同之處為採用開放式地理資訊系統與免費地圖資 料,節省建置成本;不同之處為兩點距離方面,廖國利採用歐基里德距離,而本 研究根據路網圖取得最短行車距離,提升了路徑精確度,並且本研究藉由整合交 通部路網圖與線上地圖服務呈現更詳盡的地理資訊。

但目前本系統藉由交叉路口定位商店而計算最短行車路徑,由於並非所有商

(49)

參考文獻

[1] 林思安。<車輛排程問題影響因子敏感性探討>,國立成功大學土木工程研究所 碩士論文,2007。

[2] 林建佑。<透過時窗以及距離分析車輛途程與時窗問題>,東吳大學資訊管理研 究所碩士論文,2011。

[3] 黃盈錚。<遊憩路線規劃模式之研究>,朝陽科技大學建築及都市設計研究所碩 士論文,2005。

[4] 廖國利。<第三方物流配送排車途程求解最佳化及結合地理資訊技術之研究

>,龍華科技大學商學與管理研究所碩士學位論文,2009。

[5] Choosumrong, et al., “Implementation of dynamic cost based routing for navigation under real road conditions using FOSS4G and OpenStreetMap”, International Symposium on Geoinformatics for Spatial Infrastructure Development in Earth and Allied Sciences 2010, 2010.

[6] Dantzig, et al., “The Truck Dispatching Problem”, Management Science, 6, 1, pp.80-91, 1959.

[7] Firdhousd, et al., “Route Advising in a Dynamic Environment – A High-Tech Appraoch”, Innovations in Computing Sciences and Software Engineering 2010, pp.

249-254, 2010.

[8] Kawano, et al., “GIS-based Solution of Vehicle Scheduling and Routing Problems in Day-care Center”, International Symposium on Operations Research and Its Applications, pp.336-343, 2008.

[9] Kawano, et al., “Multi-Agents Scheduling and Routing Problem with Time Windows and Visiting Activities”, International Symposium on Operations Research and Its Applications, pp.442-447, 2009.

[10] Pulis, et al., “Exploring the Shortest Route Options: Applying Environmental Indicators to Calculating Shortest Route”, Workshop in Information and

Communication Technology 08, 2008.

[11] Solomon, et al., "Algorithm for the Vehicle Routing and Scheduling Problems with Time Windows Constraints", Operations Research, 35, 2, pp.254-265, 1987.

[12] Solomon, et al., “Time Window Constrained Routing and Scheduling Problem”, Transportation Science, 22, 1, pp.1-13, 1988.

(50)

[13] Yoshida, et al., “Development of track log and point of interest management system using Free and Open Source Software”, Applied Geomatics, 2, 3, pp.123-135, 2010.

(51)

附錄一-本研究引用的線上資源 1.pgRouting 使用教學

http://underdark.wordpress.com/2011/02/07/a-beginners-guide-to-pgrouting/

2.建立 PostGIS 資料表空間索引

http://postgis.refractions.net/documentation/manual-1.3/ch03.html#id2570537

3. QGIS: Shapefile 地圖檔案匯入 PostGIS

http://gis-tech.blogspot.com/2008/12/qgis-shapepostgis.html

4.RT SQL Layer 使用教學

http://underdark.wordpress.com/2010/10/16/visualizing-postgis-queries-in-qgis-using-r t-sql-layer-plugin/

5.WikiGPS:台北市便利商店 POI 資料

http://www.wikigps.com/

6.中華民國交通部運輸研究所:台北市路網圖

http://www.iot.gov.tw/public/Attachment/911121458671.rar

7.QGIS plug-in: OpenLayers 教學

http://gis.rchss.sinica.edu.tw/qgis/?p=1198

8.QGIS: Field Calculator 計算路段長度教學

http://qgis.spatialthoughts.com/2010/10/calculating-line-lengths-and-statistics.html

9.Google Maps

http://maps.google.com.tw/maps?hl=zh-TW&tab=wl

10.Microsoft Bing Maps

http://www.bing.com/maps/

11.OpenStreetMap

http://www.openstreetmap.org/

12.Yahoo! Maps

http://maps.yahoo.com/

13.Solomon’s VRPTW Benchmark Problems

http://w.cba.neu.edu/~msolomon/problems.htm

(52)

附錄二-VRP2GIS 系統組態

VRP2GIS 包括兩個子系統,GIS 與 TWDA。GIS 由 PostgreSQL,PostGIS,

pgAdmin,Npgsql,pgRouting,QGIS,PostGIS Manager,RT SQL Layer 模組構成,

安裝時必頇留意版本相容性,故特此說明。

GIS 後端組態- PostgreSQL 8.4.8

PostGIS 1.5.2 pgAdmin 1.10.5 Npgsql 2.0.11-1 pgRouting 1.03 pg8.4.2

GIS 前端組態- QGIS 1.7.0 PostGIS Manager 0.5.15 RT Sql Layer plugin 1.0.27 PostgreSQL 函式庫路徑- C:\Program Files\PostgreSQL\8.4\lib

TWDA 組態- 1.Visual Basic 2005 2.Access 2007 3.Python 2.5

附錄三-VRP2GIS 程式說明 DoRoute.vb 程式說明

1. DoRoute.vb 以 Visual Basic 2005 撰寫,具有 4 個副程式。

GetNodeList() 從 PostGIS 取 得 服 務 點 ID , 儲 存 在 nodeList 資 料 結 構 ; MakeRouteSql()讀取 nodeList,產生 SQL 敘述,在 PostGIS 新增最短行車路徑 資料表。ExecSql()負責 SQL 的執行,並分為有回傳值與無回傳值兩種版本。

(53)

Public Sub GetNodeList() 'Get node list from Database Dim qstr = "SELECT pos_id FROM poi_list;"

nodeList = New ArrayList ExecSql(qstr, nodeList) End Sub

Public Sub MakeRouteSql() 'Make SQL Statement Dim qstr1, qstr2, qstr3, qstr4 As String

Dim a, b As Integer

qstr1 = "CREATE TABLE rtx_y AS select * from shortest_path('SELECT gid AS id,start_id::int4 AS source,end_id::int4 AS target,length_m::float8 AS cost FROM taipeio_network_view',x,y,false,false);"

qstr2 = ""

qstr3 = "DROP TABLE IF EXISTS rtx_y;"

qstr4 = ""

'create new route tables

For a = 0 To nodeList.Count - 1 For b = 0 To nodeList.Count - 1

qstr2 = Replace(qstr1, "x", nodeList.Item(a)) qstr2 = Replace(qstr2, "y", nodeList.Item(b)) qstr4 = Replace(qstr3, "x", nodeList.Item(a)) qstr4 = Replace(qstr4, "y", nodeList.Item(b)) ExecSql(qstr4)

ExecSql(qstr2) Next

Next End Sub

Private Sub ExecSql(ByVal queryString As String, ByRef nodeList As ArrayList) 'Connect Database and execute SQL query(return mode)

Dim conn As New

NpgsqlConnection("SERVER=localhost;DATABASE=template_postgis;USER ID=postgres;PASSWORD=123")

Dim command As New NpgsqlCommand(queryString, conn) Dim dr As Npgsql.NpgsqlDataReader

(54)

conn.Open()

dr = command.ExecuteReader() While dr.Read()

nodeList.Add(CStr(dr("pos_id"))) End While

'free resource dr.Close() conn.Close() conn.Dispose() End Sub

Private Sub ExecSql(ByVal queryString As String) 'Connect Database and execute SQL query(no-return mode)

Dim conn As New

NpgsqlConnection("SERVER=localhost;DATABASE=template_postgis;USER ID=postgres;PASSWORD=123")

Dim command As New NpgsqlCommand(queryString, conn) conn.Open()

command.ExecuteNonQuery() 'free resource

conn.Close() conn.Dispose() End Sub

End Class

Extension.vb 程式說明

1. Extension.vb 以 Visual Basic 2005 撰寫,具有 2 個副程式;Extension.vb 是車輛 途程規劃演算法與 PostGIS 的介接模組。

(55)

Public Function Distance(ByVal nodeA As Integer, ByVal nodeB As Integer) As Double 'get distance from gis

Dim dis As Double Dim query As String Dim conn As New

NpgsqlConnection("SERVER=localhost;DATABASE=template_postgis;USER ID=postgres;PASSWORD=123")

query = "SELECT SUM(cost) AS distance FROM rt"

query = query + CStr(nodeA) + "_" + CStr(nodeB) Dim command As New NpgsqlCommand(query, conn) Dim dr As Npgsql.NpgsqlDataReader

conn.Open()

dr = command.ExecuteReader() While dr.Read()

dis = dr("distance") End While

'free resource dr.Close() conn.Close() conn.Dispose()

Return dis / 1000 '調整距離參數的比例以適配排程演算法 End Function

Public Sub StoreRoute(ByVal carNo As Integer, ByRef carRoute As ArrayList) 'write route to gis

Dim query1 As String Dim query2 As String Dim query3 As String Dim query4 As String Dim i As Integer Dim conn As New

NpgsqlConnection("SERVER=localhost;DATABASE=template_postgis;USER ID=postgres;PASSWORD=123")

query1 = "select * from rtx_y where edge_id <> -1 "

query3 = ""

(56)

'由總站出發

query2 = Replace(query1, "x", CStr(X(0)))

query2 = Replace(query2, "y", CStr(carRoute.Item(0))) query3 = query3 + query2 + "union all "

'抓取拜訪節點

For i = 0 To carRoute.Count - 2

query2 = Replace(query1, "x", CStr(carRoute.Item(i))) query2 = Replace(query2, "y", CStr(carRoute.Item(i + 1))) query3 = query3 + query2 + "union all "

Next '返回總站

query2 = Replace(query1, "x", CStr(carRoute.Item(carRoute.Count - 1))) query2 = Replace(query2, "y", CStr(X(0)))

query3 = query3 + query2 '抓取車輛編號

query4 = "DROP TABLE IF EXISTS carz;create table carz as "

query4 = Replace(query4, "z", CStr(carNo)) query4 = query4 + query3

Dim command As New NpgsqlCommand(query4, conn) conn.Open()

command.ExecuteNonQuery() 'free resource

conn.Close() conn.Dispose() End Sub

makeRoutable.sql 程式說明

1.makeRoutable.sql 處理 PostGIS 儲存的數位路網圖,由路段的起點與終點找出交 叉路口、產生 routing 用的資料表、視圖與空間索引。

(57)

--找出交叉路口:

CREATE TABLE node AS

SELECT row_number() OVER (ORDER BY foo.p)::integer AS id, foo.p AS the_geom

FROM (

SELECT DISTINCT road_ext.startpoint AS p FROM road_ext UNION

SELECT DISTINCT road_ext.endpoint AS p FROM road_ext ) foo

GROUP BY foo.p;

--產生 routing 用的資料表:

CREATE TABLE network AS

SELECT a.*, b.id as start_id, c.id as end_id FROM road_ext AS a

JOIN node AS b ON a.startpoint = b.the_geom JOIN node AS c ON a.endpoint = c.the_geom --新增空間索引到 network 資料表:

CREATE INDEX index_spatial ON network USING GIST (the_geom);

--產生 network_view

CREATE OR REPLACE VIEW network_view AS SELECT gid,start_id,end_id,shape_leng FROM network

RouteDetails 程式說明

1. Route Details 必頇放置於 QGIS plug-in 資料夾,預設為 C:\Program Files\Quantum GIS Wroclaw\apps\qgis\python\plugins

2. Route Details 以 Python 2.5 撰寫。

Route Details 讀取車輛途程敘述文字檔並展示於 QGIS GUI。程式碼如下:

# Import the PyQt and QGIS libraries from PyQt4.QtCore import *

from PyQt4.QtGui import * from qgis.core import *

# Initialize Qt resources from file resources.py import resources

(58)

class RouteDetails:

def __init__(self, iface):

# Save reference to the QGIS interface self.iface = iface

def initGui(self):

# Create action that will start plugin configuration

self.action = QAction(QIcon(":/plugins/Route Details/icon.png"), \ "Route Details", self.iface.mainWindow())

# connect the action to the run method

QObject.connect(self.action, SIGNAL("activated()"), self.run) # Add toolbar button and menu item

self.iface.addToolBarIcon(self.action)

self.iface.addPluginToMenu("&Route Details", self.action) def unload(self):

# Remove the plugin menu item and icon

self.iface.removePluginMenu("&Route Details",self.action) self.iface.removeToolBarIcon(self.action)

# run method that performs all the real work def run(self):

# create and show the dialog

fileopen = open('G:/100.kuei/QGIS Projects/route\RouteDetails.txt',"r") s=fileopen.read()

fileopen.close() ustr=s.decode('Big5')

QMessageBox.information(None, "Route Details", ustr)

附錄四-PostGIS 與 QGIS 安裝使用說明

PostGIS 安裝說明

(59)

3. 點擊”Next”,開始安裝。

4.使用預設的安裝資料夾。

(60)
(61)

6.使用預設的通訊埠與 locale 設定。勾選”Install pl/pgsql”選項。

(62)

7.稍待片刻,PostSQL 資料庫開始安裝。

(63)

8. PostgreSQL 安裝完畢,勾選 Stack Builder 選項。

9.Stack Builder 協助使用者下載與安裝擴充套件。請選擇本機安裝的 PostgreSQL 8.4 (port 5432)。

(64)

10. 請勾選 Npgsql 2.0.11-1 與 PostGIS 1.5 for PostgreSQL 8.4 v1.5.2。

11.任意選擇一個 FTP 伺服器下載。

(65)

12.確認選擇的套件與暫存資料夾。

13. 稍待片刻,擴充套件開始下載。

(66)

14.下載完畢,點擊”Next”。

15.進行 PostGIS 1.5.2 安裝。

(67)

16.勾選”PostGIS”與”Create spatial database”選項。

17.確認 PostgreSQL 安裝資料夾。

(68)

18.輸入步驟 5 所設定的資料庫密碼。

19.使用預設的空間資料庫名稱 postgis,繼續安裝。

(69)

20.安裝 shp2pgsql 插件。

(70)

21.PostGIS 安裝完畢。

22.安裝 Npgsql 資料庫連接元件。

(71)

23.使用預設的資料夾。

24.Npgsql 安裝完畢。

(72)

25.結束 Stack Builder。至此完成 PostGIS 與相關套件安裝。

(73)

pgAdmin 使用說明

1. pgAdmin 是 PostgreSQL 的圖形使用者介面。本系統操作的資料庫實體為 template_postgis。畫面左方為資料庫架構圖。

2. 本系統透過 pgAdmin 對 template_postgis 執行 SQL 程式。

(1)編輯 SQL。

(2)點擊”執行”按鈕。

(3)PostgreSQL 輸出結果。

(4)右下角顯示輸出資料筆數與 SQL 執行時間。

(74)

3. 大量更新資料之後,可以點擊”Refresh”按鈕,強迫刷新畫面。

4. 連 續 執 行 大 量 查 詢 之 前 , 請 先 修 改 postgresql.conf 的 max_locks_per_transaction 參數設定為 128 或更大,提高連線數。

(75)

PgRouting 安裝、測試與最短路徑函數運作方式:

1.預先安裝 PostgreSQL 與 PostGIS(含 pgAdmin 資料庫管理介面)。

2. 複 製 pgRouting Library 內 含 的 的 3 個 .dll 檔 案 ( 圖 7-1) 到 C:\Program Files\PostgreSQL\8.4\lib.

圖 7-1.PgRouting .dll 檔案

3.使用 pgAdmin 對 template_postgis 資料庫執行 pgRouting Library 內含的 3 個 SQL 程式(圖 7-2)。此時安裝完成。

圖 7-2.PgRouting SQL 程式檔案

4.為了測試 pgRouting 是否能順利求出最短路徑,本研究執行 shortest_path()- 最短路徑函數,針對台北市路網計算 1 號定位點到 5110 號的最短路徑,如果 有回傳結果,表示成功。部分路徑如圖 7-3 所示,由 1 號定位點取道 14 號路 段(長度 6579.25 公尺),經過 3529 號定位點;取道 11992 號路段(長度 381.59 公尺)經過 3720 號定位點,以此類推。

(76)

圖 7-3. 測試 pgRouting 5.pgRouting 的 shortest_path()運作方式說明如下:

在 SQL 查詢中引用 pgRouting 的 shortest_path()函數,給定一個路網與路徑的 起點、終點,PostGIS 轉送以上參數給外部 C++圖學函式庫(圖 7-4 步驟 1.至 2.)。C++圖學函式庫隨後回傳一條最短路徑給 PostGIS(圖 7-4 步驟 3.)。PostGIS 可進一步將路徑與路網展示於 QGIS(圖 7-4 步驟 4.)。

(77)

圖 7-4. pgRouting 的 shortest_path()運作方式

Quantum GIS 安裝說明

1. 瀏覽網站

http://www.softpedia.com/progDownload/Quantum-GIS-Download-76638.htm l

2. 點擊”External Mirror 1”,進行下載。

(78)

3. 開始安裝 Quantum GIS。

4.使用預設的資料夾。

(79)

5.安裝主程式即可。

6. 稍待片刻,Quantum GIS 開始安裝。

(80)

7.Quantum GIS 安裝完成。

Quantum GIS Plug-in: SPIT 使用說明

1. SPIT 是 ESRI Shapfile 格式地圖檔案匯入 PostGIS 的工具。

(81)

2. 第一次使用時頇新增連線。

(1)輸入連線名稱、Host、Port、資料庫名稱、使用者名稱與密碼。

(2)勾選儲存帳號、儲存密碼。

(3)測試連線。

3.連接成功,新增 Shapefile。

(82)

4.選擇要匯入的地圖檔案。(此例為 Test_ROAD.SHP)

5. 點擊”OK”,等候匯入完成。

(83)

6.Shapefile 地圖檔案成功匯入 PostGIS 為 Test_ROAD 資料表。

(84)

Quantum GIS 圖層工具使用說明

1-1. 加入 PostGIS 圖層:從圖層工具列點擊「加入 PostGIS 圖層」。

1-2.點擊”Connect”。

(85)

1-3.點選 PostGIS 資料表並點擊「新增」。

1-4. PostGIS 圖層新增成功。

(86)

2-1.加入向量圖層:從圖層工具列點擊「加入向量圖層」。

2-2.點擊「瀏覽」。

(87)

2-3.從檔案總管中開啟要加入的 Shapefile 格式檔案。

2-4.點擊”Open”。

(88)

2-5. 加入向量圖層成功。

3-1.新增 CSV 純文字檔圖層:從圖層工具列點擊「新增 CSV 純文字檔圖層」。

(89)

3-2.指定分隔字元(此例為逗號)並點擊「瀏覽」。

3-3. 從檔案總管中開啟要加入的 CSV 格式檔案。

(90)

3-4.指定經度、緯度屬性欄位為 X、Y 軸座標並點擊”OK”。

3-5. 新增 CSV 純文字檔圖層成功。

(91)

3-6.若之前專案中已有其他圖層,新增的圖層會自動套疊在其上方。

Quantum GIS plug-in: RT SQL Layer 使用說明

1. RT SQL Layer 具有繪製路線的功能。

2. 點選地圖。檢視路線起點與終點代碼。(此例以 7392 為起點,8261 為終 點)

(92)

3.點擊 RT SQL Layer 按鈕。

(93)

4. 點擊”Local”。

5. 點擊”Query builder”按鈕。

(94)

6.點選路網圖資料表(此例為 taipeio_network)並點擊”>>”加入清單。

7. 點擊”Retrieve columns”按鈕。

(95)

8.指定幾何欄位與幾何代碼。

9.

(1)輸入以下 SQL:

SELECT * FROM taipeio_network JOIN ( SELECT * FROM shortest_path(

'SELECT gid AS id, start_id::int4 AS source,end_id::int4 AS target,length_m::float8

AS cost FROM taipeio_network',7392,8261, false, false)) AS route

ON taipeio_network.gid = route.edge_id (2)將新圖層命名為”route7392to8261”。

(3)點擊”OK”。

(96)

10.從點 7392 到 8261 的路線繪製完成。

(97)

Quantum GIS plug-in: OpenLayers 使用說明

1.OpenLayers 透過 Web Service 方式載入 Google Maps、OpenStreetMap、Yahoo!

Maps、Microsoft Bing Maps 線上地圖並建立新圖層。

2.點擊附加元件的”OpenLayers plugin”。

3.有許多線上地圖選項,此例以 Google Streets layer 示範。

(98)

4.點擊” Google Streets layer”之後,等候地圖載入。移動”Google Streets”圖層到 所有圖層下方,可為底圖。

5.CSV2SQL 使用說明

1. CSVSQL 是 轉 換 .CSV 檔 案 為 SQL 敘 述 的 工 具 。 下 載 點 為 : http://www.softpedia.com/progDownload/Wolf-van-Heeswijk-CSV2SQL-Downloa d-76049.html

2. 此例為 7-ELEVEN 門市資料,包含經度、緯度、店名、地址、電話。

(99)

3.開啟 CSV2SQL,點擊”Open CSV file”。

4.點擊 CSV 檔案並開啟。

(100)

5.表格命名與欄位命名都必頇遵守 SQL 格式規定。勾選”No Header Row”,點 擊”Convert (Go!)”。

6.轉換完成。

數據

圖 3-2. TWDA 與 PostGIS 互動圖
表 3-1.逆物流需求檔案欄位定義表  車輛數目  車輛負重限制  服務點編號  指定定位點編號  需求量  時窗開始 點  時窗結束點  服務時間  服務點資料內容是台北市 7-ELEVEN 便利商店的資料,包括經緯度、店名、地址 與電話(表 3-2)。  表 3-2.服務點資料表(節錄)  經度  緯度  店名  地址  電話  121.522903  25.043751  7-ELEVEN 便利商店-千成門 市  台北市中正區林森南路 4 號之 3  (02)23577481  121.528585
圖 3-4.QGIS: Field Calculator
圖 3-7.  服務點資料匯入
+7

參考文獻

相關文件

圖1 1 會計財務與價值鏈 圖1.1 會計財務與價值鏈..

Performance metrics, such as memory access time and communication latency, provide the basis for modeling the machine and thence for quantitative analysis of application performance..

 將建議行車路線、車輛狀態等 資訊投影於擋風玻璃 ,創造猶如科 幻電影一般的虛擬檔風玻璃系統所整合。在以液晶螢幕彌補視覺死角

▪ Approximation algorithms for optimization problems: the approximate solution is guaranteed to be close to the exact solution (i.e., the optimal value)..

• If the cursor scans the jth position at time i when M is at state q and the symbol is σ, then the (i, j)th entry is a new symbol σ

Biases in Pricing Continuously Monitored Options with Monte Carlo (continued).. • If all of the sampled prices are below the barrier, this sample path pays max(S(t n ) −

圖4 1 整合資訊系統風險 圖4.1 整合資訊系統風險..

‡圖形使用者介面( graphical user interface GUI). ‡圖形使用者介面( graphical user