我有一组json数据,它们有商店名称,store_lattitude和store_longitude。我希望按照离用户当前位置更近的顺序对商店进行排序。
以下是示例JSON数据:
[{"id":"1","store_name":"Nilgiris","store_address":"QWE","store_latitude":"12.929328","store_longitude":"77.605117"},
{"id":"2","store_name":"WallMart","store_address":"ABC","store_latitude":"12.979024","store_longitude":"77.611141"},
{"id":"3","store_name":"Green Mart","store_address":"XYZ","store_latitude":"12.961398","store_longitude":"77.553128"}]
感谢任何帮助。 Thnaks。
答案 0 :(得分:1)
您可以将用户和位置的latl循环到一个根据Haversine公式计算距离的函数:
在您的控制器中,加载数据后:
angular.forEach(results, function(s) {
store['dist'] = getDistanceInM(user_lat, user_lon, store['store_latitude'], store['store_longitude']);
})
这些功能可以在您的控制器中或在服务中:
var getDistanceInM = function(lat1, lon1, lat2, lon2) {
var R = 6371;
var dLat = deg2rad(lat2 - lat1);
var dLon = deg2rad(lon2 - lon1);
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon / 2)
* Math.sin(dLon / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c * 1000;
return parseInt(d, 10);
};
var deg2rad = function(deg) {
return deg * (Math.PI / 180);
};
在您看来:
<ion-item ng-repeat="item in data.stores | orderBy:'dist'">
答案 1 :(得分:0)
你还可以利用google api中已有的内容:
https://developers.google.com/maps/documentation/distance-matrix/start
额外的好处是你可以获得各种距离测量,甚至可以带来旅行时间。它还解析了文本的位置。如果您可以谷歌搜索您不需要提供长或纬度的位置。每天2500 reqs是免费的。