高德地圖(2D)使用方法大全

  • 創(chuàng)建應(yīng)用

進(jìn)入高德控制臺(tái)后,點(diǎn)擊“創(chuàng)建應(yīng)用”按鈕伺帘,進(jìn)入創(chuàng)建應(yīng)用的界面伪嫁。 填上你的應(yīng)用程序的名稱以及選擇應(yīng)用類型就可以了, 最后點(diǎn)擊最下方的 “創(chuàng)建”按鈕张咳,創(chuàng)建應(yīng)用完畢。

創(chuàng)建應(yīng)用1.png

創(chuàng)建應(yīng)用2.png
  • 添加key

在我的應(yīng)用列表中點(diǎn)擊剛才創(chuàng)建的應(yīng)用的右邊的?號(hào)。

添加key1.png

填寫Key名稱考婴、包名以及選擇服務(wù)平臺(tái)。

添加key2.png

獲取發(fā)布版的SHA1(Mac電腦)

1.打開 終端
2.輸入keytool -list -v -keystore  然后把簽名文件直接拖進(jìn)控制臺(tái) 回車
3.輸入簽名的密碼
獲取簽名文件的SHA1.png

獲取debug的SHA1(Mac電腦)

1.打開 AndroidStudio的Terminal
2.輸入keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android 回車
獲取debug的SHA1.png
  • 集成key

高德 Key 配置到項(xiàng)目的 “AndroidManifest.xml” 文件中翘狱,添加如下代碼:

<application
         android:icon="@drawable/icon"
         android:label="@string/app_name" >
         <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="請(qǐng)輸入您的用戶Key"/>
            ……
</application>
根據(jù)需要選擇功能.png

jar包復(fù)制到工程的 libs 目錄下并右鍵 Add As Library

集成.png
  • 定位的使用

聲明Service組件

<service android:name="com.amap.api.location.APSService" />

聲明權(quán)限

<!--用于進(jìn)行網(wǎng)絡(luò)定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!--用于訪問GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!--用于獲取運(yùn)營(yíng)商信息漓糙,用于支持提供運(yùn)營(yíng)商信息相關(guān)的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--用于訪問wifi網(wǎng)絡(luò)信息,wifi信息會(huì)用于進(jìn)行網(wǎng)絡(luò)定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!--用于獲取wifi的獲取權(quán)限昆禽,wifi信息會(huì)用來進(jìn)行網(wǎng)絡(luò)定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <!--用于訪問網(wǎng)絡(luò)蝗蛙,網(wǎng)絡(luò)定位需要上網(wǎng)-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--用于讀取手機(jī)當(dāng)前的狀態(tài)-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!--用于寫入緩存數(shù)據(jù)到擴(kuò)展存儲(chǔ)卡-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!--用于申請(qǐng)調(diào)用A-GPS模塊-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <!--用于申請(qǐng)獲取藍(lán)牙信息進(jìn)行室內(nèi)定位-->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

初始化定位

/**
* 請(qǐng)?jiān)谥骶€程中聲明AMapLocationClient類對(duì)象捡硅,需要傳Context類型的參數(shù)
* 推薦用getApplicationContext()方法獲取全進(jìn)程有效的context
*/

// 聲明AMapLocationClient類對(duì)象
public AMapLocationClient mLocationClient = null;

