jjs / geonames-bundle

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

dev-master 2017-11-20 09:42 UTC

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

安装

  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以获取您get函数的正确拼写。

比较函数

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