高德地圖 JS API 學習摘要1

1、安裝

準備-入門-教程-地圖 JS API

2、使用

1、在頁面添加 JS API 的入口腳本標簽,并將其中「您申請的key值」替換為您剛剛申請的 key;

<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.12&key=您申請的key值"></script> 

2、添加div標簽作為地圖容器,同時為該div指定id屬性;

<div id="container"></div> 

3、為地圖容器指定高度、寬度;

#container {width:300px; height: 180px; }  

4、進行移動端開發時,請在head內添加viewport設置,以達到最佳的繪制性能;

<meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 

JSAPI 1.3 開始完全支持 HTTPS 協議,如需使用安全協議,替換 JS API 的入口腳本URL中的httphttps即可。隨著 ChromeiOS 等相繼限制非安全域的定位請求,我們建議您升級網站到HTTPS協議,并使用HTTPS協議加載 JS API。

3、API

創建地圖
<div id="container"></div>
<script src="https://webapi.amap.com/maps?v=1.4.12&key=您申請的key值"></script>
<script>
    var map = new AMap.Map('container', {
        resizeEnable: true, //是否監控地圖容器尺寸變化
        zoom:11, //初始化地圖層級
        center: [116.397428, 39.90923] //初始化地圖中心點
    });
</script>
地圖加載完成

地圖加載完成事件 map.on("complete")

map.on("complete", function(){
    log.success("地圖加載完成!");  
});
地圖的銷毀 map.destroy()
document.querySelector("#destroy-btn").onclick = destroyMap;
function destroyMap() {
    map && map.destroy();
    log.info("地圖已銷毀");
}
異步加載地圖

JSAPI引用地址url加上callback參數,異步調用JSAPI接口

var url = 'https://webapi.amap.com/maps?v=1.4.12&key=您申請的key值&callback=onApiLoaded';
var jsapi = document.createElement('script');
jsapi.charset = 'utf-8';
jsapi.src = url;
document.head.appendChild(jsapi);

// callback = onApiLoaded
function onApiLoaded(){
    var map = new AMap.Map('container', {
        center: [117.000923, 36.675807],
        zoom: 6
    });
    map.plugin(["AMap.ToolBar"], function() {
        map.addControl(new AMap.ToolBar());
    });
}
插件的使用

JS API 提供了眾多的插件功能,這些功能不會主動隨著 JSAPI 主體資源下發,需要引入之后才能使用這些插件的功能。

  1. 異步加載插件

異步加載指的是在 JS API 加載完成之后,在需要使用到某個插件的時候,通過AMap.plugin方法按需引入插件,在plugin回調之后使用插件功能。

var map = new AMap.Map('container',{
    zoom:12,
    center:[116.39,39.9]
});
AMap.plugin('AMap.ToolBar',function(){//異步加載插件
    var toolbar = new AMap.ToolBar();
    map.addControl(toolbar);
});
  1. 異步加載多個插件

AMap.plugin的第一個參數使用數組即可同時加載引入多個插件。

AMap.plugin(['AMap.ToolBar','AMap.Driving'],function(){//異步同時加載多個插件
    var toolbar = new AMap.ToolBar();
    map.addControl(toolbar);
    var driving = new AMap.Driving();//駕車路線規劃
    driving.search(/*參數*/)
});
  1. 同步加載插件

可以在 JS API入口地址中添加plugin參數,將需要使用的一個或者多個插件的名稱作為參數即可&plugin=AMap.ToolBar。 需要加載多個插件時,plugin參數中的插件名稱之間以逗號分割。&plugin=AMap.ToolBar,AMap.Driving"

<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.7&key=您申請的key值&plugin=AMap.ToolBar,AMap.Driving"></script> 
<script type="text/javascript" >
    var map = new AMap.Map('mapContainer',{
        zoom:12,
        center:[116.39,39.9]
    });
    var toolbar = new AMap.ToolBar();
    map.plugin(toolbar);
    var driving = new AMap.Driving();
    driving.search(/*參數*/)
</script>

  1. 插件列表
