Google maps api 3 使用街景发布API上载全景图像
当我使用给定的街景API进行上传时Google maps api 3 使用街景发布API上载全景图像,google-maps-api-3,google-street-view,google-streetview-publish,Google Maps Api 3,Google Street View,Google Streetview Publish,当我使用给定的街景API进行上传时 Request an Upload URL $ curl --request POST \ --url 'https://streetviewpublish.googleapis.com/v1/photo:startUpload?key=YOUR_API_KEY' \ --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \ --header 'Co
Request an Upload URL
$ curl --request POST \
--url 'https://streetviewpublish.googleapis.com/v1/photo:startUpload?key=YOUR_API_KEY' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'Content-Length: 0'
Upload the photo bytes to the Upload URL
$ curl --request POST \
--url 'UPLOAD_URL' \
--upload-file 'PATH_TO_FILE' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN'
但是它不起作用
它给我的错误是请求中找不到文件
有谁能帮我一下吗
提前谢谢。要获得上传URL,我用这种方法解决
$cur_upload_url = curl_init();
curl_setopt_array($cur_upload_url, array(
CURLOPT_URL => "https://streetviewpublish.googleapis.com/v1/photo:startUpload?key=XXXXXXXXXXX" ,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "" ,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => array(
"authorization: Bearer $access_token",
"content-type: application/json",
"Content-Length: 0"
),
));
$response = curl_exec($cur_upload_url);
$re = '/https?:\/\/[^"]*/';
$str = $response;
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
$upload_url = $_SESSION['UploadRef'] = $matches[0][0];
echo $upload_url;
将照片字节上载到上载URL
$cmd = exec('curl --request POST \--url "'. addslashes($upload_url) .'" \--upload-file "'.$imagePath.'" \--header "Authorization: Bearer '. addslashes($access_token) .'" ');
然后上传照片的元数据
$curl_meta = curl_init();
curl_setopt_array($curl_meta, array(
CURLOPT_URL => "https://streetviewpublish.googleapis.com/v1/photo?key=XXXXXXXXXXXXXXXX",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => '{
"uploadReference":
{
"uploadUrl": "'.$upload_url.'"
},
"pose":
{
"heading": 95.0,
"latLngPair":
{
"latitude": '.$latVal.',
"longitude": '.$langVal.'
}
},
"captureTime":
{
"seconds": '.$time_stamp.'
},
}',
CURLOPT_HTTPHEADER => array(
"authorization: Bearer $access_token",
"content-type: application/json"
),
));
$response_meta = curl_exec($curl_meta);
$response_json = json_decode($response_meta, true);
// $photoID = $response_json['photoId']['id'];
// echo $photoID;
if(curl_errno($curl_meta)){
// this would be your first hint that something went wrong
die('Couldn\'t send request: ' . curl_error($curl_meta));
}else{
//check the HTTP status code of the request.
$resultStatus = curl_getinfo($curl_meta, CURLINFO_HTTP_CODE);
if($resultStatus != 200){
die('Request failed: HTTP status code: ' . $resultStatus);
}else{
$photoID = $response_json['photoId']['id'];
//insert google publish information into db table
}
}
curl_close($curl_meta);
从这里您将获得照片ID
获取照片iD后发布成功。要获取上传URL,我用这种方法解决
$cur_upload_url = curl_init();
curl_setopt_array($cur_upload_url, array(
CURLOPT_URL => "https://streetviewpublish.googleapis.com/v1/photo:startUpload?key=XXXXXXXXXXX" ,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "" ,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => array(
"authorization: Bearer $access_token",
"content-type: application/json",
"Content-Length: 0"
),
));
$response = curl_exec($cur_upload_url);
$re = '/https?:\/\/[^"]*/';
$str = $response;
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
$upload_url = $_SESSION['UploadRef'] = $matches[0][0];
echo $upload_url;
将照片字节上载到上载URL
$cmd = exec('curl --request POST \--url "'. addslashes($upload_url) .'" \--upload-file "'.$imagePath.'" \--header "Authorization: Bearer '. addslashes($access_token) .'" ');
然后上传照片的元数据
$curl_meta = curl_init();
curl_setopt_array($curl_meta, array(
CURLOPT_URL => "https://streetviewpublish.googleapis.com/v1/photo?key=XXXXXXXXXXXXXXXX",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => '{
"uploadReference":
{
"uploadUrl": "'.$upload_url.'"
},
"pose":
{
"heading": 95.0,
"latLngPair":
{
"latitude": '.$latVal.',
"longitude": '.$langVal.'
}
},
"captureTime":
{
"seconds": '.$time_stamp.'
},
}',
CURLOPT_HTTPHEADER => array(
"authorization: Bearer $access_token",
"content-type: application/json"
),
));
$response_meta = curl_exec($curl_meta);
$response_json = json_decode($response_meta, true);
// $photoID = $response_json['photoId']['id'];
// echo $photoID;
if(curl_errno($curl_meta)){
// this would be your first hint that something went wrong
die('Couldn\'t send request: ' . curl_error($curl_meta));
}else{
//check the HTTP status code of the request.
$resultStatus = curl_getinfo($curl_meta, CURLINFO_HTTP_CODE);
if($resultStatus != 200){
die('Request failed: HTTP status code: ' . $resultStatus);
}else{
$photoID = $response_json['photoId']['id'];
//insert google publish information into db table
}
}
curl_close($curl_meta);
从这里您将获得照片ID
获取照片iD后,发布成功。如果任何人希望通过node.js服务器上传一些选项:
import { exec } from 'child_process';
await new Promise((resolve, reject) => {
const uploadCmd = `curl --request POST \ --url "${uploadUrl}" \ --upload-file "${__dirname}/360.jpg" \ --header "Authorization: Bearer ${accessToken}" `;
exec(uploadCmd, (err, stdout, stderr) => {
if (err) {
// node couldn't execute the command
console.log('err', err);
reject(err);
return false;
}
resolve({stdout, stderr});
console.log(`Succesfully uploaded:
stdout: ${stdout}
stderr: ${stderr}
`);
});
});
不要忘记在
异步
函数中执行等待
部分。如果有人想通过node.js服务器上传一些选项:
import { exec } from 'child_process';
await new Promise((resolve, reject) => {
const uploadCmd = `curl --request POST \ --url "${uploadUrl}" \ --upload-file "${__dirname}/360.jpg" \ --header "Authorization: Bearer ${accessToken}" `;
exec(uploadCmd, (err, stdout, stderr) => {
if (err) {
// node couldn't execute the command
console.log('err', err);
reject(err);
return false;
}
resolve({stdout, stderr});
console.log(`Succesfully uploaded:
stdout: ${stdout}
stderr: ${stderr}
`);
});
});
不要忘记在
async
函数中执行wait
部分。您解决了这个问题吗?你能在上传URL上上传文件吗?是的,兄弟,我解决了。你可以在这里发布一个解决方案。这将是一个很大的帮助。有很多人在寻找这个解决方案。这会让这个问题流行@upendtudid你解决了这个问题吗?你能在上传URL上上传文件吗?是的,兄弟,我解决了。你可以在这里发布一个解决方案。这将是一个很大的帮助。有很多人在寻找这个解决方案。这将使这个问题流行@upendtuonly用于上传照片请求,你有用户exec()函数吗?剩下的就用curl了吗?是的,因为我在使用curl的时候,在那个部分出现了错误,这就是为什么我使用了exec()what$imagePath?映像是否应该在服务器上,或者我们可以从本地计算机发布路径?这包含路径/TO/FILEok我在localhost测试时,没有成功,但当我将代码移动到live server并测试它是否工作时。只需要把文件的绝对路径。您是否仅将realpath($_FILES['file']['name'])用于上传照片请求?您是否具有user exec()函数?剩下的就用curl了吗?是的,因为我在使用curl的时候,在那个部分出现了错误,这就是为什么我使用了exec()what$imagePath?映像是否应该在服务器上,或者我们可以从本地计算机发布路径?这包含路径/TO/FILEok我在localhost测试时,没有成功,但当我将代码移动到live server并测试它是否工作时。只需要把文件的绝对路径。已使用realpath($\u文件['file']['name'])