高德地圖定位并匹配距離最近經(jīng)銷商

對移動端H5定位安聘,基于瀏覽器的定位,準確獲取經(jīng)緯度,計算最近距離

定位插件

image.png

選用多個定位插件出爹,最終決定使用高德地圖的插件庄吼,在頁面中引用http://webapi.amap.com/maps?v=1.4.4&key=您申請的key值 即可,然后再根據(jù)需求調(diào)用對應的函數(shù)严就,我所開發(fā)的項目使用API的是AMap.Geolocation獲取當前瀏覽器的定位总寻,AMap.CitySearch獲取當前的城市信息。

頁面結(jié)構


表單結(jié)構

image.png
<li class="province-city">
            <select id="ddlProvince" name="ddlProvince" class="ddlProvince" title="省/00" >
                <option value="0">選擇省份</option>
            </select>
            <em class="select-icon select-province"></em>
            <select id="ddlCity" name="ddlCity" class="ddlCity">
                <option value="0">選擇城市</option>
            </select>
            <em class="select-icon"></em>
        </li>
        <li>
            <span>經(jīng)銷商</span>
<select id="agency" name="agency" >
   <option value="0">選擇經(jīng)銷商</option>
</select>
            <em class="select-icon"></em>
  
       </li>

處理好的省市經(jīng)銷商數(shù)據(jù)


image.png

表單數(shù)據(jù)綁定邏輯


image.png

定位函數(shù)

獲取當前瀏覽器的定位經(jīng)緯度

var D_province, D_city, D_agency;//對應的省市經(jīng)銷商
var clat, clng;//當前瀏覽器的經(jīng)緯度
var geolocation;//地理定位函數(shù)
//加載地圖梢为,調(diào)用瀏覽器定位服務
var map = new AMap.Map('container', {
    resizeEnable: true
});
map.plugin('AMap.Geolocation', function () {
    geolocation = new AMap.Geolocation({
        enableHighAccuracy: true,//是否使用高精度定位渐行,默認:true
        timeout: 10000,          //超過10秒后停止定位,默認:無窮大
        buttonOffset: new AMap.Pixel(10, 20),//定位按鈕與設置的椭靠位置的偏移量祟印,默認:Pixel(10, 20)
        zoomToAccuracy: true,      //定位成功后調(diào)整地圖視野范圍使定位位置及精度范圍視野內(nèi)可見,默認:false
        buttonPosition: 'RB'
    });
    map.addControl(geolocation);
    geolocation.getCurrentPosition();
    AMap.event.addListener(geolocation, 'complete', onComplete);//返回定位信息
    AMap.event.addListener(geolocation, 'error', onError);      //返回定位出錯信息
});
//解析定位結(jié)果
function onComplete(data) {
    clat = data.position.getLat();
    clng = data.position.getLng();
    console.log(data);
    //alert("瀏覽器定位成功");
}
 
//解析定位錯誤信息
function onError(data) {
    clat = 39.95751;
    clng = 116.33762;
    //alert("瀏覽器定位失敗");
}

獲取到定位的經(jīng)緯度后粟害,獲取當前定位的省份和城市蕴忆,并且對于省份和城市進行對比,分別對省市select賦值悲幅,然后再查詢當前省市下的經(jīng)銷商列表套鹅,計算每個經(jīng)銷商距當前位置的距離,通過兩點坐標計算距離汰具,添加經(jīng)銷商的距離屬性芋哭,然后通過冒泡排序函數(shù),對經(jīng)銷商列表基于距離由小及大排序郁副,取第一個值减牺,便是距離最近的經(jīng)銷商,然后再賦值到select,最后完場了省市定位及最近經(jīng)銷商的定位存谎。