類名 功能說明
AMap.ElasticMarker 靈活點標記,可以隨著地圖級別改變樣式和大小的 Marker
AMap.ToolBar 工具條,控制地圖的縮放、平移等
AMap.Scale 比例尺,顯示當前地圖中心的比例尺
AMap.OverView 鷹眼,顯示縮略圖
AMap.MapType 圖層切換,用于幾個常用圖層切換顯示
AMap.Geolocation 定位,提供了獲取用戶當前準確位置、所在城市的方法
AMap.AdvancedInfoWindow 高級信息窗體,整合了周邊搜索、路線規劃功能
AMap.Autocomplete 輸入提示,提供了根據關鍵字提示信息的功能
AMap.PlaceSearch 地點搜索服務,提供了關鍵字搜索、周邊搜索、范圍內搜索等功能
AMap.PlaceSearchLayer 搜索結果圖層類,將搜索結果作為圖層展示
AMap.DistrictSearch 行政區查詢服務,提供了根據名稱關鍵字、citycode、adcode 來查詢行政區信息的功能
AMap.LineSearch 公交路線服務,提供公交路線相關信息查詢服務
AMap.StationSearch 公交站點查詢服務,提供途經公交線路、站點位置等信息
AMap.Driving 駕車路線規劃服務,提供按照起、終點進行駕車路線的功能
AMap.TruckDriving 貨車路線規劃
AMap.Transfer 公交路線規劃服務,提供按照起、終點進行公交路線的功能
AMap.Walking 步行路線規劃服務,提供按照起、終點進行步行路線的功能
AMap.Riding 騎行路線規劃服務,提供按照起、終點進行騎行路線的功能
AMap.DragRoute 拖拽導航插件,可拖拽起終點、途經點重新進行路線規劃
AMap.ArrivalRange 公交到達圈,根據起點坐標,時長計算公交出行是否可達及可達范圍
AMap.Geocoder 地理編碼與逆地理編碼服務,提供地址與坐標間的相互轉換
AMap.CitySearch 城市獲取服務,獲取用戶所在城市信息或根據給定IP參數查詢城市信息
AMap.IndoorMap 室內地圖,用于在地圖中顯示室內地圖
AMap.MouseTool 鼠標工具插件
AMap.CircleEditor 圓編輯插件
AMap.PolyEditor 折線、多邊形編輯插件
AMap.MarkerClusterer 點聚合插件
AMap.RangingTool 測距插件,可以用距離或面積測量
AMap.CloudDataLayer 云圖圖層,用于展示云圖信息
AMap.CloudDataSearch 云圖搜索服務,根據關鍵字搜索云圖點信息
AMap.Weather 天氣預報插件,用于獲取未來的天氣信息
AMap.RoadInfoSearch 道路信息查詢,已停止數據更新,反饋信息僅供參考
AMap.Hotspot 熱點插件,地圖熱點已默認開啟,不用手動添加,由Map的 isHotspot 屬性替代
AMap.Heatmap 熱力圖插件
中英文地圖切換
var map = new AMap.Map('container', {
    resizeEnable: true,
    center: [121.498586, 31.239637],
    lang: "en" //可選值:en,zh_en, zh_cn
});

map.setLang('zh_cn'); // 中文
map.setLang('zh_en'); // 中英文對照
獲取地圖中心點/級別
  • map.getCenter()獲取地圖中心點
  • map.getZoom()獲取地圖縮放級別
設置地圖中心點/級別
  • setCenter():改變地圖中心點
  • setZoom():改變地圖級別
  • setZoomAndCenter() :同時設置地圖層級與中心點
map.setZoom(zoom); //設置地圖層級 zoom 整數
map.setCenter([lng, lat]); //設置地圖中心點 [經度、緯度] 保持6位小數點 toFixed(6)
map.setZoomAndCenter(zoom, [lng, lat]); //同時設置地圖層級與中心點
綁定地圖移動與縮放事件
map.on('moveend', callback);
map.on('zoomend', callback);
獲取地圖當前行政區
<script type="text/javascript" src='https://a.amap.com/jsapi_demos/static/demo-center/js/prety-json.js'></script>
<p><span id="map-city"></span></p>
map.getCity( function(info){
    console.log(info)
    var node = new PrettyJSON.view.Node({
        el: document.querySelector("#map-city"),
        data: info
    });
});    

使用map.getCity()獲取地圖當前中心所在行政區。回調函數的參數info對象擁有四個屬性,province省份、city城市、citycode城市編碼、district區。

new PrettyJSON.view.Node()接受一個參數對象渲染視圖,el指定渲染的元素,data指定渲染的數據

設置地圖當前行政區

map.setCity(xx)可以通過中文城市名、adcode、citycode等設置地圖的中心點。(只支持中國境內)

設置/獲取地圖顯示范圍

通過map.getBounds()、map.setBounds()設置/獲取地圖顯示范圍

