高德地图android4,Android高德之旅(4)我的位置
廢話
說到吃飯,最近剛開了一家...咳咳,說到位置定位,主要包含兩部分,第一個是根據GPS獲取經緯度,第二是根據經緯度獲取省市區行政區劃。先說第一個,使用過地圖導航的都知道,定位我的位置通常是一個藍色的箭頭,在地圖上移動,我們也來實現這個效果。
1、基礎地圖
請參照本系列第一篇
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() {
// 設置默認定位按鈕是否顯示,非必需設置
aMap.getUiSettings().setMyLocationButtonEnabled(true);
// 設置為true表示啟動顯示定位藍點,false表示隱藏定位藍點并不進行定位,默認是false
aMap.setMyLocationEnabled(true);
aMap.setOnMyLocationChangeListener(this);
}
private void setupLocationStyle() {
myLocationStyle = new MyLocationStyle();
// 默認模式,連續定位、且將視角移動到地圖中心點,定位點依照設備方向旋轉,并且會跟隨設備移動,1秒1次定位
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
// 設置連續定位模式下的定位間隔,只在連續定位模式下生效,單次定位模式下不會生效。單位為毫秒
myLocationStyle.interval(500);
// 設置定位藍點的Style
aMap.setMyLocationStyle(myLocationStyle);
}
顯示效果如下:
3、藍點展示模式
定位藍點提供8種模式:
// 只定位一次
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);
// 定位一次,且將視角移動到地圖中心點
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;
// 連續定位、且將視角移動到地圖中心點,定位藍點跟隨設備移動,1秒1次定位
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW) ;
// 連續定位、且將視角移動到地圖中心點,地圖依照設備方向旋轉,定位點會跟隨設備移動,1秒1次定位
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);
// 連續定位、且將視角移動到地圖中心點,定位點依照設備方向旋轉,并且會跟隨設備移動,1秒1次定位
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
以下三種模式從5.1.0版本開始提供
// 連續定位、藍點不會移動到地圖中心點,定位點依照設備方向旋轉,并且藍點會跟隨設備移動
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);
// 連續定位、藍點不會移動到地圖中心點,并且藍點會跟隨設備移動
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);
// 連續定位、藍點不會移動到地圖中心點,地圖依照設備方向旋轉,并且藍點會跟隨設備移動
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);
4、是否顯示定位藍點
// 方法自5.1.0版本后支持,設置false以后圖面上不再有定位藍點的概念,但是會持續回調位置信息
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、設置藍點圖標的錨點
錨點是指定位藍點圖標像素與定位藍點坐標的關聯點,例如需要將圖標的左下方像素點與定位藍點的經緯度關聯在一起,通過如下方法傳入(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);
// 圓圈的邊框寬度
myLocationStyle.strokeWidth(2);
aMap.setMyLocationStyle(myLocationStyle);
}
8、設置定位頻次
myLocationStyle.interval(1000);
aMap.setMyLocationStyle(myLocationStyle);
最少設置1000毫秒,如果小于1000毫秒則當作1000毫秒。該方法只會作用在會執行連續定位的工作模式上。
連續定位的工作模式有一下幾種:
MyLocationStyle.LOCATION_TYPE_FOLLOW ;
MyLocationStyle.LOCATION_TYPE_MAP_ROTATE;
MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE;
9、獲取經緯度信息
說了半天,我們只是看到了地圖上的顯示,還不知道具體的經緯度地點,通過一個簡單的回調就可以獲得
aMap.setOnMyLocationChangeListener(this);
@Override
public void onMyLocationChange(Location location) {
Log.e("TAG", "MyLocation=[" + location.getLongitude() + ", " + location.getLatitude() + "]");
}
10、接下來就是根據經緯度獲取省市區
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", "結果為空");
} else {
Log.e("TAG", "地址:" + address.getProvince() + address.getCity() + address.getDistrict());
}
}
public void queryProvinceCity(View view) {
// 第一個參數表示經緯度,第二參數表示范圍多少米,第三個參數表示是火系坐標系還是GPS原生坐標系
LatLonPoint point = new LatLonPoint(longitude, latitude);
RegeocodeQuery query = new RegeocodeQuery(point, 200,GeocodeSearch.AMAP);
geoSearch.getFromLocationAsyn(query);
}
11、很自然我們會想到反向的過程
// 第一個參數是城市名,第二個參數是城市代碼
GeocodeQuery query = new GeocodeQuery("北京市", "010");
geoSearch.getFromLocationNameAsyn(query);
@Override
public void onGeocodeSearched(GeocodeResult result, int code) {
Log.e("TAG", "code=" + code);
}
總結
好啦,本期節目就到這里,感謝大家的收看,我們下期再見~
總結
以上是生活随笔為你收集整理的高德地图android4,Android高德之旅(4)我的位置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android自定义组件属性,andro
- 下一篇: android o preview 3,