wx.openLocation 显示坐标或中文地址导航页面
wx.openLocation API功能描述:
参数
Object object
属性 类型 默认值 必填 说明
latitude number 是 纬度,范围为-90~90,负数表示南纬。使用 gcj02 国测局坐标系
longitude number 是 经度,范围为-180~180,负数表示西经。使用 gcj02 国测局坐标系
scale number 18 否 缩放比例,范围5~18
name string 否 位置名
address string 否 地址的详细说明
success function 否 接口调用成功的回调函数
fail function 否 接口调用失败的回调函数
complete function 否 接口调用结束的回调函数(调用成功、失败都会执行)
示例代码
wx.getLocation({
type: 'gcj02', //返回可以用于wx.openLocation的经纬度
success (res) {
const latitude = res.latitude
const longitude = res.longitude
wx.openLocation({
latitude,
longitude,
scale: 18
})
}
})
注意要点:
gcj02坐标系是腾讯地图采用的默认坐标系,百度地图采用的BD09坐标系的坐标值需要转换成gcj02坐标值。
通过php转换的方式:
/*格式化楼盘 的地图数据*/
public function _format_map_point($lon, $lat)
{
$bd_lon = $lon;//$val['map_x'];
$bd_lat = $lat;//$val['map_y'];
$X_PI = M_PI * 3000.0 / 180.0;
$x = $bd_lon - 0.0065;
$y = $bd_lat - 0.006;
$z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * $X_PI);
$theta = atan2($y, $x) - 0.000003 * cos($x * $X_PI);
$val[0] = $z * cos($theta);
$val[1] = $z * sin($theta);
return $val;
}
因为本文的中文地址是通过百度地图api转换得到经纬坐标值。
public function doPageMapparse(){
global $_GPC, $_W;
$address = $_GPC['addr'];
$address = .$address;
$url = 'http://api.map.baidu.com/geocoder/v2/?output=json&ak=4ec99009d7b21fd45a244c&address='.$address;
$json = file_get_contents($url);
$ret = json_decode($json, true);
if($ret['result']['location']){
$points = $this->_format_map_point($ret['result']['location']['lng'], $ret['result']['location']['lat']);
}
$this->result(0, 'success', array('result'=>$points));
}
接口返回经度和纬度符合gcj02的坐标值;
小程序前端显示地图导航页面:
/**显示地图导航js
* addr = 坐标时直接显示,等于中文地址需要调用接口解析出坐标
* addr 中文地址,name=显示的标题*/
showMapLocation: function (addr, name) {
var app = getApp();
if (app.kbtools.isnull(addr)) {
return false;
}
if (addr.indexOf(",") > 0) {
var point = addr.split(',');
wx.openLocation({
latitude: parseFloat(point[1]),
longitude: parseFloat(point[0]),
name: name,
scale: 16
})
} else { /**解析地址 换去坐标 */
app.util.request({
'url': 'entry/wxapp/mapparse',
//接口地址把中文地址通过百度地图api获得gcj02坐标
data: { addr: addr },
success(res) {
if (!app.kbtools.isnull(res.data.data.result)) {
wx.openLocation({
latitude: parseFloat(res.data.data.result[1]),
longitude: parseFloat(res.data.data.result[0]),
name: name,
scale: 16
})
}
}
});
}
/** */
},
好了,本文内容全部完毕,感谢您的阅读,希望对您有所帮助!