// 初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//設(shè)置定位回調(diào)監(jiān)聽
mlocationClient.setLocationListener(new AMapLocationListener() {
    @Override
    public void onLocationChanged(AMapLocation amapLocation) {
        if (amapLocation != null) {
            if (amapLocation.getErrorCode() == 0) {
                amapLocation.getLocationType();//獲取當(dāng)前定位結(jié)果來源盗棵,如網(wǎng)絡(luò)定位結(jié)果北发,詳見定位類型表
                amapLocation.getLatitude();//獲取緯度
                amapLocation.getLongitude();//獲取經(jīng)度
                amapLocation.getAccuracy();//獲取精度信息
                amapLocation.getAddress();//地址琳拨,如果option中設(shè)置isNeedAddress為false屯曹,則沒有此結(jié)果,網(wǎng)絡(luò)定位結(jié)果中會(huì)有地址信息僵井,GPS定位不返回地址信息驳棱。
                amapLocation.getCountry();//國家信息
                amapLocation.getProvince();//省信息
                amapLocation.getCity();//城市信息
                amapLocation.getDistrict();//城區(qū)信息
                amapLocation.getStreet();//街道信息
                amapLocation.getStreetNum();//街道門牌號(hào)信息
                amapLocation.getCityCode();//城市編碼
                amapLocation.getAdCode();//地區(qū)編碼
                amapLocation.getAoiName();//獲取當(dāng)前定位點(diǎn)的AOI信息
                amapLocation.getBuildingId();//獲取當(dāng)前室內(nèi)定位的建筑物Id
                amapLocation.getFloor();//獲取當(dāng)前室內(nèi)定位的樓層
                amapLocation.getGpsAccuracyStatus();//獲取GPS的當(dāng)前狀態(tài)
                //獲取定位時(shí)間
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date date = new Date(amapLocation.getTime());
                df.format(date);
            }else {
                //定位失敗時(shí)社搅,可通過ErrCode(錯(cuò)誤碼)信息來確定失敗的原因,errInfo是錯(cuò)誤信息形葬,詳見錯(cuò)誤碼表笙以。
                Log.e("AmapError","location Error, ErrCode:"+ amapLocation.getErrorCode() + ", errInfo:"+ amapLocation.getErrorInfo());
            }
        }
    }
});

配置定位參數(shù)

// 初始化定位參數(shù)對(duì)象
AMapLocationClientOption mLocationOption = new AMapLocationClientOption();

/**
 * 設(shè)置單次定位或連續(xù)定位 不設(shè)置默認(rèn)間隔2秒定位一次
 */

// 設(shè)置定位一次
mLocationOption.setOnceLocation(true);

// 設(shè)置連續(xù)定位,定位間隔,單位毫秒,默認(rèn)為2000ms拆祈,最低1000ms倘感。
mLocationOption.setInterval(1000);


/**
 * 設(shè)置定位模式(三種模式) 不設(shè)置默認(rèn)高精度定位模式
 */

// 高精度定位模式:會(huì)同時(shí)使用網(wǎng)絡(luò)定位和GPS定位,優(yōu)先返回最高精度的定位結(jié)果淤年,以及對(duì)應(yīng)的地址描述信息蜡豹。
mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
// 低功耗定位模式:不會(huì)使用GPS和其他傳感器,只會(huì)使用網(wǎng)絡(luò)定位(Wi-Fi和基站定位)豹休;
mLocationOption.setLocationMode(AMapLocationMode.Battery_Saving);
// 僅用設(shè)備定位模式:不需要連接網(wǎng)絡(luò)桨吊,只使用GPS進(jìn)行定位凤巨,這種模式下不支持室內(nèi)環(huán)境的定位敢茁,需要在室外環(huán)境下才可以成功定位留美。注意,自 v2.9.0 版本之后逢倍,僅設(shè)備定位模式下支持返回地址描述信息景图。
mLocationOption.setLocationMode(AMapLocationMode.Device_Sensors);

給定位客戶端對(duì)象設(shè)置定位參數(shù)并啟動(dòng)定位

mLocationClient.setLocationOption(mLocationOption);
// 啟動(dòng)定位
mLocationClient.startLocation();
  • 2D地圖的使用

聲明權(quán)限

<!--允許程序打開網(wǎng)絡(luò)套接字-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允許程序設(shè)置內(nèi)置sd卡的寫權(quán)限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />   
<!--允許程序獲取網(wǎng)絡(luò)狀態(tài)-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<!--允許程序訪問WiFi網(wǎng)絡(luò)信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<!--允許程序讀寫手機(jī)狀態(tài)和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />     
<!--允許程序訪問CellID或WiFi熱點(diǎn)來獲取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

布局xml文件中添加地圖控件

<com.amap.api.maps.MapView
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

查找控件并對(duì)Map的生命周期進(jìn)行管理

