获取地理位置接口

  • 首先在wx.config里的jsApiList列表写入getLocation

  • 一般在js里的事件中写入以下,如果希望在页面初始化就执行,可以放入wx.ready

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    wx.getLocation({
    type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
    success: function (res) {
    var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
    var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
    //对经纬度操作,调用百度地图web_api转换百度的经纬度
    var speed = res.speed; // 速度,以米/每秒计
    var accuracy = res.accuracy; // 位置精度
    }
    });

调用百度地图web_api转换百度的经纬度,查看详情

调起微信扫一扫接口

  • 首先在wx.config里的jsApiList列表写入scanQRCode

  • 一般在js里的点击事件中写入以下,如果希望在页面初始化就执行,可以放入wx.ready

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    wx.scanQRCode({
    // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
    needResult: 1,
    // 可以指定扫二维码还是一维码,默认二者都有
    scanType: ["qrCode","barCode"],
    success: function (res) {
    // 当needResult 为 1 时,扫码返回的结果
    var result = res.resultStr;
    // 判断扫描的是一维还是二维
    if (result.indexOf(",") >= 0) {
    var tempArray = result.split(',');
    $("#shuibiaonumber").textbox("setValue",tempArray[1]);
    }else{
    $("#shuibiaonumber").textbox("setValue",result);
    }
    },
    fail: function(error) {
    alert("获取二维码失败,请稍后再试!");
    }
    });

调起微信内置地图查看位置接口

  • 首先在wx.config里的jsApiList列表写入openLocation

  • 一般在js里的点击事件中写入以下,如果希望在页面初始化就执行,可以放入wx.ready

    1
    2
    3
    4
    5
    6
    7
    8
    9
     	wx.openLocation({
    latitude: latitude, // 纬度,浮点数,范围为90 ~ -90
    longitude: longitude, // 经度,浮点数,范围为180 ~ -180。
    name:'水表位置', // 位置名
    address: '', // 地址详情说明
    scale: 17, // 地图缩放级别,整形值,范围从1~28。默认为最大
    infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
    });

  • 坐标转换的自定义接口类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    /**
    * 各地图API坐标转换;
    * WGS84坐标系:国际上通用的坐标系;
    * GCJ02坐标系:即火星坐标系。
    * BD-09: 百度坐标系
    */
    public class PositionUtil {

    public static double pi = 3.1415926535897932384626;
    public static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    public static double a = 6378245.0;
    public static double ee = 0.00669342162296594323;

    public static double transformLat(double x, double y) {
    double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
    ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;
    ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
    return ret;
    }

    public static double transformLon(double x, double y) {
    double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
    ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;
    ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;
    return ret;
    }
    public static double[] transform(double lat, double lon) {
    if (outOfChina(lat, lon)) {
    return new double[]{lat,lon};
    }
    double dLat = transformLat(lon - 105.0, lat - 35.0);
    double dLon = transformLon(lon - 105.0, lat - 35.0);
    double radLat = lat / 180.0 * pi;
    double magic = Math.sin(radLat);
    magic = 1 - ee * magic * magic;
    double sqrtMagic = Math.sqrt(magic);
    dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
    dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
    double mgLat = lat + dLat;
    double mgLon = lon + dLon;
    return new double[]{mgLat,mgLon};
    }
    /**
    * 判断是否在中国
    * @param lat
    * @param lon
    * @return
    */
    public static boolean outOfChina(double lat, double lon) {
    if (lon < 72.004 || lon > 137.8347)
    return true;
    if (lat < 0.8293 || lat > 55.8271)
    return true;
    return false;
    }
    /**
    * 84 ==》 高德
    * @param lat
    * @param lon
    * @return
    */
    public static double[] gps84_To_Gcj02(double lat, double lon) {
    if (outOfChina(lat, lon)) {
    return new double[]{lat,lon};
    }
    double dLat = transformLat(lon - 105.0, lat - 35.0);
    double dLon = transformLon(lon - 105.0, lat - 35.0);
    double radLat = lat / 180.0 * pi;
    double magic = Math.sin(radLat);
    magic = 1 - ee * magic * magic;
    double sqrtMagic = Math.sqrt(magic);
    dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
    dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
    double mgLat = lat + dLat;
    double mgLon = lon + dLon;
    return new double[]{mgLat, mgLon};
    }

    /**
    * 高德 ==》 84
    * @param lon * @param lat * @return
    * */
    public static double[] gcj02_To_Gps84(double lat, double lon) {
    double[] gps = transform(lat, lon);
    double lontitude = lon * 2 - gps[1];
    double latitude = lat * 2 - gps[0];
    return new double[]{latitude, lontitude};
    }
    /**
    * 高德 == 》 百度
    * @param lat
    * @param lon
    */
    public static double[] gcj02_To_Bd09(double lat, double lon) {
    double x = lon, y = lat;
    double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
    double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
    double tempLon = z * Math.cos(theta) + 0.0065;
    double tempLat = z * Math.sin(theta) + 0.006;
    double[] gps = {tempLat,tempLon};
    return gps;
    }

    /**
    * 百度 == 》 高德
    * @param lat
    * @param lon
    */
    public static double[] bd09_To_Gcj02(double lat, double lon) {
    double x = lon - 0.0065, y = lat - 0.006;
    double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
    double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
    double tempLon = z * Math.cos(theta);
    double tempLat = z * Math.sin(theta);
    double[] gps = {tempLat,tempLon};
    return gps;
    }

    /**
    * 84 == 》 百度
    * @param lat
    * @param lon
    * @return
    */
    public static double[] gps84_To_bd09(double lat,double lon){
    double[] gcj02 = gps84_To_Gcj02(lat,lon);
    double[] bd09 = gcj02_To_Bd09(gcj02[0],gcj02[1]);
    return bd09;
    }

    /**
    * 百度 == 》 84
    * @param lat
    * @param lon
    * @return
    */
    public static double[] bd09_To_gps84(double lat,double lon){
    double[] gcj02 = bd09_To_Gcj02(lat, lon);
    double[] gps84 = gcj02_To_Gps84(gcj02[0], gcj02[1]);
    //保留小数点后六位
    gps84[0] = retain6(gps84[0]);
    gps84[1] = retain6(gps84[1]);
    return gps84;
    }

    /*
    * 保留小数点后六位
    * @param num
    * @return
    */
    private static double retain6(double num){
    String result = String .format("%.6f", num);
    return Double.valueOf(result);
    }
    }