AngularJS|基于地理位置(lat,long)对JSON进行排序

AngularJS | Sorting JSON based on geolocation (lat, long)

本文关键字:JSON 排序 long 地理位置 lat AngularJS      更新时间:2023-09-26

尝试根据设备的地理位置对JSON文件进行排序。

JSON文件:

jsonCallback(

        [  
           {  
              "codelocatie":"AL0008",
              "codecontainer":"GAL0008444",
              "gemeente":"Almelo",
              "straatnaam":"Bornerbroeksestraat",
              "omschrijving":"bij Aldi",
              "model":"BG 3000",
              "soort":"GLAS",
              "gps-x":"52.3497120",
              "gps-y":"6.66140500"
           },
           {  
              "codelocatie":"AL0010",
              "codecontainer":"GAL0010005",
              "gemeente":"Almelo",
              "straatnaam":"Bornsestraat 48",
              "omschrijving":"park.pl. Plusmarkt",
              "model":"OG 4000",
              "soort":"GLAS",
              "gps-x":"52.3512100",
              "gps-y":"6.66672100"
           },
           {  
              "codelocatie":"AL0010",
              "codecontainer":"KAL0010003",
              "gemeente":"Almelo",
              "straatnaam":"Bornsestraat 48",
              "omschrijving":"park.pl. Plusmarkt",
              "model":"OG 5000",
              "soort":"KVM",
              "gps-x":"52.3512200",
              "gps-y":"6.66672900"
           },
           {  
              "codelocatie":"AL0010",
              "codecontainer":"KAL0010004",
              "gemeente":"Almelo",
              "straatnaam":"Bornsestraat 48",
              "omschrijving":"park.pl. Plusmarkt",
              "model":"OG 5000",
              "soort":"KVM",
              "gps-x":"52.3512200",
              "gps-y":"6.66672900"
           }
    ]
   );

我将设备的地理位置存储在分区中

这就是我目前获取JSON数据的方式

.controller('afvalbakController' ,['$scope', '$http', 
    function afvalbakController($scope, $http) { 
    $.ajax({
        type : "GET",
        contentType: "application/json; charset=utf-8",
        async: false,
        url : 'http://www.lans.ink/TABLE_3.json?callback=?',
        dataType: "jsonp",
        jsonpCallback: 'jsonCallback',
         success: function(data) {
            $scope.contents = data;
    },
    error: function(e) {
       console.log(e.message);
    }
    })
}])

它目前只抓住第一个,然后是第二个等等。

我希望它按地理位置排序,首先是最近的,但到目前为止运气不佳。这能实现吗?如果是,如何?

在locations数组上执行循环,检查每个点到地理定位点之间的距离并对其进行排序。这里有一个检查2个点之间距离的函数。

function distance(lat1, lon1, lat2, lon2, unit) {
    var radlat1 = Math.PI * lat1/180;
    var radlat2 = Math.PI * lat2/180;
    var radlon1 = Math.PI * lon1/180;
    var radlon2 = Math.PI * lon2/180;
    var theta = lon1-lon2;
    var radtheta = Math.PI * theta/180;
    var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
    dist = Math.acos(dist);
    dist = dist * 180/Math.PI;
    dist = dist * 60 * 1.1515;
    if (unit=="K") { dist = dist * 1.609344; }
    if (unit=="N") { dist = dist * 0.8684; }
    return dist;
}