我目前正在开发一款采用英特尔XDK的移动应用程序(在后台它最终是Cordova,这就是我将Cordova列入头衔的原因。)
通过Ajax请求,我得到了一些地址,并且通过这些地址,我想计算它们与用户当前位置之间的距离。
所以,我得到地址,我转换它们,然后我就有所作为。
但实际上,没有任何工作!
function codeAddress(id, addresse) {
geocoder.geocode( { 'address': addresse}, function(results, status) {
if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
setTimeout(function(){}, 100);
}
console.log(id);
console.log(addresse);
//document.addEventListener("intel.xdk.device.ready",function(){
if (navigator.geolocation)
{
if (status == google.maps.GeocoderStatus.OK)
{
navigator.geolocation.getCurrentPosition(function(position) {
addressEvent = results[0].geometry.location;
var pos = {
lat: position.coords.latitude,
lng: position.coords.longitude
};
var position = new google.maps.LatLng(pos.lat, pos.lng)
var resultat = google.maps.geometry.spherical.computeDistanceBetween(addressEvent, position);
console.log(resultat);
console.log(addressEvent);
console.log(pos);
console.log(position);
var convert = Math.floor(resultat);
var finalConvert = convert + " m";
var distance = document.createElement('span');
distance.innerHTML = finalConvert;
distance.className = "geo";
document.getElementsByClassName('meta-info-geo')[id].appendChild(distance);
}, function() {
handleLocationError(true, infoWindow);
});
}
}
//},false);
});
}
在console.log(id),console.log(地址)中,我有结果!
实际上我得到4个ID和4个地址。
我检查了我在StackOverFlow上可以找到的所有主题,我通常在//中添加addEventListener中的行,但它什么都没改变。
有人知道如何改变吗?
ps:当然,cordova geoloc在构建中并且授予了权限!
编辑:我的目标是Android 4.0分钟和iOS 5.1.1。我正在使用SDK。
答案 0 :(得分:1)
地理定位经常无法按照人们期望的方式发挥作用,原因有多种here和here。
您可以使用" Hello,Cordova"来试验地理位置。 XDK中的示例应用以及available on GitHub。尝试在各种设备上使用它来查看工作原理。推动"罚款"按钮,用于启动单个地理位置调用以获得"罚款"位置和推动"粗糙"按钮,为#"粗略"发起单个地理位置调用地点。推动"观看"按钮,用于启动对一系列地理数据点的请求(通过先按下其中一个按钮设置为粗略或精细)。
您在“模拟”标签中获得的行为显着与您在真实设备上获得的行为不同。设备类型(Android,iOS等)以及该设备的版本将影响您的结果;设备制造商和您的位置(内部或外部)将影响您的结果。不要以为调用geo API会始终为您提供即时可靠的数据,地理定位硬件无法正常工作......事实上,您不能假设您甚至可以获得有效的结果!请参阅我之前在帖子中指出的两个链接,原因如下。