经纬度分类
经纬度转换方法
唤起导航
实例展示
经纬度分类
常用的有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
0 个评论
要回复文章请先登录或注册