這幾年在產品中嵌入地圖服務已經是非常普遍的事,尤其是線上到線下整合的服務,如外送、叫車、買房、找住宿、找工作,已經是數位產品使用者很熟悉的工具。不過因應Google執行長Pichai的願景,Google Maps API在2018年中大幅漲價,讓所有在產品中使用地圖服務的成本瞬間提高數倍,台灣人最熟知的應該是上線6小時帳單60萬的口罩地圖。
在地圖產業進入門檻極高的情況下,一般產品不太可能為了提供一些地圖服務,就從頭開始自己建地理資料庫,第三方服務成本也變成不得不在初期就得面對的議題,想要產品很多人用,但又要口袋撐得住,如何兼顧使用體驗與成本也成為產品的一大挑戰。
目前市面上提供的地圖服務很多,大多是以API形式提供開發者介接,這篇文章記錄一些我自己曾經選用、或評估過的服務,分享在選擇地圖替代方案時可能要注意的事情。
有哪些地圖服務可以用
在服務體驗、資料涵蓋廣度上,我認為Google Map真的是這個世界上最厲害的地圖產品,他本身也是個還在持續演化中的產品,如果要知道目前市面上可以找到哪些常用的地圖服務,去看Google Map的開發者文件就知道了。
當然還是有其他圖資公司,會標榜自己的優勢如費用較低、更在地化的資料、特定範圍資料更新的速度、商用品質保證等(但非常建議在使用前先做一些抽樣測試,至少在大多數使用者的使用情境下不要有太誇張的錯誤,例如: 輸入高雄市,結果回傳台北的地點),有時候也會提供一些Google map沒有的功能,我自己偶爾會看看不同公司的release note看有沒有有趣的應用。
2018年Google map開發者方案大幅調整後,地圖服務被分成三種: 地圖(MAPS)、路徑(ROUTES)、地點(PLACES)。

地圖: 除了最直觀的地圖圖磚(包含靜態與動態)外,google街景也算在這個分類,(好一陣子之前截圖時,還有一個仍在BETA的Local context map,可以直接在地圖上顯示重要的地點細節,包含評分、照片、評論等,最近(2021年底)重新看定價頁面,已經被下架了)。
路徑: 這個分類大多與道路有關,包含兩點、多點之間,不同運具的路徑規劃、也可以依照即時路況計算最佳路徑。
地點: 文章開頭舉的例子中,有一些產品在使用過程不會真的看到地圖(如外送或找住宿),但實際上也是介接了地圖服務中的地址定位(Geocoding),使用者輸入地址後「算」出一個經緯度座標回傳;地點類服務也包含了興趣點(POI, point of interest)資料。
選擇不同地圖服務時該注意甚麼
選擇替代的服務,我認為最重要的兩個變因就是使用體驗和成本;成本取決於服務收費的計價方式、單價,大部分的地圖服務都是依流量計費(pay as you go),但圖資商通常會提供Freemium方案,如每個月送部分金額(Google)或部分流量(HERE、Mapbox),也會有些與代理商議價或談定企業方案的選項,但不在這次討論範圍。
而使用體驗則完全取決於『你產品的使用情境』,不同產品會因為使用情境不同,在服務選用上有很大的差異。
我過去評估過的幾項地圖服務,包含map tiles, geocoding, reverse geocoding, autocomplete, routing, instant routing…,礙於篇幅,這邊只會用前兩項做個舉例。
Map Tiles
圖磚(map tiles)指的是使用電子地圖時,底下畫有道路、建築、公園的底圖,常見的服務提供商如大家熟悉的Google、或是主業為車用導航的HERE或TomTom,同時也有許多基於開放街圖(OSM, open street map)客製圖磚的公司,如Mapbox、Carto等,網路上也可以找到一些比較不同圖磚差異的小工具(但通常google map都會因為沒綁定信用卡無法顯示),是在產品中嵌入地圖服務的基本配備。

從使用體驗來看,地圖易不易於使用,首要的是地圖上有沒有足夠的圖徵幫助使用者判斷位置,如重要地標、道路、大眾運輸路線,以台北的地圖來說使用者最快能夠辨別一個地點在哪,通常會依靠軌道運輸站點或路線,這點不同的地圖商,就有不同的細節處理。
如下面三張圖是分別從Google、OSM、HERE擷取台北市中正區的地圖範圍,在這個zoom level,Google map可以很清楚看到不同捷運線的相對位置,重疊的路線也很貼心得在介面上稍微錯開,如果是要透過捷運線定位的使用者,就可以很快地找到目標位置;而HERE WeGo在視覺上比較強化高架路段,捷運路線則沒有特別標示,只用icon點出捷運站點位置;OSM的資訊則比較混雜,對當地熟悉度更高的使用者閱讀起來會比較沒有障礙。