var citysearch = new AMap.CitySearch();
//自動獲取用戶IP拔疚,返回當前城市
citysearch.getLocalCity(function (status, result) {
    if (status === 'complete' && result.info === 'OK') {
        if (result && result.city && result.bounds) {
            console.log(result.city, result.province, result.bounds, result);
            //result.city = "武漢市";
            //result.province = "湖北省";
            if (result.city == result.province) {//北京市等四大直轄市
                D_province = result.city.substr(0, 2);
                D_city = result.city;
            } else {//其他的省市
                D_province = result.province.substring(0, result.province.length - 1);
                D_city = result.city.substring(0, result.province.length - 1);
            }
            //對應的省市自動獲取
            $('#ddlProvince option:contains("' + D_province + '")').attr('selected', 'true');
            $('#ddlProvince').addClass('changed');
            ProvinceData.BindCity('ddlProvince', 'ddlCity');
            $('#ddlCity option:contains("' + D_city + '")').attr('selected', 'true');
            $('#ddlCity').addClass('changed');
            ProvinceData.BindAgency('ddlProvince', 'ddlCity', 'agency');
            //查詢省市對應的經(jīng)銷商列表,并計算距離
            for (var i = 0; i < Dealer.length; i++) {
                if (Dealer[i].dealer_name == D_province) {
                    var cityList = Dealer[i].city;
                    //console.log(cityList)
                    for (var n = 0; n < cityList.length; n++) {
                        if (cityList[n].dealer_name == D_city) {
                            var dealerList = cityList[n].dealer;
                            //計算兩個坐標點之間的距離
                            for (var m = 0; m < dealerList.length; m++) {
                                dealerList[m].distance = Math.sqrt(Math.pow(dealerList[m].dealer_lat - clat, 2) + Math.pow(dealerList[m].dealer_lng - clng, 2));
                            }
                            //根據(jù)距離對經(jīng)銷商排序由近及遠
                            function compare(property) {
                                return function (a, b) {
                                    var value1 = a[property];
                                    var value2 = b[property];
                                    return value1 - value2;
                                }
                            }
                            console.log(dealerList.sort(compare('distance')), dealerList[0]);
                            //獲取最近的經(jīng)銷商
                            D_agency = dealerList[0].dealer_name;
                            $('#agency option:contains("' + D_agency + '")').attr('selected', 'true');
                            $('#agency').addClass('changed');
                        }
 
                    }
                }
            }
        }
    } else {
        console.log('定位失敗');
    }
 
})

源碼 https://github.com/Aimee1608/dwDemo

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末既荚,一起剝皮案震驚了整個濱河市稚失,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恰聘,老刑警劉巖句各,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晴叨,居然都是意外死亡凿宾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門兼蕊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來初厚,“玉大人,你說我怎么就攤上這事孙技〔蹋” “怎么了排作?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長亚情。 經(jīng)常有香客問我妄痪,道長,這世上最難降的妖魔是什么楞件? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任拌夏,我火速辦了婚禮,結(jié)果婚禮上履因,老公的妹妹穿的比我還像新娘障簿。我一直安慰自己,他們只是感情好栅迄,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布站故。 她就那樣靜靜地躺著,像睡著了一般毅舆。 火紅的嫁衣襯著肌膚如雪西篓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天憋活,我揣著相機與錄音岂津,去河邊找鬼。 笑死悦即,一個胖子當著我的面吹牛吮成,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辜梳,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼粱甫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了作瞄?” 一聲冷哼從身側(cè)響起茶宵,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宗挥,沒想到半個月后乌庶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡契耿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年瞒大,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宵喂。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡糠赦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锅棕,到底是詐尸還是另有隱情拙泽,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布裸燎,位于F島的核電站顾瞻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏德绿。R本人自食惡果不足惜荷荤,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望移稳。 院中可真熱鬧蕴纳,春花似錦、人聲如沸个粱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽都许。三九已至稻薇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胶征,已是汗流浹背塞椎。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留睛低,地道東北人案狠。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像钱雷,于是被迫代替她去往敵國和親莺戒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容