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

4
为了一个学校项目,我正在尝试模拟学生在我们城镇的居住情况,由于隐私问题,官方数据显然是不可获取的。我开始寻找可以按邮政编码、半径或县工作的生成器,但我还没有找到任何(商业或免费)的生成器。我希望它是免费的,但我可能能够为许可证获得一些资金。如果我找到了随机的生成器,它们不能被限制在 ZIP 码或城市以产生真实的地址。
我发现了一个好主意在这里:https://dev59.com/R2jWa4cB1Zd3GeqPnRy9#12289969 基于此,我将选择市中心的经纬度坐标,找出郊区的坐标来创建一个平面,然后在平面内随机生成经度和纬度坐标,并反馈给 Google 来近似计算地址。Raised raised 的一个担忧是谷歌没有使用验证过的地址,而是近似值。
有没有人知道哪里可以找到这样的生成器或更优雅地使用 GMaps?
非常感谢!
GP
1个回答

0

我在我的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;
}   

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接