macs / geonames-bundle

GeoNames.org地理数据及其相关功能

v2.0.2 2020-06-10 11:32 UTC

README

简介

为[symfony 2][sf2]应用程序提供对geonames.org导出的数据的访问。

什么是geonames.org

来自geonames.org网站

GeoNames地理数据库涵盖了所有国家,包含超过八百万个可免费下载的地名。

何时使用此捆绑包

此捆绑包最有用的应用是将存储在数据库中的地理信息(如国家、州和城市)进行标准化。得益于geonames.org的广泛数据,几乎覆盖了全球所有城市、城镇和郊区。

功能

  • 导入以下geonames.org数据

    • 国家
    • 时区
    • 州和省
    • 城市、城镇、郊区、村庄等
  • 提供以下数据存储实现

    • Doctrine ORM

安装

  1. 使用composer安装捆绑包

    composer require jjs/geonames-bundle:*

    或直接将其添加到您的composer.json文件中

    {
        require: {
            "jjs/geonames-bundle": "*"
        }
    }
  2. 将捆绑包添加到您的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 以获取正确的获取函数拼写。

比较函数

在此阶段,您可以使用以下函数
检查值
... 是否等于比较值(字符串和整数)使用 =equalequals
... 是否小于或等于比较值(整数)使用 <=
... 是否大于或等于比较值(整数)使用 >=
... 是否包含比较值(字符串)使用 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