日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 高德地图简书,Android高德之旅(4)我的位置

發(fā)布時間:2023/12/14 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 高德地图简书,Android高德之旅(4)我的位置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

廢話

說到吃飯,最近剛開了一家...咳咳,說到位置定位,主要包含兩部分,第一個是根據(jù)GPS獲取經(jīng)緯度,第二是根據(jù)經(jīng)緯度獲取省市區(qū)行政區(qū)劃。先說第一個,使用過地圖導航的都知道,定位我的位置通常是一個藍色的箭頭,在地圖上移動,我們也來實現(xiàn)這個效果。

1、基礎(chǔ)地圖

請參照本系列第一篇

2、我的位置

@Override

public void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_my_location);

mapView = (MapView) findViewById(R.id.map_view);

mapView.onCreate(savedInstanceState); //此方法必須重寫

aMap = mapView.getMap();

setupMapView();

setupLocationStyle();

}

private void setupMapView() {

// 設(shè)置默認定位按鈕是否顯示,非必需設(shè)置

aMap.getUiSettings().setMyLocationButtonEnabled(true);

// 設(shè)置為true表示啟動顯示定位藍點,false表示隱藏定位藍點并不進行定位,默認是false

aMap.setMyLocationEnabled(true);

aMap.setOnMyLocationChangeListener(this);

}

private void setupLocationStyle() {

myLocationStyle = new MyLocationStyle();

// 默認模式,連續(xù)定位、且將視角移動到地圖中心點,定位點依照設(shè)備方向旋轉(zhuǎn),并且會跟隨設(shè)備移動,1秒1次定位

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);

// 設(shè)置連續(xù)定位模式下的定位間隔,只在連續(xù)定位模式下生效,單次定位模式下不會生效。單位為毫秒

myLocationStyle.interval(500);

// 設(shè)置定位藍點的Style

aMap.setMyLocationStyle(myLocationStyle);

}

顯示效果如下:

3、藍點展示模式

定位藍點提供8種模式:

// 只定位一次

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);

// 定位一次,且將視角移動到地圖中心點

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;

// 連續(xù)定位、且將視角移動到地圖中心點,定位藍點跟隨設(shè)備移動,1秒1次定位

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW) ;

// 連續(xù)定位、且將視角移動到地圖中心點,地圖依照設(shè)備方向旋轉(zhuǎn),定位點會跟隨設(shè)備移動,1秒1次定位

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);

// 連續(xù)定位、且將視角移動到地圖中心點,定位點依照設(shè)備方向旋轉(zhuǎn),并且會跟隨設(shè)備移動,1秒1次定位

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);

以下三種模式從5.1.0版本開始提供

// 連續(xù)定位、藍點不會移動到地圖中心點,定位點依照設(shè)備方向旋轉(zhuǎn),并且藍點會跟隨設(shè)備移動

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);

// 連續(xù)定位、藍點不會移動到地圖中心點,并且藍點會跟隨設(shè)備移動

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);

// 連續(xù)定位、藍點不會移動到地圖中心點,地圖依照設(shè)備方向旋轉(zhuǎn),并且藍點會跟隨設(shè)備移動

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);

4、是否顯示定位藍點

// 方法自5.1.0版本后支持,設(shè)置false以后圖面上不再有定位藍點的概念,但是會持續(xù)回調(diào)位置信息

public void showLocatePoint(View view) {

myLocationStyle.showMyLocation(true);

}

5、自定義定位藍點圖標

public void customLocationIcon(View view) {

BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.custom_location_icon);

myLocationStyle.myLocationIcon(bitmapDescriptor);

aMap.setMyLocationStyle(myLocationStyle);

}

6、設(shè)置藍點圖標的錨點

錨點是指定位藍點圖標像素與定位藍點坐標的關(guān)聯(lián)點,例如需要將圖標的左下方像素點與定位藍點的經(jīng)緯度關(guān)聯(lián)在一起,通過如下方法傳入(0.0,1.0)。圖標左上點為像素原點。

public void iconAnchor(View view) {

myLocationStyle.anchor(0.0f, 1.0f);

aMap.setMyLocationStyle(myLocationStyle);

}

7、精度圓圈的自定義

public void circleDisplay(View view) {

// 圓圈的邊框顏色

myLocationStyle.strokeColor(Color.RED);

// 圓圈的填充顏色

myLocationStyle.radiusFillColor(Color.LTGRAY);

// 圓圈的邊框?qū)挾?/p>

myLocationStyle.strokeWidth(2);

aMap.setMyLocationStyle(myLocationStyle);

}

8、設(shè)置定位頻次

myLocationStyle.interval(1000);

aMap.setMyLocationStyle(myLocationStyle);

最少設(shè)置1000毫秒,如果小于1000毫秒則當作1000毫秒。該方法只會作用在會執(zhí)行連續(xù)定位的工作模式上。

連續(xù)定位的工作模式有一下幾種:

MyLocationStyle.LOCATION_TYPE_FOLLOW ;

MyLocationStyle.LOCATION_TYPE_MAP_ROTATE;

MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE;

9、獲取經(jīng)緯度信息

說了半天,我們只是看到了地圖上的顯示,還不知道具體的經(jīng)緯度地點,通過一個簡單的回調(diào)就可以獲得

aMap.setOnMyLocationChangeListener(this);

@Override

public void onMyLocationChange(Location location) {

Log.e("TAG", "MyLocation=[" + location.getLongitude() + ", " + location.getLatitude() + "]");

}

10、接下來就是根據(jù)經(jīng)緯度獲取省市區(qū)

GeocodeSearch geoSearch = new GeocodeSearch(context);

geoSearch.setOnGeocodeSearchListener(GeocodeSearch.OnGeocodeSearchListener);

@Override

public void onRegeocodeSearched(RegeocodeResult result, int code) {

Log.e("TAG", "code=" + code);

RegeocodeAddress address = result.getRegeocodeAddress();

if (address == null) {

Log.e("TAG", "結(jié)果為空");

} else {

Log.e("TAG", "地址:" + address.getProvince() + address.getCity() + address.getDistrict());

}

}

public void queryProvinceCity(View view) {

// 第一個參數(shù)表示經(jīng)緯度,第二參數(shù)表示范圍多少米,第三個參數(shù)表示是火系坐標系還是GPS原生坐標系

LatLonPoint point = new LatLonPoint(longitude, latitude);

RegeocodeQuery query = new RegeocodeQuery(point, 200,GeocodeSearch.AMAP);

geoSearch.getFromLocationAsyn(query);

}

11、很自然我們會想到反向的過程

// 第一個參數(shù)是城市名,第二個參數(shù)是城市代碼

GeocodeQuery query = new GeocodeQuery("北京市", "010");

geoSearch.getFromLocationNameAsyn(query);

@Override

public void onGeocodeSearched(GeocodeResult result, int code) {

Log.e("TAG", "code=" + code);

}

總結(jié)

好啦,本期節(jié)目就到這里,感謝大家的收看,我們下期再見~

總結(jié)

以上是生活随笔為你收集整理的android 高德地图简书,Android高德之旅(4)我的位置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。