yalesov/zf2-geoname

维护 Geonames 数据库的本地副本

v4.2.3 2016-07-06 12:27 UTC

README

Build Status

维护 Geonames(地点)数据库的本地副本。

此模块将安装 Geonames(地点)数据库的自更新本地副本。它涵盖了从官方数据库转储可用的位置信息。它不包括“附加组件”,例如地震、天气数据等,这些可以从他们的 Web 服务中获取。

注意:当在 MySQL 数据库中安装时,Geonames 数据库大小约为 1.5GiB - 2GiB。您确定需要本地副本,而不是官方 Web 服务吗?

安装

Composer:

{
  "require": {
    "yalesov/zf2-geoname": "4.*"
  }
}

然后在 (app root)/config/application.config.* 中的 modules 键添加 Yalesov\Geoname

Geoname 模块还将通过 DoctrineORMModule 与您的应用程序数据库挂钩。它将创建一些以 he_geoname_* 为前缀的表,并使用默认的 EntityManager doctrine.entitymanager.orm_default。如果您的设置不同,请根据需要修改 config/module.config.yml 中的 doctrine 部分。

Geoname 模块使用了 Cron 模块,因此请确保您遵循其设置,并正确设置了 cron 作业。

最后,您需要更新您的数据库模式。建议的方式是通过 Doctrine 的 CLI

$ vendor/bin/doctrine-module orm:schema-tool:update --force

配置

config/geoname.local.php.dist 复制到 (app root)/config/autoload/geoname.local.php,并修改设置。

  • tmpDir:存储 geonames 数据库源文件的临时目录。(确保它可由脚本写入。)
  • cron:(cron 表达式)Geoname 应该多久运行一次。

cron 应该多久运行一次?建议的设置是每 15 分钟一次,这也是默认设置。但是,您可以根据自己的需要进行调整

目前(2012 年 9 月 18 日),安装数据库需要 820 个 cron 作业。以 15 分钟的间隔,这将花费大约 8.5 天来安装数据库。至于更新,每天只需要一个 cron 作业。但是,建议每天设置多个以提供冗余 - 例如,以防 geonames 服务器暂时不可用。

您也可以在安装后调整到一个不那么频繁的 cron。在安装过程中,Meta 实体的 status 字段或 he_geoname_meta 表将设置为 Yalesov\Geoname\Repository\Meta::STATUS_INSTALL_*,之后设置为 Yalesov\Geoname\Repository\Meta::STATUS_UPDATE

用法

数据库同步

只需遵循安装说明。Geoname 模块将在您的 cron 作业中安装和更新其数据库。

注意:当来源指示“删除”时,Geoname 模块实际上不会从您的数据库中删除相应的记录;它只会将其标记为已弃用(在 PlaceAltName 实体中将 isDeprecated 字段设置为 true)。这是为了确保您可以在 ZF2 应用程序中依赖 Geoname 模块设置的 primary IDs。

查询数据库

您可以直接使用Doctrine 2 ORM API。映射文件位于(zf2-geoname)/src/Yalesov/Geoname/Entity/Mapping。所有地点的层次结构,从大陆国家到各种行政级别,都已经正确地记录在Place实体的parentchildren字段中。

待办事项:添加一组用于常见任务的API,例如通过名称查找地点、列出国家中的所有地点等。