【问题标题】:Random Real US Address within a specific zip code, county or area特定邮政编码、县或地区内的随机真实美国地址
【发布时间】:2012-11-09 01:48:24
【问题描述】:

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

我在这里找到了一个好主意:https://stackoverflow.com/a/12289969/1778542

在此基础上,我会选择市中心的经纬度坐标,找出郊区的坐标来创建一个平面,然后在平面内随机生成经纬度坐标,然后将它们反馈给谷歌来近似它的地址.提出的一个问题(我尽量避免)是谷歌不使用经过验证的地址,而是使用近似值。

有没有人提示在哪里可以找到这样的生成器或使用 GMaps 的更时尚的方式?

谢谢一百万!

GP

【问题讨论】:

    标签: google-maps random maps street-address random-sample


    【解决方案1】:

    我在我的一个 Laravel Seeder 中使用此代码,它会在罗马尼亚获得一个随机街道名称,前提是您为其提供位置区域和城镇, 它的工作原理是获取该区域的纬度和经度,然后随机添加 2 公里的半径,然后向 google 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;
    }   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 2011-10-20
      相关资源
      最近更新 更多