imcity-tech/laravel-geonames

[分支] 该包允许将 GeoNames 数据库与 Laravel 应用程序集成。

0.3.7 2022-03-27 13:51 UTC

This package is not auto-updated.

Last update: 2024-09-23 01:33:43 UTC


README

当前处于开发中。它可能会收到可能导致破坏性更改的更新。不建议在生产环境中使用。

该包允许将 GeoNames 数据库与 Laravel 应用程序集成。

📚 描述

此包是 nevadskiy/laravel-geonames 的分支。

该包对于依赖于地理数据的应用程序非常有用。

默认情况下,该包提供 5 个表:continentscountriesdivisionscitiestranslations,并使用来自 geonames 服务的数据进行填充。

它还允许保持数据 最新,因此该包将获取来自 geonames 服务的所有每日修改,并使用它们来同步您的数据库。

您还可以设置该包,只同步属于特定国家的数据,禁用不必要的表,设置最小人口过滤器,并使用您自己的自定义模型。

翻译由 imcity-tech/laravel-translatable 提供。

🔌 安装

composer require imcity-tech/laravel-geonames

✅ 要求

  • Laravel 9.0 或更高版本
  • PHP 8.0 或更高版本

🔨 使用

默认结构和行为

  • 迁移数据库
php artisan migrate
  • 运行插入过程
php artisan geonames:insert

它将下载并将 GeoNames 数据集插入到您的数据库中。

请注意,插入过程可能需要一些时间。平均大约需要 15 分钟(不含下载时间)。

安排更新

如果想要接收 GeoNames 的每日更新,请将以下代码添加到您的控制台内核(app/Console/Kernel.php)中。

protected function schedule(Schedule $schedule)
{
    $schedule->command('geonames:update')->dailyAt('4:00');
}

注意,时间指定为 UTC 时区,因此如果您的服务器在另一个时区运行,则需要根据它进行转换。

配置自定义结构

如果您想根据您的需求配置包,您需要首先发布包配置。

php artisan vendor:publish --tag=geonames-config

指定源

您可以选择以下之一作为种子数据源:SOURCE_ALL_COUNTRIESSOURCE_SINGLE_COUNTRYSOURCE_ONLY_CITIES

默认为 SOURCE_ALL_COUNTRIES,表示从 allCountries.zip 文件中获取数据。它包含所有 4 个模型(continentscountriesdivisionscities)。您可以在 geonames 配置文件中配置 过滤器 来指定要填充的国家和 最小人口

SOURCE_SINGLE_COUNTRY 源用于从基于国家的文件(例如 US.zip)获取数据。使用此源不会填充 continents 表。您可以在 geonames 配置文件中指定 国家过滤器 来指定要填充的国家(或多个国家)。

使用 SOURCE_ONLY_CITIES 数据源从基于城市的文件中获取数据(例如,cities500.zip)。此数据源类型下仅提供 cities 表。您可以指定 最小人口过滤器 来指示按人口获取哪个文件。还可以使用国家过滤器来筛选只属于特定国家的城市。

指定过滤器

默认情况下,有几种过滤器可以用来过滤要导入的数据。

国家过滤器

countries 过滤器用于筛选仅属于特定国家(或多个国家)的数据。如果指定了 SOURCE_SINGLE_COUNTRY 数据源,则此过滤器将用于下载基于国家的数据源。默认值为 *,表示允许所有国家。可以指定多个国家,作为 ISO 国家代码数组。

示例

'filters' => [
    'countries' => ['AU', 'US']
]

人口过滤器

population 过滤器用于按指定最小人口筛选城市。如果指定了 SOURCE_ONLY_CITIES 数据源,则此过滤器将用于下载基于城市的数据库。任何从 0 及以上的值都可以使用,但与 SOURCE_ONLY_CITIES 数据源结合使用时,可用值仅为 5001000500015000

示例

'filters' => [
    'population' => 15000
]

覆盖模型

您可能需要自己的模型,具有自己的行为和关系,而不是默认提供的模型。

要覆盖它们,请使用 geonames 配置文件中的 models 键。

如果您不打算使用任何模型,可以将值切换为 false,然后相应的表将不会进行迁移。

例如,大多数应用程序可能不需要大陆模型。

'models' => [
    'continent' => false,
    'country' => App\Models\Country::class,
    'division' => App\Models\Division::class,
    'city' => App\Models\City::class,
],

覆盖迁移

要重命名表或删除不必要的字段,可以发布迁移并在执行迁移命令之前编辑它们。

  • 要发布默认迁移,请使用以下命令
php artisan vendor:publish --tag=geonames-migrations
  • 然后在 geonames 配置文件中将 default_migrations 设置为 false 以禁用默认迁移。
'default_migrations' => false

插入自定义结构

  • 在配置 数据源过滤器 之后,您可以执行迁移命令。它将确定哪些表应该进行迁移,并在数据库中创建它们。
php artisan migrate
  • 然后您可以运行插入命令。
php artisan geonames:insert

重新插入数据集

有时您可能需要删除所有数据并重新插入。为此,将 --reset 选项传递给 geonames:insert 命令。

php artisan geonames:insert --reset

📑 变更日志

有关最近更改的更多信息,请参阅 变更日志

☕ 贡献

有关更多信息,请参阅 贡献指南

🔓 安全性

如果您发现任何安全相关的问题,请通过电子邮件 发送给我 而不是使用问题跟踪器。

📜 许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证