内容提要
Immich 通过经纬度查询数据库进行反向地理编码,以获取照片位置。为了提高使用便利性,作者对默认英文名称进行了汉化,利用 GeoNames 数据库提取国家、省、市信息,并通过 API 重新识别地名,从而提升准确性。
关键要点
-
Immich 通过经纬度查询数据库进行反向地理编码,以获取照片位置。
-
默认英文名称汉化,利用 GeoNames 数据库提取国家、省、市信息。
-
Immich 的反向地理编码在 reverseGeocode 函数中实现,使用 SQL 查询获取最近的地理点。
-
earth_box 创建以给定点为中心的球体范围,筛选距离输入点 25 公里内的地理点。
-
如果未找到详细地名,则通过自然地球国家划分确定国家信息。
-
反向地理编码数据来自 GeoNames,存放在 /build/geodata 文件夹下。
-
导入数据时会检查更新时间,避免重复导入。
-
汉化过程分为国、省、市三级,使用不同文件和 API 进行翻译和识别。
-
node-i18n-iso-countries 库用于国家名称的汉化,admin1CodesASCII.txt 和 alternateNamesV2.zip 用于省级名称的翻译。
-
cities500.txt 文件用于市级名称翻译,结合地图 API 进行标准化识别。
-
总结了 Immich 逆向地理编码的原理及汉化实现,相关代码已上传至仓库。
延伸解读
反向地理编码的实现原理
Immich 的反向地理编码依赖于 SQL 查询,通过经纬度在 geodata_places 数据库中寻找最近的地理点。这种方法确保了地理位置的准确性,但也依赖于数据库的完整性和更新频率。用户在使用时应关注数据的时效性,以避免因数据过时导致的错误识别。
汉化过程的挑战
在汉化过程中,Immich 需要处理不同层级的地名翻译,包括国家、省、市。由于默认使用英文,汉化时需替换静态文件和调用不同的 API,这可能导致实现复杂性增加。用户在使用汉化版本时,需注意可能存在的翻译不一致或遗漏问题。
数据来源与更新机制
Immich 的反向地理编码数据主要来自 GeoNames,定期更新以确保数据的准确性。导入机制通过检查更新时间来避免重复导入,这一设计有助于保持数据库的整洁性。用户在使用时应关注数据更新的频率,以确保获取最新的地理信息。
延伸问答
Immich 的反向地理编码是如何工作的?
Immich 通过经纬度查询数据库,使用 SQL 查询获取最近的地理点,并提取国家、省、市信息。
Immich 如何实现地名的汉化?
Immich 通过使用 node-i18n-iso-countries 库和 GeoNames 数据库,将英文名称替换为中文名称,分为国、省、市三级进行汉化。
Immich 中的 reverseGeocode 函数有什么作用?
reverseGeocode 函数用于接收经纬度并查询数据库,返回最近的地理位置及其相关信息。
Immich 是如何处理未找到详细地名的情况?
如果未找到详细地名,Immich 会通过自然地球国家划分确定国家信息,作为替代。
Immich 的数据来源是什么?
Immich 的反向地理编码数据来自 GeoNames,存放在 /build/geodata 文件夹下。
Immich 如何避免重复导入数据?
在导入数据时,Immich 会检查上次导入的时间与新数据的更新时间,只有在新数据更新时才会进行导入。