最近在做一個手機 APP,用到了來自 data.gov.tw 的資料,分別是「省道交控路側設備資料」、「CCTV 靜態資訊(cctv_info.xml.gz)」以及「CCTV 動態資訊(cctv_value.xml.gz)」。
開放資料的慘況
裡面最關鍵的資料就是靜態資訊的 px
以及 py
,也就是 WGS84 的 Longitude 以及 Latitude。可是根據我實際測驗我的 APP 的結果,靜態資訊的地方有著大量的誤差,誤差範圍從 20 公尺到 2000 公尺都有,導致我的 APP 運行的結果非常糟糕。
山不轉路轉
於是就要想辦法解決這個問題了,問題是我該怎麼做到呢……靈機一動看到了這個東西:
資料格式: <Info cctvid=”nfbCCTV-T72-W-3.1-M“roadsection=”快速公路72號……
沒錯,在
cctvid
的地方,有里程的資訊!也就是說,我只要使用正確的里程牌資料,就應該能夠推導出正確的 GPS 位置才是,所以就在 data.gov.tw 找到另一份資料「省道里程座標」。但是,你知道這東西怎麼出來的嗎?讓我們一同閱讀一下說明:本圖資係本局32個養護工務段同仁於現地里程牌旁,利用平板電腦ViewPad7內建GPS量測坐標值後,經本局規劃組彙整轉檔產出(點圖層),定位精度受測量當時衛星幾何分布情況而有所差異,誤差約25公尺(ViewPad7其內建GPS與AGPS,GPS精度一般標準15~25公尺,若啟用AGPS則可提升至5~10公尺)
就是人工站到里程牌旁邊,然後打開平板電腦點出資料的………我的老天這方法真是太棒了呢……而且這個測量方法之下也沒有快速道路的里程牌,因此轉往其他地方看看。
換個地方找乾淨資料
找著找著就發現到「GIS-T 通網路地理資訊倉儲系統」,看到基礎圖資有「快速道路里程牌(樁號)」,Bingo!接著到圖台展示的地方看一下資料的狀況:
謝天謝地竟然可以用而且還真的有資料!接著就要把資料拿出來了,首先看到路網數值圖,然後看到圖資申購,然後再看到需要花錢,心都涼了一截……整份資料學生要五千,個人要五萬,QQ。
但是轉頭一看,發現網站上另一個地方的圖資供應,有個「圖資下載服務」,立刻打上關鍵字「里程牌」:
果然天無絕人之路!找到新鮮的資料啦!
處理資料取得 CCTV 正確 GPS 位置
我的想法是這樣:既然我們有 CCTV 的里程位置 (e.g. 003K+375),那我們是不是就可以透過兩個正確的里程牌資料,推算出正確的 CCTV GPS 位置?
以上面的里程位置為例,我們只要知道 003K+300 以及 003K+400 的 GPS 位置,就能夠算出兩個 GPS 之間 75% 的 GPS 點,接著比對原始資料與這個算出來的 GPS 點距離是否超過 threshold,如果超過,就代表 data.gov.tw 是錯的,採用新推算出來的資料當作 GPS 點。
結果
經過一小段時間寫點程式,最後驗證出來是可行的了。結果如下:
- 台 72 線 CCTV 總數量:24 個
- 原始 GPS 資料與推算 GPS 相差超過 30 公尺:19 個
高達 8 成的資料都是有問題的呢!
以「nfbCCTV-T72-W-3.1-M」這隻來看,原始資料給的 GPS 位置在:24.600814, 120.815829:
推算出來的 GPS 位置在:24.607959, 120.795609,直線距離相差 2195 公尺:
打開街景模式,你就會知道我推算的是正確的了 (監視器直接立在前方呢):
Leave a Reply