var bounds = map.getBounds();
document.querySelector("#ne").innerText = bounds.northeast.toString();
document.querySelector("#sw").innerText = bounds.southwest.toString();

var mybounds = new AMap.Bounds([116.319665, 39.855919], [116.468324,39.9756]);
map.setBounds(mybounds);
限制地圖顯示范圍
var limitBounds = map.getLimitBounds();// 獲取地圖限制區域信息
limitBounds.northeast.toString();
limitBounds.southwest.toString();
var bounds = map.getBounds(); // 獲取顯示范圍
map.setLimitBounds(bounds); // 限制地圖顯示范圍
map.clearLimitBounds(); // 取消限制
// 取消之后map.getLimitBounds()將獲取不到值
地圖的平移

除了鼠標、觸摸交互,通過map.panBy()map.panTo()也可以移動地圖

 var map = new AMap.Map('container', {
    resizeEnable: true,
    zoom: 13,
    center: [116.397428, 39.90923]
});

// 使用AMap.event.addDomListener監聽DOM事件
AMap.event.addDomListener(document.getElementById('piexBtn'), 'click', function() {
    map.panBy(50, 100);// 平移多少 兩個都是正值就是往左上平移
});
AMap.event.addDomListener(document.getElementById('pantoBtn'), 'click', function() {
    map.panTo([116.405467, 39.907761]); // 平移到哪去
});
交互控制

通過map.setStatus()修改地圖的可拖拽、可縮放等狀態。

var mapOpts = {
    showIndoorMap: false, // 是否在有矢量底圖的時候自動展示室內地圖,PC默認true,移動端默認false
    resizeEnable: true, //是否監控地圖容器尺寸變化,默認值為false
    dragEnable: false, // 地圖是否可通過鼠標拖拽平移,默認為true
    keyboardEnable: false, //地圖是否可通過鍵盤控制,默認為true
    doubleClickZoom: false, // 地圖是否可通過雙擊鼠標放大地圖,默認為true
    zoomEnable: false, //地圖是否可縮放,默認值為true
    rotateEnable: false // 地圖是否可旋轉,3D視圖默認為true,2D視圖默認false
}

var map = new AMap.Map('container', mapOpts);

   //通過map.setStatus方法動態設置地圖狀態
map.setStatus({
    dragEnable: true,
    keyboardEnable: true,
    doubleClickZoom: true,
    zoomEnable: true,
    rotateEnable: true
});
獲取鼠標點擊經緯度

