예제 #1
0
 public function testLoad()
 {
     $model = new AreaPosition();
     $value = ['area' => '神奇的香格里拉', 'position_name' => '山里', 'latitude' => 1234.81239, 'longtitude' => 1239.12];
     $model->load(['AreaPosition' => $value]);
     $attributes = $model->attributes;
     $this->specify('load succedded', function () use($value, $attributes) {
         $this->assertEquals($value['area'], $attributes['area']);
     });
 }
예제 #2
0
 /**
  * This command create new records of city air qualities.
  */
 public function actionUpdateCoordinate($obscure = false)
 {
     $rows = (new \yii\db\Query())->select(['area', 'position_name'])->distinct()->from('air_quality')->all();
     //以Geocoding服务为例,地理编码的请求url,参数待填
     $url = "http://api.map.baidu.com/geocoder/v2/?address=%s&city=%s&output=%s&ak=%s&sn=%s";
     $urlObscure = "http://api.map.baidu.com/geocoder/v2/?address=%s&output=%s&ak=%s&sn=%s";
     //get请求uri前缀
     $uri = '/geocoder/v2/';
     //地理编码的请求output参数
     $output = 'json';
     foreach ($rows as $row) {
         if ($obscure) {
             $row['latitude'] = 0;
         }
         $model = AreaPosition::findOne($row);
         if ($model == null || $obscure) {
             if ($obscure) {
                 if ($model == null) {
                     continue;
                 }
             } else {
                 $model = new AreaPosition();
                 $model->load(['AreaPosition' => $row]);
             }
             //地理编码的请求中address参数
             $address = $model->position_name;
             $city = $model->area;
             //构造请求串数组
             echo "\nAddress: " . $address . "|City: " . $city . "\n";
             if ($obscure) {
                 $querystring_arrays = array('address' => $city . $address, 'output' => $output, 'ak' => $this->ak);
             } else {
                 $querystring_arrays = array('address' => $address, 'city' => $city, 'output' => $output, 'ak' => $this->ak);
             }
             //调用sn计算函数,默认get请求
             $sn = $this->caculateAKSN($this->ak, $this->sk, $uri, $querystring_arrays);
             //请求参数中有中文、特殊字符等需要进行urlencode,确保请求串与sn对应
             if ($obscure) {
                 $target = sprintf($urlObscure, urlencode($city . $address), $output, $this->ak, $sn);
             } else {
                 $target = sprintf($url, urlencode($address), urlencode($city), $output, $this->ak, $sn);
             }
             $response = $this->queryJSONData($target);
             if ($response == null) {
                 continue;
             }
             var_dump($response);
             if (array_key_exists("status", $response) && 1 == $response['status']) {
                 echo "!! NO data for the position\n";
                 $model->latitude = 0;
                 $model->longtitude = 0;
                 $this->saveModel($model);
                 continue;
             }
             $location = $response['location'];
             $model->latitude = $location['lat'];
             $model->longtitude = $location['lng'];
             $this->saveModel($model);
         } else {
             echo "\nRecord already existed";
         }
     }
 }