二八中医
二八中医
  • 发布:2017-09-15 16:06
  • 更新:2017-09-15 16:06
  • 阅读:8468

支持多种经纬度的定位和导航工具

分类:MUI

经纬度分类
经纬度转换方法
唤起导航
实例展示
经纬度分类
常用的有gps原始坐标、百度墨卡、高德GCJ-02等 概念就不解释了,各种科普贴

经纬度转换方法
高德中有两种方法实现经纬度转换,需要注意的是高德只支持其他坐标到高德坐标的单向转换

1.JS-API

this.LngLat = function(lng, lat) {
return new AMap.LngLat(lng, lat)
}
this.convertFrom = function(pointArray, type, successCB) {
for(var i in pointArray) {
pointArray[i] = this.LngLat(pointArray[i].longitude, pointArray[i].latitude)
}
AMap.convertFrom(pointArray, type, function(status, result) {
if(status === 'complete' && result.locations && result.locations.length > 0) {
for(var j in result.locations) {
result.locations[j] = {
longitude: result.locations[j].getLng(),
latitude: result.locations[j].getLat()
}
}
successCB(result.locations)
} else {
lpage.toast('坐标转化失败')
}
})
};
actionscript
2.WEBSERVER

this.convertCoordinates = function(point, successCB, errorCB, options) {  
            /**  
             * 5+暂时不支持高德地图的坐标转换功能,暂时采用webservice服务进行转换  
             */  
            //                //restapi.amap.com/v3/assistant/coordinate/convert?locations=116.481499,39.990475&coordsys=gps&output=xml&key=<用户的key>  
            $.get('https://restapi.amap.com/v3/assistant/coordinate/convert?locations=' + point.longitude + ',' + point.latitude + '&coordsys=' + options.coordsType + '&output=json&key=' + LContext.MAP_WEBAPI_KEY,  
                function(data) {  
                    data = JSON.parse(data);  
                    if(data.status == 0) {  
                        lpage.toast('地址转换失败' + data.info);  
                        errorCB && errorCB();  
                        if(options && options.showWaiting) {  
                            lpage.closeWaiting();  
                        }  
                        return;  
                    }  
                    var idx = data.locations.indexOf(',', 0);  
                    var coords = {  
                        longitude: data.locations.substring(0, idx),  
                        latitude: data.locations.substr(idx, data.locations.length)  
                    };  
                    successCB && successCB(coords);  
                    if(options && options.showWaiting) {  
                        lpage.closeWaiting();  
                    }  
                }, 'JSON');  
            //                plus.maps.Map.convertCoordinates(new plus.maps.Point(point.longitude, point.latitude), options, function(event) {  
            //                    var point = event.coord; // 转换后的坐标值  
            //                    var coordType = event.coordType; // 转换后的坐标系类型  
            //                    console.log('convertCoordinates  Success:' + JSON.stringify(event));  
            //                    if(successCB) {  
            //                        successCB(point);  
            //                    }  
            //                }, function(e) {  
            //                    console.log('Failed:' + JSON.stringify(e));  
            //                });  
        }  

kotlin
唤起导航
和在自己的地图内做导航相比,我觉得直接调用高德的导航页面会更好,这样不会影响自己的页面逻辑,同时对于真的需要导航的用户来说,导航的体验也会更好。

1.在WEB环境中,可以直接调用高德的服务 /**

     *  调用系统地图进行导航  
     * @param dst  目的地经纬度,要求使用WGS-84坐标系值,即GPS获取的值。  
     * @param  describe 目的地描述  
     * @param  loc  用户当前位置信息 lpage.user.location,要求使用WGS-84坐标系值,即GPS获取的值。  
     */  
    this.openSysMap = function(dst, describe, loc) {  
        if(!loc || !loc.coords) {  
            lpage.toast('请先定位当前位置!')  
            return;  
        }  
        var src = loc.coords;  
        var amapurl = 'https://uri.amap.com/navigation?from=' + src.longitude + ',' + src.latitude + ',' + loc.address + '&to=' + dst.longitude +  
            ',' + dst.latitude + ',' + describe + '&mode=car&policy=1&src=mypage&coordinate=gaode&callnative=0'  
        window.open(amapurl);  
    }  

kotlin
2.在App环境中,可以调用系统服务

/**

  • 调用系统地图进行导航
  • @param dst 目的地经纬度,要求使用WGS-84坐标系值,即GPS获取的值。
  • @param describe 目的地描述
  • @param loc 起点坐标,要求使用WGS-84坐标系值,即GPS获取的值。
    */
    this.openSysMap = function(dst, describe, location) {
    console.log('调用系统地图 ---openSysMap() ...');
    if(!location || !location.coords) {
    lpage.toast('请先定位当前位置!')
    return;
    }
    var src = location.coords;
    var srcWgs84enc = GPS.gcj_decrypt_exact(src.latitude, src.longitude);
    var dstWgs84enc = GPS.gcj_decrypt_exact(dst.latitude, dst.longitude);
    var dstination = new plus.maps.Point(dstWgs84enc.lon, dstWgs84enc.lat);
    var srcLocation = new plus.maps.Point(srcWgs84enc.lon, srcWgs84enc.lat);
    // 调用系统地图显示
    plus.maps.openSysMap(dstination, describe, srcLocation);
    }
    php
    实例展示
    经纬度转换定位导航工具

本文链接:https://blog.betweenfriends.cn/post/multitypegpslocatenavigator.html

1 关注 分享
t***@qq.com

要回复文章请先登录注册