/**
* 定位文件
* 创建人:雨中磐石(rainrock)
*/
//jssdk回调过来的
js.jssdkcall = function(bo){
js.dw.start();//开始定位
}
var openfrom = '';
function initApp(){
js.dw.start();
}
js.dw = {
//开始定位
init:function(isgzh){
var dws = navigator.userAgent;
this.ISAPP = dws.indexOf('XINHUOA')>0;
if(dws.indexOf('REIMPLAT')>0 || this.ISAPP)return;
if(openfrom=='nppandroid' || openfrom=='nppios')return;
if(isgzh==1){
js.jssdkwxgzh();
}else{
js.jssdkwixin();
}
},
dwbool:false,
dwtimeer:false,
ondwcall:function(){},
ondwstart:function(){},
ondwerr:function(){},
successbo:false,
ondwwait:function(){return false},
start:function(){
if(this.dwbool)return;
this.successbo = false;
this.chaoshi();
this.ondwstart(js.jssdkstate);
if(js.jssdkstate != 1 || this.ISAPP){
this.htmldingw(0);
}else{
this.wxdingw();
}
},
//定位等待
wait:function(msg){
var bo = this.ondwwait(msg);
if(!bo)js.msg('wait',msg);
},
chaoshi:function(){
clearTimeout(this.dwtimeer);
this.dwtimeer = setTimeout(function(){
var msg = '定位超时,请重新定位';
js.msg('msg', msg);
js.dw.ondwerr(msg);
js.jssdkstate = 2;
js.dw.dwbool=false;
},20*1000);
},
clearchao:function(){
clearTimeout(this.dwtimeer);
this.dwbool = false;
},
//html5定位
htmldingw:function(lx){
var msg;
if(appobj1('startLocation','appbacklocation')){
this.wait('原生app定位中...');
this.dwbool = true;
return;
}
if(window['api'] && api.startLocation){
js.msg();
this.dwbool = true;
if(api.systemType=='ios'){
this.wait(''+api.systemType+'APP定位中...');
api.startLocation({},function(ret,err){
js.dw.appLocationSuc(ret,err);
});
return;
}else if(lx==0){ //这个是旧版的app里弃用了
this.wait(''+api.systemType+'百度地图定位中...');
if(!this.baiduLocation)this.baiduLocation = api.require('baiduLocation');
if(this.baiduLocation){
this.baiduLocation.startLocation({
autoStop: false
}, function(ret, err) {
js.dw.baiduLocationSuc(ret,err);
});
}else{
if(!this.bmLocation)this.bmLocation = api.require('bmLocation');
if(this.bmLocation){
this.bmLocation.configManager({
coordinateType:'BMK09LL',accuracy:'hight_accuracy'
});
this.bmLocation.singleLocation({reGeocode:false},function(ret,err){
var dtes = {};
dtes.status = ret.status;
if(ret.status){
dtes.longitude = ret.location.longitude;
dtes.latitude = ret.location.latitude;
}
js.dw.baiduLocationSuc(dtes,err);
js.dw.bmLocation.stopLocation();
});
}
}
return;
}
}
if(this.ISAPP)return;
if(!navigator.geolocation){
msg = '不支持浏览器定位';
js.msg('msg',msg);
this.clearchao();
js.dw.ondwerr(msg);
}else{
this.liulqdw();
}
},
liulqdw:function(){
this.wait('浏览器定位中...');
var dwrand = sessionStorage.getItem('dwrand');
if(dwrand){
sessionStorage.setItem('dwrand', '');
this.wait('跳转定位获取中...');
$.ajax({
url:'api.php?m=kaoqin&a=dwget&dwrand='+dwrand+'',
dataType:'json',
success:function(ret){
if(ret.success && ret.data){
js.dw.showPosition({coords:ret.data});
}else{
js.dw.showcuowu('跳转定位错误:'+ret.msg);
}
},
error:function(){
js.dw.showcuowu('跳转定位错误');
}
});
return;
}
if(HOST=='127.0.0.1'){this.showPosition({coords:{latitude:24.51036967,longitude:118.178837299,accuracy:100}});return;}//本地虚拟定位
navigator.geolocation.getCurrentPosition(this.showPosition,this.showError,{
enableHighAccuracy: true,
timeout: 10000,
maximumAge: 3000
});
},
//微信定位
wxdingw:function(){
var msg = '微信定位中...';
if(js.isqywx)msg='企业微信定位中...';
this.wait(msg);
wx.getLocation({
type: 'gcj02',
success: function (res,err){
js.dw.dwsuccess(res,err);
},
error:function(){
js.jssdkstate = 2;
js.dw.dwbool=false;
js.dw.start();
}
});
},
appLocationSuc:function(ret,err){
if(ret.status){
if(!ret.accuracy)ret.accuracy = 200;
this.dwsuccess(ret);
}else{
this.dwshibai(err.msg);
}
},
baiduLocationSuc:function(ret,err){
if(ret.status && ret.latitude){
this.wait('百度定位成功,获取位置信息...');
if(!ret.accuracy)ret.accuracy = 200;
this.translate(ret.latitude, ret.longitude, ret.accuracy, 3);
}else{
this.dwshibai('定位失败,检查是否给APP开定位权限');
}
},
dwshibai:function(msg){
this.clearchao();
js.setmsg('');
js.msg('msg', msg);
this.ondwerr(msg);
},
dwsuccess:function(res){
this.wait('定位成功,获取位置信息...');
this.clearchao();
var lat = parseFloat(res.latitude); // 纬度,浮点数,范围为90 ~ -90
var lng = parseFloat(res.longitude); // 经度,浮点数,范围为180 ~ -180。
var jid = parseFloat(res.accuracy); // 位置精度
var address = res.address;
if(address){
js.msg('none');
res.addressinfo = address+'(精确'+js.float(jid,1)+'米)';
res.latitude = lat;
res.longitude = lng;
res.accuracy = jid;
this.ondwcall(res);
}else{
this.geocoder(lat,lng, jid);
}
},
showError:function (error){
js.dw.clearchao();
js.setmsg('');
var msg='无法定位';
switch(error.code){
case error.PERMISSION_DENIED:
msg="用户拒绝对获取地理位置的请求。"
break;
case error.POSITION_UNAVAILABLE:
msg="位置信息是不可用的。"
break;
case error.TIMEOUT:
msg="请求用户地理位置超时。"
break;
case error.UNKNOWN_ERROR:
msg="未知错误。"
break;
}
clearTimeout(js.dw.timeerrbo)
if(NOWURL.substr(0,5)!='https')msg+='必须使用https访问';
js.dw.timeerrbo = setTimeout(function(){
if(!js.dw.successbo){
js.dw.showErrorss(msg);
}else{
js.msg();
}
},1000);
},
showcuowu:function(msg){
js.msg('msg', msg);
js.dw.ondwerr(msg);
},
showErrorss:function(msg){
js.confirm('点确定继续去定位('+msg+')', function(jg){
if(jg=='yes'){
setTimeout('js.dw.gotodingw()',100);
}else{
js.dw.showcuowu(msg);
}
});
},
gotodingw:function(){
js.alert('跳转在定位中,可点确定读取定位内容。','', function(){
js.reload();
});
var dwrand = js.getrand();
$.ajax({
url:'api.php?m=kaoqin&a=dwurl&dwrand='+dwrand+'',
dataType:'json',
success:function(ret){
var da = ret.data;
sessionStorage.setItem('dwrand', da.dwrand);
js.location(da.url);
}
});
},
showPosition:function(position){
js.dw.successbo = true;
js.tanclose('confirm');
clearTimeout(js.dw.timeerrbo);
js.msg();
var res = position.coords;
var latitude = res.latitude;
var longitude = res.longitude;
var accuracy = parseFloat(res.accuracy);
js.dw.translate(latitude,longitude, accuracy, 1);
},
//坐标转化type1原始
translate:function(lat, lng,juli, type){
$.ajax({
url:'api.php?m=kaoqin&a=translate',
data:{
lat:lat,
lng:lng,
type:type
},
dataType:'json',
success:function(ret){
if(ret.status==0){
js.dw.dwsuccess({
latitude:ret.locations[0].lat,
longitude:ret.locations[0].lng,
accuracy:juli
});
}else{
js.dw.dwshibai('无法转化坐标('+lat+','+lng+'),'+type+'
'+ret.status+','+ret.message+'');
}
},
error:function(){
js.dw.dwshibai('无法转化坐标'+type+'');
}
});
},
//搜索位置,2024-07-19改
geocoder:function(lat,lng, jid){
var errcan = {
latitude:lat,
longitude:lng,
accuracy:jid,
address:'未知位置',
addressinfo:'定位成功未知位置',
detail:'未知位置'
}
$.ajax({
url:'api.php?m=kaoqin&a=gcoder',
data:{
lat:lat,
lng:lng,
},
dataType:'json',
success:function(ret){
if(ret.status==0 && ret.result){
var result = ret.result,addressinfo;
var address= result.formatted_addresses.recommend;
if(!address)address = result.address;
addressinfo = ''+address;
if(jid>0)addressinfo+='(精确'+js.float(jid,1)+'米)';
js.msg();
errcan.address = address;
errcan.addressinfo = addressinfo;
errcan.detail = result;
js.dw.ondwcall(errcan);
}else{
if(ret.message)js.msg('msg', ret.status+':'+ret.message);
js.dw.ondwcall(errcan);
}
},
error:function(){
js.dw.ondwcall(errcan);
}
});
},
//计算距离,old
matrix:function(lat,lng, kqarr, funs){
var fromstr = ''+lat+','+lng+'',tostr='';
for(var i=0;i0)tostr+=';';
tostr +=''+kqarr[i].location_x+','+kqarr[i].location_y+'';
}
if(fromstr && tostr){
$.ajax({
url:'api.php?m=kaoqin&a=matrix',
data:{
fromstr:fromstr,
tostr:tostr,
},
dataType:'json',
success:function(ret){
if(ret.status==0){
var rows = ret.result.rows[0].elements;
for(var j=0;j