这里是文章模块栏目内容页
wx.openLocation 显示坐标或中文地址导航页面

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
            })
          }
        }
      });
    }
    /** */
  },

好了,本文内容全部完毕,感谢您的阅读,希望对您有所帮助!


更多栏目