public class MainActivity extends Activity {
    MapView mMapView = null;
    //初始化地圖控制器對(duì)象
    AMap aMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main);
        //獲取地圖控件引用
        mMapView = (MapView) findViewById(R.id.map);
        //在activity執(zhí)行onCreate時(shí)執(zhí)行mMapView.onCreate(savedInstanceState)挚币,創(chuàng)建地圖
        mMapView.onCreate(savedInstanceState);

        if (aMap == null) {
            aMap = mMapView.getMap();
        }
    }
  
    @Override
    protected void onResume() {
        super.onResume();
        //在activity執(zhí)行onResume時(shí)執(zhí)行mMapView.onResume (),重新繪制加載地圖
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //在activity執(zhí)行onPause時(shí)執(zhí)行mMapView.onPause ()慎玖,暫停地圖的繪制
        mMapView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity執(zhí)行onDestroy時(shí)執(zhí)行mMapView.onDestroy()趁怔,銷毀地圖
        mMapView.onDestroy();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity執(zhí)行onSaveInstanceState時(shí)執(zhí)行mMapView.onSaveInstanceState (outState)薪前,保存地圖當(dāng)前的狀態(tài)
        mMapView.onSaveInstanceState(outState);
    } 
}

繪制標(biāo)記

// 聲明標(biāo)記
private Marker locationMarker;

/**
* 往地圖上添加marker
*/
private void addMarker(double latitude,double longitude) {
    
   LatLng latLng = new LatLng(latitude, longitude);

    if (locationMarker != null) {
        // maker已存在直接更換經(jīng)緯度
        locationMarker.setPosition(latLng);
        // 縮放地圖
        aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 20));
        return;
    }

    MarkerOptions markerOptions = new MarkerOptions();
    // 在地圖上標(biāo)記位置的經(jīng)緯度值。必填參數(shù)
    markerOptions.position(latLng);
    // 點(diǎn)標(biāo)記的標(biāo)題
    markerOptions.title("長(zhǎng)按此標(biāo)記");
    // 點(diǎn)標(biāo)記的內(nèi)容
    markerOptions.snippet("可進(jìn)行拖動(dòng)");
    // 點(diǎn)標(biāo)記是否可拖拽
    markerOptions.draggable(true);
    // 點(diǎn)標(biāo)記的錨點(diǎn)(不設(shè)置,默認(rèn)中心點(diǎn)) 根據(jù)圖片調(diào)節(jié)
    markerOptions.anchor(0.5f, 1f);
    // 圖標(biāo)不支持svg
    markerOptions.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.gd_maker)));

    // 地圖上添加標(biāo)記
    locationMarker = aMap.addMarker(markerOptions);
    // 縮放地圖
    // 參數(shù)二:地圖縮放級(jí)別為4-20級(jí)
    aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 20));
}

標(biāo)記拖拽監(jiān)聽

aMap.setOnMarkerDragListener(new AMap.OnMarkerDragListener() {
    @Override
    public void onMarkerDragStart(Marker marker) {

    }

    // 在marker拖動(dòng)過程中回調(diào)此方法, 這個(gè)marker的位置可以通過getPosition()方法返回例诀。
    // 這個(gè)位置可能與拖動(dòng)的之前的marker位置不一樣裁着。
    // marker 被拖動(dòng)的marker對(duì)象二驰。
    @Override
    public void onMarkerDrag(Marker marker) {
                
    }

    // 在marker拖動(dòng)完成后回調(diào)此方法, 這個(gè)marker的位置可以通過getPosition()方法返回。
    // 這個(gè)位置可能與拖動(dòng)的之前的marker位置不一樣桶雀。
    // marker 被拖動(dòng)的marker對(duì)象。
    @Override
    public void onMarkerDragEnd(Marker marker) {
        LatLng latLng = marker.getPosition();
        // 拖拽結(jié)束 更改原來標(biāo)記的經(jīng)緯度
        addMarker(latLng.latitude,latLng.longitude);
    }
});

監(jiān)聽地圖的點(diǎn)擊

aMap.setOnMapClickListener(new AMap.OnMapClickListener() {
    @Override
    public void onMapClick(LatLng latLng) {
        // 地圖 點(diǎn)擊 更換marker的經(jīng)緯度
        addMarker(latLng.latitude,latLng.longitude);
    }
});

