想做個台灣的寺廟地圖, 我們先來找政府 opendata 資料, 可以看到在這裡有:
https://data.gov.tw/dataset/8203
內容為全國宗教資訊系統資料-寺廟
資料只有一種格式, 就是 XML, 連結在此:
https://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx?DATA=78CA6206-2E8C-4688-AB54-925330B0784B
不過會被重導至一個拿不到資料的連結:
http://religion.moi.gov.tw/Report/temple.xml
沒關係, 改為 https 即可, 如下:
https://religion.moi.gov.tw/Report/temple.xml
內容如下:
<?xml version="1.0" encoding="utf-8"?> <ArrayOfOpenData_3 xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <OpenData_3> <寺廟名稱>竹圍仔福德祠</寺廟名稱> <主祀神祇>福德正神</主祀神祇> <行政區>臺南市</行政區> <地址>臺南市白河區大竹里14鄰大排竹206號</地址> <教別>道教</教別> <建別>適用監督寺廟條例寺廟</建別> <組織型態>管理人(住持)制</組織型態> <電話>06-6851562</電話> <負責人>錢玉珠</負責人> <其他 /> <WGS84X>120.396797180176</WGS84X> <WGS84Y>23.3648853302002</WGS84Y> </OpenData_3> <OpenData_3> <寺廟名稱>福德祠</寺廟名稱> <主祀神祇>福德正神</主祀神祇> <行政區>臺南市</行政區> <地址>臺南市白河區糞箕湖河東里33之2號</地址> <教別>道教</教別> <建別>適用監督寺廟條例寺廟</建別> <組織型態>管理人(住持)制</組織型態> <電話>06-6852378</電話> <負責人>吳朝正</負責人> <其他 /> <WGS84X>120.438499450684</WGS84X> <WGS84Y>23.3971004486084</WGS84Y> </OpenData_3> .... </ArrayOfOpenData_3>
因為沒有 JSON format, 於是利用這個工具來轉換:
https://codebeautify.org/xmlviewer
由 XML 轉為 JSON, 如下:
{ "ArrayOfOpenData_3": { "OpenData_3": [ { "寺廟名稱": "竹圍仔福德祠", "主祀神祇": "福德正神", "行政區": "臺南市", "地址": "臺南市白河區大竹里14鄰大排竹206號", "教別": "道教", "建別": "適用監督寺廟條例寺廟", "組織型態": "管理人(住持)制", "電話": "06-6851562", "負責人": "錢玉珠", "其他": "", "WGS84X": "120.396797180176", "WGS84Y": "23.3648853302002" }, { "寺廟名稱": "福德祠", "主祀神祇": "福德正神", "行政區": "臺南市", "地址": "臺南市白河區糞箕湖河東里33之2號", "教別": "道教", "建別": "適用監督寺廟條例寺廟", "組織型態": "管理人(住持)制", "電話": "06-6852378", "負責人": "吳朝正", "其他": "", "WGS84X": "120.438499450684", "WGS84Y": "23.3971004486084" }, ... ], "_xmlns:xsd": "http://www.w3.org/2001/XMLSchema", "_xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance" } }
就可以拿來用了, 配合一下 Google Maps Javascript API:
https://developers.google.com/maps/documentation/javascript/examples/marker-simple
我們就可以把這組 JSON 的資料畫在 Google Maps 上面了, 想看看效果嗎? 有密集恐懼症的朋友要留意一下:
https://sample.diary.tw/templemaps/
[2021/7/13 18:06] 朋友提到因為 loading json 時間長, 增加了 jquery LoadingOverlay 功能來實現等待的效果, 才不會覺得沒動作, 另外也加上了”教別”的統計了, 看看這個有趣的數字吧:
教別 | 數量 |
道教 | 9708 |
佛教 | 2285 |
一貫道 | 231 |
其他(儒教) | 23 |
undefined | 7 |
軒轅教 | 6 |
理教 | 6 |
彌勒大道 | 6 |
天德聖教 | 5 |
天道 | 3 |
天帝教 | 2 |
其他(佛教) | 1 |
其他(黃中) | 1 |
三一(夏)教 | 1 |
其他 | 1 |
其他(唯心聖教) | 1 |
其他(藏傳佛教寧瑪巴) | 1 |
其他(天主教) | 1 |
其他(道教) | 1 |
其他(顯教) | 1 |
其他(道) | 1 |
[2021/7/19]新增Table View
利用 Tabulator (http://tabulator.info/)這個工具來將取得的 open data資料以 table view進行檢視的方式, 對於結構化資料也很方便, 並將排序與過濾器加上, 可以更快速方便地檢視想看到的資料, 請參閱:
https://sample.diary.tw/templemaps/table.htm
[2022/3/5 20:06]
調整原始內容取得為動態版本, 來源仍為原 xml source:
https://religion.moi.gov.tw/Report/temple.xml
利用以下程式碼進行動態轉換為 json:
$text = file_get_contents($url); $xml = simplexml_load_string($text); $json = json_encode($xml); echo $json;
其中從 url 取出 xml 的方式, 有做快取, 每 7200秒會過期重取一次, 程式碼就不再列出, 上述為簡化的內容, 直接利用 simplexml_load_string 的方式來進行 SimpleXMLElement, 並且再利用 json_encode 轉出 json.
原靜態內容為 2021/7/8 取得, 網址為:
https://sample.diary.tw/templemaps/temple.json
目前使用的動態轉換的版本, 網址為:
https://sample.diary.tw/templemaps/temple.php
其中有部分欄位差異為沒有了”建別”, 多了”登記別”. 而原地圖版本的範例與table view的範例也一併更新為這個動態轉換版本的 datasource了.
這裡列出之前的資料與現行資料的教別數量差異:
教別 | 數量(2021/7/9) | 數量(2022/3/5) |
道教 | 9708 | 9720 |
佛教 | 2285 | 2308 |
一貫道 | 231 | 229 |
其他(儒教) | 23 | 24 |
undefined | 7 | 6 |
軒轅教 | 6 | 6 |
理教 | 6 | 6 |
彌勒大道 | 6 | 6 |
天德聖教 | 5 | 5 |
天道 | 3 | 3 |
天帝教 | 2 | 2 |
其他(佛教) | 1 | 1 |
其他(黃中) | 1 | 1 |
三一(夏)教 | 1 | 1 |
其他 | 1 | 1 |
其他(唯心聖教) | 1 | 1 |
其他(藏傳佛教寧瑪巴) | 1 | 1 |
其他(天主教) | 1 | 1 |
其他(道教) | 1 | 1 |
其他(顯教) | 1 | 1 |
其他(道) | 1 | 1 |
其他(宇宙彌勒皇教) | 0 | 1 |
在〈台灣寺廟地圖〉中有 1 則留言
[…] 繼上次台灣寺廟地圖(https://diary.tw/archives/1915)後, 想做個台灣教堂地圖, 不過查了一下, 只有法人教會, 沒有教堂, 看起來一樣是教堂的資料, 所以就會來用囉, 來看看資料來源: […]