2025年7月25日 星期五

共筆維護試算表、地圖自動更新 (不分尺寸版)

想像一個團隊, 每位成員分頭去收集一些 (不涉及隱私或機密、 可以公開的) 地址, 要放到一張共同的地圖上面。 除了地址之外, 還有一些需要經常更動的欄位, 例如各地點的開放時間、 注意事項、 臨時公告等等。 什麼樣的工作流程會比較有效率呢? 我會開一張共筆的試算表, 例如 ethercalc 或是 google sheet, 裡面含有名稱、地址、經緯度、備註以及其他文字資訊等等欄位, 並且分享給所有成員, 然後把這張試算表餵給 umap 吃。 於是每當任何成員修改 [地址經緯度以外的] 其他任何欄位, 地圖瀏覽者只要重新整理網頁, 就會看到最新最及時的資訊。 至於經緯度, 可以透過 TGOS 手動批次更新。 編輯 google 試算表的門檻比編輯地圖低很多, 這樣的安排便於讓任何人都可以參與。 我們拿 台派店家 當例子。 照以下做完之後, 會得到像這樣的成品: 台派店家地圖

先查看 原始資料的網址, 找出試算表代號 ("/d/" 後面那一長串) 以及分頁代號 ("gid=" 後面的數字)。 在 bash 底下, 先設定變數:

gs_id=15E0sastmidjk4CJlJJZoKZgbp5He5SKaUCbo4eMMlYY
gid=418920722

然後 wget -O tai-shops.csv "https://docs.google.com/spreadsheets/d/$gs_id/export?format=csv&gid=$gid" 就把三千多筆資料抓下來啦! 不過, 因為 google 回應時, 會送出 redirect 重新導向下載專用的伺服器, 所以如果用 curl, 必須加上 -L 選項: curl -L "https://docs.google.com/spreadsheets/d/$gs_id/export?format=csv&gmp;id=$gid" > tai-shops.csv

於是我就寫了 (其實是 gemini 寫了大半) tai-shops.php 並且 (放在網頁空間例如 ~/public_html 底下) 做以下設定:

touch tai-shops.csv
chmod 664 tai-shops.csv
sudo chgrp www-data tai-shops.csv

如此一來, 用瀏覽器透過網站造訪 tai-shops.php 時, 就會取得一個 csv 檔。 它跟原始資料的差別主要是: 其中三個欄位名稱改成 umap 喜歡的名稱 (name, latitude, longitude), 並且把所有欠缺經緯度的列都刪掉, 以免 umap 戴入失敗。 另外也 cache 最近一次查到的資料, 超過一小時才會再重新詢問 google sheet。

確認手動取得 csv 沒問題之後, 就可以:

  1. 設定 apache2, 開啟 CORS, 並且採用 https 而非 http。
  2. umap 建立一張地圖。
  3. 建立一個圖層, 點選 「編輯」, 進入 「圖層屬性」。 在 「遠端資料」 欄位填入上面的 tai-shops.php 的網址。 格式選 csv。 現在應該可以看到許多台派店家的圖徵了。
  4. 「圖層類型」 建議選取 「群集後」 (clustered) 可以簡化畫面、 加快地圖顯示速度。
  5. 設定以 csv 檔的 color 欄位作為圖徵的顏色 設定滑鼠點選時顯示的文字 在 「互動選項」 底下的 「彈出內文範本」 欄位填入以下:
    # {name}
    類別:{類別}
    詳細地址:{詳細地址}
    商店網址:{商店網址}
    搜尋連結:{搜尋連結}
    
    注意: 大括弧內放 csv 檔的某個欄位名稱, 代表 「請顯示這一列資料的這個欄位的值」。 目的是要讓訪客可以點選某個地點, 顯示關於此點的詳細資訊。 如果瀏覽器有安裝 ublock origin, 圖徵可能無法點擊。 請先停用 ublock origin 再試試看。
  6. 在 「形狀屬性」 底下, 可以設定圖徵的顏色、形狀等等。 「色彩」 欄位甚至也可以填入文字。 比方說, 如果填入 {color} (含大括弧), 就是要求 umap 去找 csv 檔裡名為 color 的欄位, 以這個欄位的值作為圖徵的顏色。 從 這裡 學到的。 當然, 以我們的例子來說, 並沒有這個欄位可用。 如果 「類別」 欄位整理得好, 或許可以拿它來查詢/計算一個新的 color 欄位, 地圖會更好用。

大概是這樣。 我很喜歡幫人家畫地圖, 而且目前都沒收費, 可是還是沒有什麼生意 :-) 所以程式碼還沒有機會改的很通用。 拜託大家幫我宣傳一下 :-)

* * * * *

[2026/3/12] 補充說明: 這篇 2025/7/25 的文章, 本來是拿 「國有器官」 放映地點來做例子。 但是後來雄獅影視為了避免戲院遭到騷擾, 決定還是不要公告細節比較好。 與此同時我又在台派群組裡看到台派店家的試算表, 也從 gemini 那邊學到更簡單的 google sheet 查詢方式 (直接取得 csv, 不要繞一圈經過 html 格式)。 所以我就乾脆拿台派店家來取代國有器官作例子、 把 「小尺寸版」 跟這篇 「大尺寸版」 合併重新改寫這現在這個新版。 網路時光機裡依然可以查得到舊版。

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。