特定邮政编码、县或地区内的随机真实美国地址



因此,对于学校里的一个项目,我试图模拟学生在我们镇上的居住地点,因为官方数据显然是出于隐私考虑而无法获得的。我开始寻找一款按邮政编码、半径或县工作的发电机,但我一直找不到(商业或免费)。我希望它是免费的,但我可能能够获得一些许可证资金。如果我找到随机生成器,它们就不能局限于一个邮政编码或城市来随机生成真实地址。

我发现了一个好主意:https://stackoverflow.com/a/12289969/1778542

基于此,我会选择市中心的长坐标,找出郊区坐标来创建一个平面,然后在平面内随机生成长坐标,并将其反馈给谷歌,让谷歌对其地址进行近似。有人提出(我尽量避免)的一个担忧是,谷歌不使用经过验证的地址,而是使用近似值。

有人知道在哪里可以找到这样的生成器或使用GMaps的更巧妙的方法吗?

万分感谢!

GP

我在我的一个Laravel Seeder中使用了这个代码,它在罗马尼亚得到了一个随机的街道名称,只要你给它位置区域和城镇,它的工作原理是获取该区域的纬度和经度,然后随机添加2公里的半径,然后向谷歌api发出另一个请求,并从中提取一个随机的街道名称。

我不知道这是否会对你有所帮助,调整这个代码可以生成一个真实的地址,前提是你首先要找到一个好的位置;

这是代码:

protected function getRandomStreetNameFromCity($judet, $city){
$kmRange = 2;
$initalLocation = [];
$randomLocation= [];
$randomKmval = mt_rand(1, $kmRange) / mt_getrandmax();
// Poor Man Lat and Lng 
//Latitude: 1 deg = 110.574 km
//Longitude: 1 deg = 111.320*cos(latitude) km
$guzzelCl = new Client();
$guzelReq = $guzzelCl->request('GET', 'http://maps.googleapis.com/maps/api/geocode/json?address=Romania,'.$judet.','.$city.'&sensor=false', [
'verify' => false,   
]);

if($guzelReq->getStatusCode() == 200){
$arrJson = json_decode($guzelReq->getBody(), true);
while (count($arrJson['results']) <= 0){
$judet= $this->getNewJudet();
$city = $this->getNewOras();
$guzelReq = $guzzelCl->request('GET', 'http://maps.googleapis.com/maps/api/geocode/json?address=Romania,'.$judet.','.$city.'&sensor=false', [
'verify' => false,   
]);
$arrJson = json_decode($guzelReq->getBody(), true);      
}

$initalLocation = $arrJson['results'][0]['geometry']['location'];
}

$plusMinus = $this->generateRandomString(1);

$randomExp = [ 1 => $tempLat = eval("return (1 / (110.574 ".$plusMinus." ".$randomKmval." )+ ".$initalLocation['lat']." );"),
2 => eval('return ('.$initalLocation['lng'].' '.$plusMinus.' 1/111.320*cos($tempLat));'),
];
$guzelReq = $guzzelCl->request('GET', 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.$randomExp[1].','.$randomExp[2], [
'verify' => false,   
]);
return explode(',', json_decode($guzelReq->getBody(), true)['results'][0]['formatted_address'])[0];

}   

protected function getNewJudet(){
//This is a administrative type of location named 'judet' Romania is divided in a number bellow 50 of this  
return array_rand($this->judetOras, 1);
}
protected function getNewOras(){
//This is a Town String
return $this->judetOras[$iterateJud = array_rand($this->judetOras, 1)][array_rand($this->judetOras[$iterateJud], 1)];
}

protected function generateRandomString($length = 10) {
$characters = '-+';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}   

最新更新