【发布时间】:2014-08-18 14:42:15
【问题描述】:
我有一个在 ajax 请求的成功事件中生成的数组。 ajax请求得到的数组是这样的:
数组:
[{
"locationID": "9",
"locationName": "Employee Residence",
"locationLatitude": "34.47189",
"locationLongitude": "-111.9896046999",
}, {
"locationID": "40",
"locationName": "Tron Utah",
"locationLatitude": "33.964212",
"locationLongitude": "-118.3783589999",
}, {
"locationID": "39",
"locationName": "Tron Enterprises",
"locationLatitude": "33.735187",
"locationLongitude": "-111.9579499999",
}]
在此数组上执行计算,该数组提供位置列表及其与用户当前位置的距离。我想按距离对结果进行排序;我的代码如下:
Jquery:
// Success
success: function (data) {
// Obtain Log/Lat
navigator.geolocation.getCurrentPosition(function(position) {
// Obtain Current Position Lat/Lon
glbVar.latitude = position.coords.latitude;
glbVar.longitude = position.coords.longitude;
// Console Log
//console.log('Lat: ' + glbVar.latitude + ' Lon: ' + glbVar.longitude);
// Index Location Return Data
for (var index = 0; index < data.length; index++) {
// Items
var item = data[index];
// Obtain Location Details
varLocationDetails[index] = {"Location Position": {"Longitude": item.locationLongitude, "Latitude": item.locationLatitude, "Location": item.locationName}};
// Each Location Detail
$.each(varLocationDetails[index], function (a,b) {
// Each Locations Distance (From Users Current Location)
varLocationsDistance = calculateDistance(glbVar.longitude, glbVar.latitude, b.Longitude, b.Latitude);
// Determine Locations Radius
if (varLocationsDistance <= varLocationRadius) {
// Determine Distance For Each Location
varDistanceObject[varInt] = {distance: varLocationsDistance, location: b.Location};
// Sort by Distance
//varDistanceObject[varInt].sort(function(a,b) {
// return parseInt(a.distance) - parseInt(b.distance)
//});
// Console Log
//console.log(varDistanceObject[varInt]);
// Obtain Location Name/Distance
varLocation = b.Location;
varDistance = calculateDistance(glbVar.longitude, glbVar.latitude, b.Longitude, b.Latitude);
// Obtain Function Return
functionReturn = '<li>' + varLocation + ': ' + varDistance + 'm</li>';
// Console Log
//console.log(functionReturn);
// Function Return
$('#groups').append(functionReturn);// Append to HTML
};
// Increment
++varInt;
});
}
});
}
距离计算
// Calculate Distance
function calculateDistance(varLongitude, varLatitude, varLon, varLat) {
// Assign Radius
varRadius = 6371;
// Obtain Lon/Lat Values
varLongitude = varLongitude * (Math.PI / 180);
varLatitude = varLatitude * (Math.PI / 180);
varLon = varLon * (Math.PI / 180);
varLat = varLat * (Math.PI / 180);
// 1st X/Y Axis
x0 = varLongitude * varRadius * Math.cos(varLatitude);
y0 = varLatitude * varRadius;
// 2nd X/Y Axis
x1 = varLon * varRadius * Math.cos(varLat);
y1 = varLat * varRadius;
// Calculate Values
dx = x0 - x1;
dy = y0 - y1;
// Determine Distance
d = Math.sqrt((dx * dx) + (dy * dy));
// Function Return
return Math.round(d * 1000);
};
当前结果:
Residence: 0m
Tron Utah: 532559m
Tron Enterprises: 45358m
期望的结果:
Residence: 0m
Tron Enterprises: 45358m
Tron Utah: 532559m
代码的“按距离排序”部分被注释掉,因为它不起作用。任何帮助纠正此代码或提供替代方法表示赞赏。我是一名自学成才的业余网络开发人员。
谢谢,
【问题讨论】:
-
calculateDistance 函数做了什么并返回?
-
已将该部分代码添加到问题中。 :)
-
这样试试 -> jsfiddle.net/adeneo/nkLtj84y/1
标签: php jquery arrays ajax sorting