簡體   English   中英

Google Maps API v2-在地圖中查找最近/最近的標記/點嗎?

[英]Google maps api v2 - find closest/nearest markers/points in the map ?

嗨,我正在嘗試做似乎幾乎不可能的事情……我正在嘗試獲取三個最近的位置標記對象……這甚至可能嗎? ..它不一定是100%准確的...但是至少要做一些...我在網上發現並嘗試過的操作是:

function find_closest_marker( lat1, lon1 ) {

        for(var y = 1; y < 4; y++){

            var pi = Math.PI;
            var R = 6371; //equatorial radius

            for(var i=0;i<markers.length; i++ ) {
                //alert(markers.length);
                var closest = -1;
                var distances = [];

                var lat2 = points[i].lat().toFixed(5);
                var lon2 = points[i].lng().toFixed(5);

                var chLat = lat2-lat1;
                var chLon = lon2-lon1;


                var dLat = chLat*(pi/180);
                var dLon = chLon*(pi/180);

                var rLat1 = lat1*(pi/180);
                var rLat2 = lat2*(pi/180);

                var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
                        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(rLat1) * Math.cos(rLat2); 
                var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
                var d = R * c;


                distances[i] = d;
                if ( closest == -1 || d < distances[closest] ) {
                    closest = i;
                }
            }

            var markerImg = "";
            if(markers[closest].markerType == 1){
                markerImg="/files/billeder/../Templates/Designs/Ideal2011/images/Map/dot_red.jpg"
            } else if(markers[closest].markerType == 2){
                markerImg="/files/billeder/../Templates/Designs/Ideal2011/images/Map/dot_lblue.jpg"
            }else if(markers[closest].markerType == 3){
                markerImg="/files/billeder/../Templates/Designs/Ideal2011/images/Map/dot_dblue.jpg"
            }else if(markers[closest].markerType == 4){
                markerImg="/files/billeder/../Templates/Designs/Ideal2011/images/Map/dot_green.jpg"
            }

            $('.nearestPlace'+y).html(
                "<img src='"+markerImg+"' alt='"+markers[closest].address+"' />"+
                "<div class='CompanyName'><strong>"+markers[closest].title+"</strong></div>"+
                markers[closest].address+"<br/>"+
                markers[closest].postby+"<br/>"+
                "Tlf.: "+markers[closest].phone+"<br/>"+
                markers[closest].fax+
                markers[closest].web+
                markers[closest].email
            );
            //markers.pop(markers[closest]);
            //points.pop(points[closest]);
            //markers[closest] = "";
            //points[closest]= "";
            //alert(closest);
            //markers.slice(closest,closest+1);
            //points.slice(closest,closest+1);
            //alert(markers[closest].title)
            delete markers[closest];
            delete points[closest]
        }
    }

您如何從代碼中的一些注釋中看到我嘗試了許多不同的東西! 他們似乎都不適合我! 它給出第一個位置(甚至不正確的位置),然后中斷,第二個和第三個不執行任何操作...

任何人都可以看到錯誤嗎? 或者甚至更好地知道或可以編寫代碼以獲取所需的功能?

lat1,lon1-當前點!

我在不大的區域有300個標記,因此腳本不難找到3個最近的標記。

如果您遍歷標記,則可以在每個標記上調用此方法,然后將結果存儲在可以對數組進行排序的數組中。 這將是一項昂貴的操作...

    /**
     * This will give you the distance in kilometers between 2 positions
     *
     * @param lat1 - The first positions latitude
     * @param lng2 - The first positions longitude
     * @param lat2 - The second positions latitide
     * @param lng2 - The second positions longitude
     *
     * @return int- The distance in kilometers between the 2 places
     */
    distanceFrom : function(lat1,lng1, lat2, lng2) {
        var R = 6371; // km
        var dLat = this._toRad((lat2-lat1));
        var dLon = this._toRad((lng2-lng1));
        var lat1 = this._toRad(lat1);
        var lat2 = this._toRad(lat2);

        var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
                Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
        var d = R * c;

        return d;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM