2012-11-20 2 views
3

학교 프로젝트 때문에 개인 정보 보호 문제로 인해 공식 데이터가 분명히 제공되지 않아 학생이 우리 마을에 살고있는 곳을 시뮬레이션하려고합니다. 우편 번호, 반경 또는 카운티에서 작동하는 발전기를 찾기 시작했으나 무료 (상업적 또는 무료)를 찾을 수 없었지만 무료로 사용할 수 있도록 자금을 확보 할 수있었습니다. . 임의의 발전기를 발견하면 실제 주소를 임의로 생성하기 위해 우편 번호 나 도시로 국한 될 수 없습니다. 내가 찾은특정 우편 번호, 카운티 또는 지역 내의 임의의 실제 미국 주소

좋은 아이디어는 여기에 있었다 : 그 바탕으로 https://stackoverflow.com/a/12289969/1778542

그때 무작위로 내 긴 \ 위도 좌표를 생성, 비행기를 만들 좌표 외곽을 찾아 도심의 긴 \ 위도 좌표를 선택할 것 비행기를 타면 Google에 주소를 입력하도록 다시 입력하십시오. 제기 된 우려 사항 중 하나는 Google이 확인 된 주소 (오히려 근사치)를 사용하지 않는다는 것입니다.

GMaps를 사용할 수있는 발전기 또는 세련된 방법을 찾을 수있는 힌트가있는 사람이 있습니까?

감사합니다.

GP 내 Laravel 파종기 중 하나에이 코드를 사용

답변

0

는 루마니아에서 임의의 거리 이름은 당신이 그것을 위치 영역과 타운, 그것은 그 지역의 위도와 경도를 얻는 방식으로 작동 을 줄 것을 제공 얻는다 그런 다음 무작위로 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; 
} 
: 여기

코드입니다