根據(jù)經(jīng)緯度查詢相關(guān)信息

// 地理編碼搜索
private GeocodeSearch geocodeSearch;


// 初始化地理編碼搜索
geocodeSearch = new GeocodeSearch(this);
// 設(shè)置地理編碼搜索監(jiān)聽
geocodeSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() {
    @Override
    public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int rCode) {
        // 地理逆編碼回調(diào)函數(shù)
        if (rCode == 1000) {
            //解析result獲取地址描述信息
        } else {
            Log.e("onGeocodeSearchedError", "地理逆編碼查詢失敗敞咧,錯(cuò)誤碼" + rCode);
        }
    }

    @Override
    public void onGeocodeSearched(GeocodeResult geocodeResult, int rCode) {
        // 地理編碼查詢回調(diào)
    }
});

// 根據(jù)經(jīng)緯度逆地理編碼查詢
private void query(LatLng latLng) {

    //逆地理編碼查詢條件:逆地理編碼查詢的地理坐標(biāo)點(diǎn)辜腺、查詢范圍、坐標(biāo)類型测砂。
    LatLonPoint latLonPoint = new LatLonPoint(latLng.latitude, latLng.longitude);
    // 第一個(gè)參數(shù)表示一個(gè)Latlng百匆,第二參數(shù)表示范圍多少米,第三個(gè)參數(shù)表示是火系坐標(biāo)系還是GPS原生坐標(biāo)系
    RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 200, GeocodeSearch.AMAP);
    //異步查詢
    geocodeSearch.getFromLocationAsyn(query);

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寄症,一起剝皮案震驚了整個(gè)濱河市有巧,隨后出現(xiàn)的幾起案子悲没,更是在濱河造成了極大的恐慌,老刑警劉巖示姿,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栈戳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡镊掖,警方通過查閱死者的電腦和手機(jī)褂痰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門缩歪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事习贫〕缑ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蜡歹,是天一觀的道長(zhǎng)涕烧。 經(jīng)常有香客問我,道長(zhǎng)父款,這世上最難降的妖魔是什么瞻凤? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任阀参,我火速辦了婚禮,結(jié)果婚禮上蛛壳,老公的妹妹穿的比我還像新娘衙荐。我一直安慰自己,他們只是感情好忧吟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布溜族。 她就那樣靜靜地躺著,像睡著了一般斩祭。 火紅的嫁衣襯著肌膚如雪乡话。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天诬像,我揣著相機(jī)與錄音,去河邊找鬼坏挠。 笑死降狠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的榜配。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼临燃,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼膜廊!你這毒婦竟也來了淫茵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤钥勋,失蹤者是張志新(化名)和其女友劉穎辆苔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菲驴,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骑冗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年贼涩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谤绳。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖消略,靈堂內(nèi)的尸體忽然破棺而出瞎抛,到底是詐尸還是另有隱情,我是刑警寧澤桐臊,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布豪硅,位于F島的核電站,受9級(jí)特大地震影響飘弧,放射性物質(zhì)發(fā)生泄漏砚著。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一冠王、第九天 我趴在偏房一處隱蔽的房頂上張望舌镶。 院中可真熱鬧,春花似錦哟楷、人聲如沸否灾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扣汪。三九已至,卻和暖如春崭别,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背账千。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工匀奏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留学搜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓聚磺,卻偏偏與公主長(zhǎng)得像炬丸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子稠炬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫首启、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評(píng)論 4 62
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,101評(píng)論 1 32
  • 申請(qǐng)API Key 打開這個(gè)連接 http://lbsyun.baidu.com/apiconsole/key,申...
    何懼l閱讀 819評(píng)論 2 1
  • 目標(biāo) 1莺掠、遇到問題可以平和商量代承,不哭鬧及大吼大叫 目標(biāo)2、作息時(shí)間更規(guī)律 每日故事記錄: 昨天是正式開始學(xué)習(xí)的第一...
    kby2018閱讀 201評(píng)論 0 0
  • 今日長(zhǎng)難句 He helped popularize the idea that some diseases no...
    阿飛fighting閱讀 212評(píng)論 0 0