Browse by type
[!IMPORTANT] - 升級提醒:v3.1.0 整合國教院官方譯名優化全球地名翻譯,並新增印尼圖資(繁體中文在地化);v3.0.0 新增泰國圖資。若您已部署本專案,請在更新後執行「重新擷取照片中繼資料」,以套用最新資料。
本專案為 Immich 提供專為臺灣使用者設計的反向地理編碼優化,根據使用者習慣提供自然且準確的地理資訊顯示。
目前支援:🇹🇼 臺灣 | 🇯🇵 日本 | 🇰🇷 南韓 | 🇹🇭 泰國 | 🇮🇩 印尼 | 🌏 其他地區中文化
本專案以「臺灣使用者體驗」為核心,針對不同地區採用最適合的語言策略:
本專案根據臺灣使用者的閱讀習慣,對不同地區採用最合適的語言處理策略:
| 地區 | 語言策略 | 資料來源 | 說明 |
|---|---|---|---|
| 🇹🇼 臺灣 | 繁體中文(官方名稱) | NLSC 國土測繪中心 | 優化地理資料;解決國家與行政區顯示名稱錯誤的問題 |
| 🇯🇵 日本 | 日文原名(漢字+假名) | 国土数値情報ダウンロードサイト | 優化地理資料;以日文原名顯示 |
| 🇰🇷 南韓 | 繁體中文翻譯 | admdongkor(官方行政區邊界) | 優化地理資料;提供繁體中文翻譯 |
| 🇹🇭 泰國 | 繁體中文翻譯(官方英文 / 泰文 fallback) | COD-AB Thailand | 優化地理資料;以官方行政區邊界計算行政區中心點 |
| 🇮🇩 印尼 | 繁體中文翻譯(BIG 官方印尼文 fallback) | BIG(Badan Informasi Geospasial) | 優化地理資料;以村級邊界計算行政區中心點,涵蓋 38 省 |
| 🌏 其他 | 繁體中文翻譯 | 國教院官方譯名 → GeoNames 翻譯 → GeoNames 英文 | 優先使用國教院官方臺灣譯名,若無則使用 GeoNames 資料 |
為什麼日本保留日文? 臺灣使用者普遍熟悉日文漢字與假名的組合,「横浜市」與「橫濱市」相比不容易造成辨識困難,「うるま市」亦不會影響普遍臺灣用戶的理解。
本專案使用的地理數據主要來自以下來源:
[!NOTE] 完整的資料來源聲明與授權資訊請參閱 NOTICE.md。
[!NOTE] 由於 Immich 的反向地理解析功能基於其載入的資料庫,並採用最近距離原則匹配地名,部分結果可能無法完全精確,或與預期不同。例如: - 邊界附近的座標可能被判定為鄰近的行政區 - 某些小型島嶼或特殊地理位置可能無法精確對應
本專案支援以下兩種部署方式:
整合式部署(適用於 Immich 的 docker-compose 部署,可確保容器啟動時自動載入最新的臺灣特化資料)。
手動部署(適用於自訂部署環境,可手動下載並配置特化資料)。
修改 docker-compose.yml 配置
在 immich_server 服務內新增 entrypoint 設定,使容器啟動時自動下載最新地理資料:
```yaml
services:
immich_server:
container_name: immich_server
# 其他配置省略
entrypoint: [ "tini", "--", "/bin/bash", "-c", "bash <(curl -sSL https://github.com/RxChi1d/immich-geodata-zh-tw/releases/latest/download/update_data.sh) --install && exec start.sh" ] ```
[!NOTE] -
entrypoint會在容器啟動時先執行本專案的update_data.sh腳本,自動下載並配置臺灣特化資料,隨後執行 Immich 伺服器的start.sh啟動服務。 - 整合式部署也支援指定特定版本下載,詳情請參考 指定特定版本 章節。
重啟 Immich
執行以下命令以重啟 Immich:
bash
# 如果使用 docker-compose 部署
docker compose down && docker compose up
10000 geodata records imported 等類似訊息,確認 geodata 已成功更新。 若未更新,請修改 geodata/geodata-date.txt 為一個更新的時間戳,確保其晚於 Immich 上次加載的時間。
重新提取照片元數據
登錄 Immich 管理後台,前往 系統管理 > 任務,點擊 提取元數據 > 全部,以觸發照片元數據的重新提取。完成後,所有照片的地理資訊將顯示為中文。
新上傳的照片無需額外操作,即可直接支援中文搜尋。
修改 docker-compose.yml 配置
在 volumes 內新增以下映射(請依據實際環境調整路徑):
```yaml
volumes:
[!NOTE] 若使用 Immich < 1.136.0 版本,請將第二行改為:
/mnt/user/appdata/immich/i18n-iso-countries/langs:/usr/src/app/node_modules/i18n-iso-countries/langs:ro
下載臺灣特化資料
提供以下兩種下載方式:
(1) 自動下載
參考本專案中的 update_data.sh 腳本,修改 DOWNLOAD_DIR 為存放 geodata 和 i18n-iso-countries 的資料夾路徑,並執行腳本:
bash
bash update_data.sh
> [!NOTE]
> - 手動部署也支援指定特定版本下載,詳情請參考 指定特定版本 章節。
> - UnRAID 使用者可以通過 User Scripts 插件執行腳本。
(2) 手動下載
前往 Release 頁面 查找所需的版本,下載對應的 release.tar.gz 或 release.zip,並將其解壓縮至指定位置。
在某些情況下(例如最新的 release 出現問題),你可能需要下載或回滾到特定的 release 版本。本專案的更新腳本支援透過 --tag 參數來指定要下載的 release tag。
如何找到可用的 Tag?
請前往本專案的 Releases 頁面 查看所有可用的 release tag 名稱(例如 v2.2.4, nightly 等)。
使用範例:
整合式部署 (docker-compose.yml 中的 entrypoint)
在 entrypoint 的指令後面加上 --tag <tag_name>:
yaml
entrypoint: [ "tini", "--", "/bin/bash", "-c", "bash <(curl -sSL https://github.com/RxChi1d/immich-geodata-zh-tw/releases/download/<tag_name>/update_data.sh) --install --tag <tag_name> && exec start.sh" ]
將 <tag_name> 分別替換為你想要下載的具體 tag 名稱。如果省略 --tag,則預設下載最新的 release (latest)。
手動部署 (update_data.sh)
執行腳本時加上 --tag <tag_name>:
bash
bash update_data.sh --tag <tag_name>
將 <tag_name> 替換為你想要下載的具體 tag 名稱。如果省略 --tag,則預設下載最新的 release (latest)。
[!NOTE] 腳本會先驗證指定的 tag 是否存在於 GitHub Releases,如果 tag 無效則會提示錯誤並終止執行,因此請在執行前確保 tag 有效。
📖 詳細的臺灣資料處理邏輯請參閱 臺灣行政區處理文檔
📖 詳細的日本行政區處理邏輯請參閱 日本行政區處理文檔
📖 詳細的南韓行政區處理邏輯請參閱 南韓行政區處理文檔
tha_admin3 sub-district / tambon 邊界資料center_lat / center_lon 作為預設,因其較接近官方代表點而非最近點模型下的最佳單點📖 詳細的泰國行政區處理邏輯請參閱 泰國行政區處理文檔
Asia/Jakarta、WITA Asia/Makassar、WIT Asia/Jayapura)+lat_1=1 +lat_2=-8 +lon_0=118)計算幾何中心點;multipart polygon 每個 part 各出一列,提升群島地形的最近鄰命中率(admin2 命中率 96.99%)📖 詳細的印尼行政區處理邏輯請參閱 印尼行政區處理文檔
📖 詳細的全球翻譯處理邏輯請參閱 全球翻譯處理文檔
只需重新啟動 Immich 容器,即可自動更新地理資料。
下載最新 release.zip,並解壓至指定位置。
重新提取照片元數據(與「使用方式-手動部署」相同)。
本機 production 資料處理預設使用 Rust CLI。請先安裝 Rust toolchain,並確認系統可使用
unzip、pkg-config 與 PROJ development library(例如 Ubuntu 的 libproj-dev)。
GitHub Releases 目前只提供 Linux x86_64 的預編譯 Rust CLI binary,主要供 GitHub Actions、Linux server 與 Immich container 類環境使用。macOS 與 Windows 目前請使用本地編譯方式。
如需在非 Linux 環境或自訂 Linux 環境執行資料處理,請先安裝 Rust toolchain 與 PROJ development library,再執行:
cargo build --release
編譯完成後,binary 會位於:
target/release/immich-geodata
也可以直接用 cargo run 執行:
cargo run --release -- help
如果你需要處理新的國家或更新現有的地理資料來源,可以使用 extract 命令從 Shapefile 或 GeoJSON 提取資料。此步驟是選用的,僅在需要更新資料來源時執行。
資料來源:國土測繪中心(NLSC)
# 1. 下載「村(里)界(TWD97經緯度)」資料並解壓縮
# 2. 執行提取命令
cargo run --release -- extract --country TW \
--shapefile geoname_data/VILLAGE_NLSC_1140825/VILLAGE_NLSC_1140825.shp \
--output meta_data/tw_geodata.csv
資料來源:国土数値情報
# 1. 下載「行政区域データ(世界測地系)」並解壓縮
# 2. 執行提取命令
cargo run --release -- extract --country JP \
--shapefile geoname_data/N03-20250101_GML/N03-20250101.shp \
--output meta_data/jp_geodata.csv
資料來源:admdongkor
# 1. 從 admdongkor 專案下載官方行政區邊界資料並解壓縮
# 2. 執行提取命令
cargo run --release -- extract --country KR \
--shapefile geoname_data/HangJeongDong_verYYYYMMDD.geojson \
--output meta_data/kr_geodata.csv
資料來源:Thailand COD-AB
# 1. 下載 tha_admin_boundaries.shp.zip 並解壓縮
# 2. 使用 tha_admin3.shp 提取 Admin 3 / Tambon 邊界資料
cargo run --release -- extract --country TH \
--shapefile geoname_data/tha_admin_boundaries/tha_admin3.shp \
--output meta_data/th_geodata.csv
泰國提取會讀取或建立 geoname_data/TH_wikidata_cache.json,用於 Admin1/Admin2 繁中翻譯;Admin3 目前保留 COD-AB 官方英文。
提取完成後,執行 Rust release 時會自動整合這些資料。
資料來源:BIG(Badan Informasi Geospasial)官方 ArcGIS REST FeatureServer
# 1. 從 BIG 官方 REST 服務以分頁方式下載 desa 村級圖資(geometryPrecision=6,版本 TASWIL20230928)
# 下載方式與固定參數請參閱 docs/research/indonesia-handler.md
# 2. 執行提取命令
cargo run --release -- extract --country ID \
--shapefile <path_to_BIG_desa_geojson> \
--output meta_data/id_geodata.csv
印尼提取會讀取或建立 geoname_data/ID_wikidata_cache.json,用於 Admin1(省)/ Admin2(縣市)繁中翻譯;Admin3(郡)/ Admin4(村)保留 BIG 官方印尼文。詳細下載流程與固定參數請參閱 印尼 handler 研究文件。
提取完成後,執行 Rust release 時會自動整合這些資料。
完成資料提取(或使用現有的資料)後,可以執行完整的資料處理流程來生成 release。
至 LocationIQ 註冊帳號,並取得 API Key。
cargo run --release -- release \
--locationiq-api-key "YOUR_API_KEY" \
--country-code "US"
[!NOTE] - 可以通過
cargo run -- help查看更多選項。 ---country-code參數可指定需要處理的國家代碼,多個代碼之間使用空格分隔。 - 臺、日、韓、泰、印(TW/JP/KR/TH/ID)已改由官方圖資 handler 產生,無需也不應以 LocationIQ 處理;此流程僅用於為其他國家產生 metadata。[!WARNING] - 由於 LocationIQ 的 API 有請求次數限制 (可登入後於後台查看),因此請注意要處理的國家的地名數量,以免超出限制。 - 本專案允許 LocationIQ 反向地理編碼查詢的進度恢復,若超過當日請求限制,可於更換 api 金鑰或次日繼續執行。 - 需加上
--pass-cleanup參數,以取消重設資料夾功能:cargo run --release -- release --locationiq-api-key "YOUR_API_KEY" --country-code "US" --pass-cleanup。
Rust CLI 提供 dry-run contract,可在不呼叫外部 API 或下載網路的情況下驗證 release orchestration:
cargo run -- release \
--dry-run \
--locationiq-api-key "fixture" \
--country-code "KR" "TH" \
--batch-size 100 \
--locationiq-qps 2
需要驗證 release archive 與 update_data.sh 所需目錄結構時,可使用 fixture mode
產生本地 smoke artifact:
cargo run -- release \
--fixture-mode \
--pass-locationiq \
--output-folder /tmp/rust-release-smoke
目前 release 與 nightly production workflow 已切換為 Rust production path,並保留 Rust fixture release smoke 作為前置檢查。真實 GeoNames/Natural Earth 下載與 LocationIQ quota path 的自動測試仍需使用 fixture、stub 或明確 dry-run gate。
本專案基於 immich-geodata-cn 修改,特別感謝原作者 ZingLix 的貢獻。
本專案採用 GPL 授權。
$ claude mcp add immich-geodata-zh-tw \
-- python -m otcore.mcp_server <graph>