jjs / geonames-bundle
GeoNames.org 地理数据及其相关功能
Requires
- php: ~5.4
- guzzle/http: ~3.5
- jjs/common: *
- symfony/framework-bundle: ~2.1
Requires (Dev)
- jms/cg: ~1.0
- symfony/console: ~2.1
- symfony/css-selector: ~2.2
- symfony/dom-crawler: ~2.1
This package is not auto-updated.
Last update: 2024-09-23 13:36:51 UTC
README
简介
为[symfony 2][sf2]应用程序提供访问由geonames.org导出的数据的接口。
什么是geonames.org
来自geonames.org网站
GeoNames地理数据库覆盖所有国家,包含超过八百万个可免费下载的地名。
何时使用此包
此包最有用的应用是将数据库中存储的地理信息(如国家、州和城市)进行标准化。感谢geonames.org的广泛数据,几乎全球所有城市、城镇和郊区都被覆盖。
特性
-
导入以下geonames.org数据
- 国家
- 时区
- 州和省
- 城市、城镇、郊区、村庄等
-
提供以下数据存储实现
- Doctrine ORM
安装
-
使用composer安装此包
composer require jjs/geonames-bundle:*
或直接将其添加到
composer.json
文件中{ require: { "jjs/geonames-bundle": "*" } }
-
将包添加到
AppKernel.php
// AppKernel::registerBundles() $bundles = array( // ... new JJs\Bundle\GeonamesBundle\JJsGeonamesBundle(), // ... );
安装或更新数据库模式
此包的数据库模式使用doctrine migrations定义。迁移版本设计为可以合并到您的应用程序迁移中或手动迁移模式。
独立版本控制
使用提供的迁移配置执行迁移
# Run in your project root directory
app/console doctrine:migrations:migrate --configuration=vendor/jjs/geonames-bundle/JJs/GeonamesBundle/migrations.xml
应用程序版本控制
此模式管理策略涉及更多的配置和管理,但提供了更大的控制权。这是由于增量数据库版本和语义包版本之间的映射,可以将GeoNames模式版本控制“折叠”到您自己的迁移中,并作为整体管理数据库迁移。
目前此版本控制策略尚未记录文档,如果您有兴趣使用它,请与我联系,我将编写文档。
导入数据
注意:从远程geonames.org仓库导入数据涉及从geonames.org下载近250 MB数据。
以下命令可以按顺序使用,以从geonames.org导出加载所有支持的数据(http://download.geonames.org/export/dump)
导入国家
加载一个国家列表,这些国家被其他导入数据(如时区和地方)引用。
app/console geonames:load:countries
导入时区
加载映射到国家的时区列表。
app/console geonames:load:timezones
过滤地方
此分支允许您过滤要导入到数据库中的地方。
注意:此功能测试不多,使用时请自行承担风险。
启用过滤器
要使用过滤器,您必须指定过滤器选项 geonames:load:localities --filter="rule" [countries]
。
您可能一次可以使用多个规则 geonames:load:localities --filter="rule,rule2" [countries]
。
添加过滤器规则
过滤器规则由三部分组成
- 值名称
- 比较函数
- 比较值
:
用作分隔符:valuename:compare_func:compare_value
。
值名称
值名称用于访问Locality类中的特定变量。
它将被内部转换为调用相应的获取函数(例如,population
将转换为getPopulation
)。
只有值名的第一个字符会被转换为大写字母,
因此请确保检查Import/Locality.php
以获取您get函数的正确拼写。
比较函数
在此处,您可以使用以下函数
检查值
...是否等于比较值(字符串和整数)使用=
,equal
或equals
。
...是否小于或等于比较值(整数)使用<=
。
...是否大于或等于比较值(整数)使用>=
。
...包含比较值(字符串)使用contains
。
示例
以下是一些示例
# load all localities from germany with a population >= 2000 app/console geonames:load:localities --filter="population:>=:2000" DE # load all localities with the locality-name "Kiel" app/console geonames:load:localities --filter="nameUtf8:equals:Kiel" # load all localities that contain "Test" in the locality-name app/console geonames:load:localities --filter="nameUtf8:contains:Test" # load all localities from germany with a population between 42000 and 100000 app/console geonames:load:localities --filter="population:>=:42000,population:<=:100000" DE
导入地区
导入地区有两种选项——一次性导入整个世界或按国家批量导入。内部使用相同的导入机制,导入过程将下载每个国家的数据文件,然后分别处理国家文件。
注意完整加载过程可能需要数小时才能完成,并且需要大量的内存。
# All countries app/console geonames:load:localities # Subset of countries (list the desired contries as arguments) app/console geonames:load:localities US CA #Using the filter function (all countries) app/console geonames:load:localities --filter="option:func:value" #Using the filter function (specific countries, as argument list) app/console geonames:load:localities --filter="option:func:value" US CA