如何使用PHP获取Google Streetview静态API所需的heading朝向参数
实现方法
不需要依赖前端JavaScript,纯PHP可以通过两步完成heading参数的计算:
1. 调用Google街景元数据接口获取拍摄点坐标
你可以直接调用Google街景静态API配套的元数据接口,该接口无请求配额消耗,仅返回街景基础信息,请求格式如下:
https://maps.googleapis.com/maps/api/streetview/metadata?location=目标坐标&key=GOOGLE_API_KEY
接口返回的location.lat、location.lng字段即为街景拍摄车的实际拍摄坐标,该坐标和你通过GeoCode拿到的建筑坐标存在一定偏移,是计算朝向的基础参数。
2. 基于两点坐标计算heading方位角
heading的定义为从拍摄点指向目标建筑的方位角,正北为0度,范围0-360度,对应PHP计算逻辑如下:
function getHeading(float $cameraLat, float $cameraLng, float $targetLat, float $targetLng): float { // 角度转弧度 $cameraLatRad = deg2rad($cameraLat); $cameraLngRad = deg2rad($cameraLng); $targetLatRad = deg2rad($targetLat); $targetLngRad = deg2rad($targetLng); $deltaLng = $targetLngRad - $cameraLngRad; $y = sin($deltaLng) * cos($targetLatRad); $x = cos($cameraLatRad) * sin($targetLatRad) - sin($cameraLatRad) * cos($targetLatRad) * cos($deltaLng); $heading = rad2deg(atan2($y, $x)); // 转换为0-360度的正角度 return fmod($heading + 360, 360); }
将计算得到的heading值直接代入你原有的街景静态图请求参数即可,就能得到朝向目标建筑的街景图像。
注意事项
- 若街景元数据接口返回
status不为OK,说明该坐标附近没有可用街景资源,需要提前做异常捕获处理 - 若存在树木、路牌遮挡的情况,可在计算得到的heading基础上微调±10到20度,适配实际展示需求
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

