先说实现过程和效果!!!
1、客户下单,将客户下单时所在的经纬度存到数据库
2、商家接单,将商家打开App时所在的经纬度保存!
3、根据以上两个经纬度,计算两者之间的距离,并显示(list组件),商家可以看到订单距离他多远
1、客户下单,将客户下单时所在的经纬度存到数据库
2、商家接单,将商家打开App时所在的经纬度保存!
3、根据以上两个经纬度,计算两者之间的距离,并显示(list组件),商家可以看到订单距离他多远
4、Data需要增加一个计算列
过程详解:
1、首先利用插件获取商家所在的经纬度
2、获取到订单中,客户下单时的经纬度(数据库中)
3、以上两个经纬度进行计算
详细解说:
1、在js文件头引入百度地图插件和谷歌地图插件
define(function(require) {
var $ = require("jquery");
var justep = require("$UI/system/lib/justep");
require("cordova!cordova-plugin-geolocation");
require("cordova!com.justep.cordova.plugin.baidulocation");
2、在适当的事件中获取到用户的经纬度,并将经纬度数据保存到baasData中
// 获取商家位置方法
Model.prototype.addressLoad = function(event) {
var locationData = this.comp('locationData');
var successCallback = function(pos) {
var lng = pos.coords.longitude;
var lat = pos.coords.latitude;
locationData.setValue("curLng", lng);
locationData.setValue("curLat", lat);
locationData.saveData();
};
var errorCallback = function(e) {
justep.Util.hint("获取位置失败,暂时使用您的默认地址", {
"type" : "danger",
"delay" : 2000
});
};
navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
};
3、将用户的经纬度和订单中保存的经纬度进行计算
说明:订单中客户的经纬度,是下单用户在下单的时候,用插件获取到经纬度保存到数据库中
// 计算距离的方法
Model.prototype.distancer = function(row) {
var locationData = this.comp('locationData');
var merchantData = this.comp('merchantData');
// 获取您现在所在的经纬度
var lat1 = locationData.val("curLat");
var lng1 = locationData.val("curLng");
// 获取订单所在的经纬度
var lat2 = merchantData.val("curLat");
var lng2 = merchantData.val("curLng");
var R = 6378137.0;
function Rad(d) {
return d * Math.PI / 180.0;// 经纬度转换成三角函数中度分表形式。
}
// 计算距离
function GetDistance(lat1, lng1, lat2, lng2) {
var radLat1 = Rad(lat1);
var radLat2 = Rad(lat2);
var a = radLat1 - radLat2;
var b = Rad(lng1) - Rad(lng2);
var s = 2 * R * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
var s1 = Math.round(s) / 1000;
var s2 = s1.toFixed(2);
return s2;
}
return GetDistance(lat1, lng1, lat2, lng2) + "km";
};