yalesov / zf2-geoname
维护 Geonames 数据库的本地副本
Requires
- php: >=5.3.3
- yalesov/arg-validator: 2.*
- yalesov/file-system-manager: 2.*
- yalesov/yaml: 2.*
- yalesov/zf2-cli: 2.*
- yalesov/zf2-cron: 3.*
- yalesov/zf2-doctrine: 2.*
- zendframework/zendframework: 2.*
Requires (Dev)
README
维护 Geonames(地点)数据库的本地副本。
此模块将安装 Geonames(地点)数据库的自更新本地副本。它涵盖了从官方数据库转储可用的位置信息。它不包括“附加组件”,例如地震、天气数据等,这些可以从他们的 Web 服务中获取。
注意:当在 MySQL 数据库中安装时,Geonames 数据库大小约为 1.5GiB - 2GiB。您确定需要本地副本,而不是官方 Web 服务吗?
安装
{ "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 模块实际上不会从您的数据库中删除相应的记录;它只会将其标记为已弃用(在 Place
和 AltName
实体中将 isDeprecated
字段设置为 true
)。这是为了确保您可以在 ZF2 应用程序中依赖 Geoname 模块设置的 primary IDs。
查询数据库
您可以直接使用Doctrine 2 ORM API。映射文件位于(zf2-geoname)/src/Yalesov/Geoname/Entity/Mapping
。所有地点的层次结构,从大陆
、国家
到各种行政级别,都已经正确地记录在Place
实体的parent
和children
字段中。
待办事项:添加一组用于常见任务的API,例如通过名称查找地点、列出国家中的所有地点等。