diggingdata / yii2-geonames
Yii2 GeoNames 模块。管理下载和导入 GeoNames 数据。表格的 CRUD UI。
Requires
- yiisoft/yii2: ~2.0.0
This package is auto-updated.
Last update: 2024-09-06 19:28:30 UTC
README
此扩展为 Yii 框架 2.0 提供了 GeoNames 管理解决方案,包含导入脚本和 CRUD UI。
它是基于 https://github.com/yurtesen/geonames 的 Laravel / Lumen / Eloquent Geonames 脚本的改编。
有关许可证信息,请查看 LICENSE 文件。
1. 安装
安装此扩展的首选方式是通过 composer。
运行以下命令之一
composer require --prefer-dist diggindata/yii2-geonames:dev-master
或
php composer.phar require --prefer-dist diggindata/yii2-geonames
或添加
"diggindata/yii2-geonames": "@dev"
到您的 composer.json 的 require 部分,然后运行
composer install
2. 配置
文件夹
我们需要一个文件夹来存储从 geonames.org 下载的数据文件。因此,在您的应用程序基本目录中,创建目录 data
和 data/geonames
。此目录将保存从 geonames.org 下载的数据文件。
应用程序配置
将以下行添加到您的 web 和控制台配置文件中,以启用此模块(config/web.php
和 config/console.php
)
...
'modules' => [
...
'geonames' => [
'class' => 'diggindata\geonames\Module',
],
],
命令行配置
可以配置 yii geonames
命令行命令。
在您的 Yii 应用程序的 config
目录中创建一个 geonames.php
文件。
您可以使用 vendor/diggindata/yii2-geonames/geonames.php.example
文件作为模板。
以下列出了所有可用的配置选项及其默认值。
proxy (类型: string
, 默认: null
)
- 代理服务器的 URL 和端口
proxy_user (类型: string
, 默认: null
)
- 代理用户名
proxy_pass (类型: string
, 默认: null
)
- 代理用户密码
keepTxt (类型: boolean
, 默认: true
)
storagePath (默认: Yii::getAlias('@app/data') . '/geonames'
)
ignoreTables
要忽略导入的表的数组。某些表可能没有被您使用,例如 alternate_names 表。
取消注释它将停止自动导入。
countries (类型: array
, 默认: array()
)
要导入的国家 2 位 ISO 代码数组。如果数组为空,则导入 allCountries
文件。
3. 更新数据库模式
最后,您需要通过应用提供的迁移来更新您的数据库模式。确保您已正确配置了 db
应用程序组件,然后运行以下命令
$ php yii migrate/up --migrationPath=@vendor/diggindata/yii2-geonames/src/migrations
现在我该去哪里?
到此为止,您应该已经安装了 Yii2-geonames。您现在可以打开 geonames
模块。您也应该能够通过控制台命令导入 GeoNames 数据,请参阅下面的 用法
。
用法
下载数据
在您的应用程序文件夹中输入以下命令
yii geonames/geonames/download
这将下载数据文件
[] zip
+--- DE.zip
iso-languagecodes.txt
timeZones.txt
admin1CodesASCII.txt
admin2Codes.txt
countryInfo.txt
DE.zip
featureCodes_en.txt
hierarchy.zip
要更新现有文件,请添加 -u
标志。
导入数据
在您的应用程序文件夹中输入以下命令
yii geonames/geonames/seed
这将把下载的数据插入到相应的数据库表中。
提示
删除重复的邮政编码
-- Add Auto-Increment PK
ALTER TABLE `postalcode`
ADD `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY;
-- Delete duplicates
DELETE t1 FROM postalcode t1
INNER JOIN postalcode t2
WHERE
t1.id > t2.id AND (
t1.countryCode = t2.countryCode AND
t1.postalCode = t2.postalCode AND
t1.placeName = t2.placeName AND
t1.admin1Code = t2.Admin1Code AND
t1.admin2Code = t2.admin2Code AND
t1.admin3Code = t2.admin3Code AND
t1.latitude = t2.latitude AND
t1.longitude = t2.longitude
);
-- Drop Auto-Increment PK
ALTER TABLE postalcode DROP `id`;