非 sapiens/realaddressfactory

从谷歌地图创建真实世界的街道地址,用于数据库填充、单元测试或任何其他用途。支持 Laravel 8+ 和 Faker。

v2.0.2 2022-06-04 13:08 UTC

This package is auto-updated.

Last update: 2024-09-04 18:08:02 UTC


README

关于

这个 Laravel 8+ 库创建真实的 100% 真实地址,包含完整的地址详情和经纬度坐标。使用谷歌地图 API,可以使用 RealAddress 类创建这些地址,同时也支持 Faker,您可以在数据库填充中使用 RealAddress!

安装

使用以下命令通过 composer 需求此包

composer require nonsapiens/realaddressfactory --dev 

谷歌地图 API

由于此库依赖于谷歌地图,因此您需要在 .env 文件中定义 Google Maps API 密钥

GOOGLE_MAPS_API_KEY=abcdefghijklmnopqrstuv

如果您没有 API 密钥,请在这里 获取一个

用法

RealAddress 提供了三种生成真实世界地址的方法。每种方法都返回 \Geocoder\Provider\GoogleMaps\Model\GoogleAddress 类,它将谷歌地图 API 响应标准化,便于使用和阅读。默认情况下,RealAddress 支持以下国家的真实地址生成

  • 美国
  • 英国
  • 法国
  • 德国
  • 南非
  • 俄罗斯

您可以通过在 config/realaddress.php 配置文件中添加额外的国家来扩展 RealAddress。此配置文件还定义了在特定国家可以创建哪些城市的地址。可以在以下位置定义更多城市。

Faker

RealAddress 为 Faker 的 \Faker\Generator 类实例提供了额外的功能。下面的代码示例展示了在工厂类中的典型用法

class UserFactory extends Factory
{
    protected $model = User::class;

    public function definition(): array
    {
        /** @var GoogleAddress $address */
        $address = $this->faker->britishAddress();

        return [
            'first_name' => $this->faker->firstName($gender),
            'last_name' => $this->faker->lastName,
            'full_address' => $address->getFormattedAddress(),
		    'latitude' => $address->getCoordinates()->getLatitude(),
		    'longitude' => $address->getCoordinates()->getLongitude()
        ];
    }
}

同样,地址可以被限制为特定的城市: $address = $faker->britishAddress('London');

或者可以随机生成多个定义城市之间的地址: $address = $faker->britishAddress(['London', 'Manchester']);

... 其中这些城市必须在 config/realaddress.php 中定义才能使用。

可用的现成 faker 函数包括

  • britishAddress()
  • usaAddress()
  • germanAddress()
  • frenchAddress()
  • southAfricanAddress()
  • russianAddress()

如果您已扩展 config/realaddress.php 以包含新的国家,则可以使用以下方式生成其地址

	$address = $faker->realAddress('Brazil')						# From any of the defined cities
	$address = $faker->realAddress('Brazil', 'Rio de Janiero');		# For Rio de Janiero only
	$address = $faker->realAddresss('Brazil', ['Rio de Janiero', 'Salvador'])	# Multiple cities

使用外观

使用外观允许您在运行时生成真实世界的地址,并允许一次生成多个地址。下面的代码示例展示了 RealAddress 外观的典型用法

use Nonsapiens\RealAddressFactory\RealAddressFactory;
.
.
.
$johannesburgAddresses          = RealAddress::makeSouthAfrica(20, 'Johannesburg');		# 20 addresses for Johannesburg, South Africa
$frenchAddress                  = RealAddress::makeFrance(1);							# A single address for France
$brazilAddresses                = RealAddress::make(10, 'Brazil');						# 10 addresses for the custom country of Brazil

使用 RealAddress 类

功能上与上面提到的外观提供的相同方法

use Nonsapiens\RealAddressFactory\RealAddressFactory;

$f = new RealAddressFactory();

$southAfricanPoints = $f->makeSouthAfrica(4);                # Generates 4 locations within South Africa's major cities
$capeTownPoints     = $f->makeSouthAfrica(2, 'Cape Town');   # Generates 2 locations from Cape Town, South Africa
$multiPoints        = $f->makeSouthAfrica(3, ['Pretoria', 'Johannesburg']);

添加新的国家或城市

以下示例展示了如何扩展 config/realaddress.php 数组以包含肯尼亚和两个城市

'kenya' => [
		'cities' => [ 'Nairobi', 'Mombasa' ],
	   ],

请注意,此处定义的城市必须能够被谷歌地图识别,并且最好使用其英语变体拼写。

警告

过度使用此工厂可能会导致谷歌阻止您的密钥。过度使用也可能引起 GCP API 费用,具体取决于谷歌地点 API 费用结构。为了防止这种情况,内置了速率限制器,它会阻止过多地向谷歌 API 发送调用。此值可以在 config/realaddress.php 配置文件中进行配置

关于作者

Stuart Steedman 是 YONDER 的首席技术官,YONDER 是一家位于布莱恩斯顿的 GroupM/WPP 南非数字媒体代理机构。他在 PHP 和 Laravel 开发方面有专长,并在技术和开发相关的会议上发表演讲。

Jonathan Maurer 是 YONDER 的资深开发者,YONDER 是一家位于比勒陀利亚的 GroupM/WPP 南非数字媒体代理机构。他专注于 PHP 和 Laravel 开发。