imcity-tech / laravel-geonames
[分支] 该包允许将 GeoNames 数据库与 Laravel 应用程序集成。
Requires
- php: ^8.0
- ext-json: *
- ext-zip: *
- imcity-tech/laravel-translatable: ^0.8
- imcity-tech/laravel-uuid: ^0.8
- laravel/framework: ^9.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- orchestra/testbench: ^5.0|^6.0
- phpunit/phpunit: ^8.0
README
当前处于开发中。它可能会收到可能导致破坏性更改的更新。不建议在生产环境中使用。
该包允许将 GeoNames 数据库与 Laravel 应用程序集成。
📚 描述
此包是 nevadskiy/laravel-geonames 的分支。
该包对于依赖于地理数据的应用程序非常有用。
默认情况下,该包提供 5 个表:continents、countries、divisions、cities 和 translations,并使用来自 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_COUNTRIES、SOURCE_SINGLE_COUNTRY 或 SOURCE_ONLY_CITIES。
默认为 SOURCE_ALL_COUNTRIES,表示从 allCountries.zip 文件中获取数据。它包含所有 4 个模型(continents、countries、divisions 和 cities)。您可以在 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 数据源结合使用时,可用值仅为 500、1000、5000 和 15000。
示例
'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)。有关更多信息,请参阅 许可证。