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']); }); }
/** * 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"; } } }