heartsentwined / 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服务获取。
注意:Geonames数据库的大小约为1.5GiB - 2GiB,当安装在MySQL数据库中时。您确定需要本地副本,而不是官方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
表的status
字段将设置为Yalesov\Geoname\Repository\Meta::STATUS_INSTALL_*
,之后将设置为Yalesov\Geoname\Repository\Meta::STATUS_UPDATE
。
用法
数据库同步
只需遵循安装说明。Geoname模块将在cron作业中安装和更新其数据库。
注意:当源指示“删除”时,Geoname模块实际上不会从您的数据库中删除相应的记录;它只会将其标记为已弃用(通过在实体的Place
和AltName
中将isDeprecated
字段设置为true
)。这是为了确保您可以在您的ZF2应用程序中依赖Geoname模块设置的ID。
查询数据库
您可以直接使用Doctrine 2 ORM API。映射文件位于 (zf2-geoname)/src/Yalesov/Geoname/Entity/Mapping
。从 continent
到 country
,再到各种行政级别的所有地点的层次结构,都已正确地捕获在 Place
实体的 parent
和 children
字段中。
待办:添加一组用于常见任务的API,例如按名称查找地点、列出国家中的所有地点等。