Map tiles的使用可分為靜態(static)與動態(dynamic),靜態地圖就是呼叫一張地圖圖片放在網頁或App中,使用者能看到上面的資訊,但無法互動,如Google文件中的範例,常見於企業的官方網站;而大家會說Google map很貴大多就是指動態的圖磚(目前網頁版本的Maps JS API需要收費,App過往有提供免費版的SDK,但近期似乎也開始收費了),嵌入在產品中,使用者就可以即時互動,包含縮放、平移、查看地點屬性…。
動態的Map tiles有不同種類的計價方式,目前比較常見的是map loads(載入一次地圖物件),也有Vector Tiles API request(圖磚API呼叫次數)、Map views(地圖瀏覽數)這些算法,這個對產品成本估算影響非常大,要特別注意。Mapbox前陣子將自家的Mapbox GL JS套件升級到新的版本,收費方式因此改變,他們做了一個小工具很好地說明這幾種方式的差異,主要差異是: 用舊版的收費方式,當使用者每次縮放、平移地圖時,都會產生新的費用,如果你的產品是會讓用戶持續探索周邊的資訊,用量就會大幅成長,費用也比較難估算;新版的map loads估算上就單純很多,每次載入地圖就只會計費一次。

所以在評估圖磚的時候,以成本的面向來說,就會去思考: 目前產品中有多少比例的用戶會使用到圖磚功能、有甚麼方式可以最大化使用地圖效益、有沒有方法可以不使用到圖磚、卻還是能讓用戶完成任務(例如把地點格式化為能快速掌握相對位置的資訊,ex: 距離台北車站約50公尺)。體驗面向來說,我就會去考慮: 使用者是在甚麼情境下來使用你的地圖服務? 是已經對查詢位置有一定程度了解的使用者、還是完全對此處陌生? 如果是後者,我有甚麼方法可以幫助使用者更容易辨識位置…
Geocoding
地址定位(Geocoding)是很常在地圖服務中使用的功能,大家應該很常在Google map輸入一串地址、或是店名,查看這家店實際上的位置在哪,查詢後就會在地圖上得到一個圖標。大家在用Google map的地址定位服務時,一般不會遇到太大的問題,通常要查的內容都可以順利找到,然而要在自家產品使用這套服務就會需要費用,也是依照查詢的使用量計費。如果今天因為成本考量,需要選擇其他服務,你可能就會開始遭遇一堆問題(這才發現Google做的有多好),這邊我以提供給中文用戶使用的產品,舉個過往在評估過程遇到的情境。
地址文字輸入方式雖然台灣的地址大概地類型就是縣市+區+路名+段+巷弄+號…,但實際上不是每個人輸入地址的方式都會完全一樣,舉個例子,如果你今天搜尋了『台南市東區大學路一號』,你在Google map、HereWego、Nominatim(開源的Geocoding服務)得到的結果如下圖。會發現只有Google正確對應出大學路1號,其他兩個服務對應到的第一個結果均為大學路,在定位上就會產生落差。

類似的狀況會發生在地址中有錯字、阿拉伯數字與中文數字混用這些情況,如果服務本身沒有把這些細節處理好,使用者就可能在過程中定位到錯誤的位置。
另一個常見的情境則是地標,地標本身又有一層模糊比對的邏輯在裡面,如「捷運萬隆站」、「萬隆捷運站」應是指涉同一個位置(同樣用上面三個不同geocoding服務,會得到不一樣的結果),如果提供的服務是會讓使用者自由輸入這些不同類型的地標,就要特別注意,反之若產品會把預設用戶輸入的地標事先列出來、甚至預先做好轉址,就不太需要擔心地標轉換的品質議題。
寫在文末:
- 可能有些人會認為體驗先好,先有人來用你產品後再來想成本的事,我也同意,不過也認為「預估可能的成本」,與「先照顧好體驗、產品成功後照顧成本」是不衝突的。
- 如果有興趣了解Google Maps為什麼會這麼貴、且為什麼沒甚麼企業可以跟他競爭,推薦閱讀Google地圖革命:從Google地圖、地球、街景到「精靈寶可夢GO」的科技傳奇內幕,非常精彩。
- 呈上,如果想知道這個世界因應企業寡占地圖資源做了甚麼努力、眾人產出了甚麼成果,可以了解一下開放街圖(Open Street Map)的故事。
- 這篇文章最早寫於2020,雖然想寫的內容很多,但最後還是沒能一氣呵成,未來有機會再把其他內容補完(如果有人想看的話)。
還有一個也可以選擇,就是 Apple Maps
https://developer.apple.com/maps/web/
原來Apple map的開發者文件已經出來了 找時間來看看~