給地圖綁定click事`件,獲取鼠標位置的經緯度坐標。

  • e.lnglat.getLng():獲取經度
  • e.lnglat.getLat():獲取緯度
map.on('click', function(e) {
    document.getElementById("lnglat").value = e.lnglat.getLng() + ',' + e.lnglat.getLat()
});
注冊事件

Map、覆蓋物等常用類,我們推薦直接使用這些類的對象的on、off成員方法來實現事件的簡單綁定和移除

  • map.on : 注冊事件,給Map或者覆蓋物對象注冊事件
  • map.off :移除事件綁定

使用AMap.event命名空間

  • AMap.event.addDomListener :注冊DOM對象事件
  • AMap.event.addListener: 注冊對象事件
  • AMap.event.addListenerOnce: 注冊對象事件 但事件只會被觸發一次,之后將自動移除
  • AMap.event.removeListener: 刪除監聽事件
  • AMap.event.trigger: 觸發非DOM事件

MapsEvent 對象規范

  • lnglat: 發生事件時光標所在處的經緯度坐標。
  • pixel: 發生事件時光標所在處的像素坐標。
  • type: 事件類型。
  • target: 發生事件的目標對象。
輸入自動提示 選擇自動定位
// 引入Autocomplete插件
<script src="https://webapi.amap.com/maps?v=1.4.12&key=您申請的key值&plugin=AMap.Autocomplete"></script>

<input type="text"  id="tipinput">
var auto = new AMap.Autocomplete({
    input: "tipinput"
});

AMap.event.addListener(auto, "select", select);//注冊監聽,當選中某條記錄時會觸發
function select(e) {
    if (e.poi && e.poi.location) {
        map.setZoom(15);
        map.setCenter(e.poi.location);
    }
}
// 事件對象e擁有poi和type兩個屬性
select事件的事件對象
地圖的熱點

通過isHotspot開啟地圖的熱點功能,并以

var map = new AMap.Map('container', {
    resizeEnable: true,
    center: [116.397428, 39.90923],
    zoom: 13,
    isHotspot: true
});
var placeSearch = new AMap.PlaceSearch();  //構造地點查詢類
var infoWindow=new AMap.AdvancedInfoWindow({}); //高級信息窗體,整合了周邊搜索、路線規劃功能
map.on('hotspotover', function(result) {
    placeSearch.getDetails(result.id, function(status, result) {
        if (status === 'complete' && result.info === 'OK') {
            placeSearch_CallBack(result);
        }
    });
});
//回調函數
function placeSearch_CallBack(data) { //infoWindow.open(map, result.lnglat);
    var poiArr = data.poiList.pois;
    var location = poiArr[0].location;
    infoWindow.setContent(createContent(poiArr[0]));
    infoWindow.open(map,location);
}
function createContent(poi) {  //信息窗體內容
    var s = [];
    s.push('<div class="info-title">'+poi.name+'</div><div class="info-content">'+"地址:" + poi.address);
    s.push("電話:" + poi.tel);
    s.push("類型:" + poi.type);
    s.push('<div>');
    return s.join("<br>"); // 返回一個html字符串
}
設置鼠標樣式

使用Map.setDefaultCursor設置地圖默認的鼠標樣式,用于自定義地圖等場景。

map.setDefaultCursor("pointer");

// "default"  默認箭頭
// "pointer"  指針
// "move"  可移動表示
// "crosshair"  十字線
// ...
覆蓋物的添加與移除
  • new AMap.Marker() :構造標記
  • new AMap.Circle(): 構造矢量圓形
  • map.add(mark / circle): 添加標記
  • map.remove(mark / circle): 移除標記(與上接受相同的參數才能移除)
  • map.setFitView():有時候地圖上可視化元素較多,我們需要地圖調整合適的縮放等級和中心點,以保證所有元素都顯示其中時,我們可以調用setFitView()方法,以實現該效果。
var map = new AMap.Map('container', {
    resizeEnable: true,
    zoom:11,
    center: [116.397428, 39.90923]
});
    // 構造點標記
var marker = new AMap.Marker({
    icon: "https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png", // 標記點圖片
    position: [116.405467, 39.907761] // 標記點位置
});
// 構造矢量圓形
var circle = new AMap.Circle({
    center: new AMap.LngLat("116.403322", "39.920255"), // 圓心位置
    radius: 1000,  //半徑
    strokeColor: "#F33",  //線顏色
    strokeOpacity: 1,  //線透明度
    strokeWeight: 3,  //線粗細度
    fillColor: "#ee2200",  //填充顏色
    fillOpacity: 0.35 //填充透明度
});
//事件綁定
document.querySelector("#add-marker").onclick = function() {
    map.add(marker);
    map.setFitView();
}
document.querySelector("#remove-marker").onclick = function() {
    map.remove(marker);
    map.setFitView();
}
document.querySelector("#add-circle").onclick = function() {
    map.add(circle);
    map.setFitView();
}
document.querySelector("#remove-circle").onclick = function() {
    map.remove(circle);
    map.setFitView();
}
圖層的添加與移除
// 構造官方衛星、路網圖層
var satelliteLayer = new AMap.TileLayer.Satellite();
var roadNetLayer =  new AMap.TileLayer.RoadNet();

//批量添加圖層
map.add([satelliteLayer, roadNetLayer]);

//事件綁定
document.querySelector("#add-satellite-layer").onclick = function() {
    map.add(satelliteLayer);
}

document.querySelector("#remove-satellite-layer").onclick = function() {
    map.remove(satelliteLayer);
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容

  • 自定義地圖 指定Map.mapStyle屬性,實現自定義樣式地圖。 使用Map.setMapStyle()方法,加...
    Upcccz閱讀 3,534評論 2 1
  • 高德地圖使用的基礎方法 第一步:申請高德地圖key碼 申請地址:http://lbs.amap.com/dev/k...
    喵星汪汪閱讀 4,416評論 0 7
  • Introduction WARNING: This plugin is best used with RPG M...
    滄笙閱讀 3,789評論 0 21
  • 受不了這種夜里孤寂的清冷 好像支撐自己的信念突然崩塌 好像近視的度數都一下子加深 世界變得模糊起來 世界的不真切讓...
    源靖鄉閱讀 266評論 1 0
  • 之一端午抒懷 讓艾香繞著艾香讓粽餡咬著粽餡從去年的端陽到今年的端陽在外漂泊已有一年的時間 從遙遠的湖南來到了若大的...
    閑不語閱讀 136評論 0 1