Android⾼德地图的使⽤,狠详细!⼿把⼿!(地图+定位+逆地理编码+输⼊提⽰
+Poi搜索)
1  <meta-data android:name="com.amap.api.v2.apikey"
2  android:value="您申请的Key"></meta-data>
2.配置权限(把下⾯这堆配置进去,再也不⽤担⼼bug出在权限问题上了):
<!--允许程序打开⽹络套接字-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许程序获取⽹络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--允许程序访问WiFi⽹络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许程序读写⼿机状态和⾝份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--⽤于进⾏⽹络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--⽤于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
script为什么翻译成脚本<!--⽤于获取wifi的获取权限,wifi信息会⽤来进⾏⽹络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--⽤于读取⼿机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--⽤于申请调⽤A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
3.在布局⽂件中加载地图控件:
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.amap.api.maps.MapView>
4.你只要在onCreate()中添加如下⼏⾏代码,⾼德地图就显⽰出来了!
MapView mapView = (MapView) findViewById(R.id.map);//到地图控件
AMap aMap = Map();//得到⼀个map对象
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//初始化AMapLocationClientOption对象
mLocationOption = new AMapLocationClientOption();
position和location的区别//设置定位模式为⾼精度模式。
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置定位回调监听
mLocationClient.setLocationListener(this);
//获取⼀次定位结果
mLocationOption.setOnceLocation(true);
//设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(true);
//给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption);
//启动定位
mLocationClient.startLocation();
之后在的回调⽅法内解析AMapLocation对象,⾥⾯包含地址,省市县街道,地区编码,城市编码等等等,可以在此添加标记,定位当前位置,你问我如何把标记固定在屏幕中央?也在这⾥⾯:
//----------------------这是位置改变监听------------------------------------
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (ErrorCode() == 0) {
//可在其中解析amapLocation获取相应内容。
LatLng latLng = new Latitude(),
//添加Marker显⽰定位位置
if (locationMarker == null) {
//如果是空的添加⼀个新的,icon⽅法就是设置定位图标,可以⾃定义
locationMarker = aMap.addMarker(new MarkerOptions()
.
position(latLng).snippet("最快1分钟到达").draggable(true).setFlat(true));
locationMarker.showInfoWindow();//主动显⽰indowindow
aMap.addText(new TextOptions().position(latLng).Address()));
//固定标签在屏幕中央
webservice技术本质locationMarker.Width() / Height() / 2);
} else {
//已经添加过了,修改位置即可
locationMarker.setPosition(latLng);
}
//然后可以移动到定位点,使⽤animateCamera就有动画效果
aMap.wLatLngZoom(latLng, 15));//参数提⽰:1.经纬度 2.缩放级别
}else {
//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
Log.e("AmapError","location Error, ErrCode:" +ErrorCode() + ", errInfo:"+ ErrorInfo());
}
韩国踩踏3d还原}
}
第⼆种⽅式,实现OnMapLoadedListener,在回调⽅法中⾸先添加⼀个标记在地图中央,之后封装⼀个⽅法,开启单次定位即可:
aMap.setOnMapLoadedListener(this);
//----------------------OnMapLoaded 当地图加载完成时回调此⽅法------------------------------------------
@Overrideiframe的参数
public void onMapLoaded() {
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.setFlat(true);
markerOptions.anchor(0.5f, 0.5f);
markerOptions.position(new LatLng(0, 0));
markerOptions.snippet("最快1分钟到达").draggable(true).setFlat(true);
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),                                R.drawable.icon_loact ion_start)));
mPositionMark = aMap.addMarker(markerOptions);
mPositionMark.showInfoWindow();//主动显⽰indowindow
mPositionMark.Width() / Height() / 2);
mLocationTask.startSingleLocate();    }
封装的单次定位⽅法在此,很简单:
//开启单次定位
public void startSingleLocate() {
AMapLocationClientOption option=new AMapLocationClientOption();
option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
option.setOnceLocation(true);
mLocationClient.setLocationOption(option);
mLocationClient.startLocation();
}
是时候贴张效果图图了:
关于怎么让按钮悬浮在地图上?也很简单啊
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="schemas.android/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.amap.api.maps.MapView>
<!--导航栏 -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:orientation="horizontal">
<ImageView
android:id="@+id/menu"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:clickable="true"
android:src="@mipmap/hanbao"/>
<ImageView
android:visibility="gone"
android:id="@+id/btn_back"
android:layout_width="50dp"
php正则验证手机号android:layout_height="wrap_content"
android:src="@drawable/btn_back"/>
<Button
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="打车/顺风车"/>
</RelativeLayout>
<ImageView
android:id="@+id/iv_location"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="16dp"
android:layout_marginTop="400dp"
android:layout_above="@+id/fromto_container"
android:src="@mipmap/btn_location"/>
</RelativeLayout>
</FrameLayout>
##4.地理编码+逆地理编码
下⾯来说⼀下地理编码(地址转坐标)/逆地理编码(坐标转地址)功能,依然很简单,再次提⼀下⾼德⼈性化的⽂档!地址转坐标实现步骤:
//构造 GeocodeSearch 对象,并设置监听。
geocodeSearch = new GeocodeSearch(this);
geocodeSearch.setOnGeocodeSearchListener(this);
//通过GeocodeQuery设置查询参数,调⽤getFromLocationNameAsyn(GeocodeQuery geocodeQuery) ⽅法发起请求。
//address表⽰地址,第⼆个参数表⽰查询城市,中⽂或者中⽂全拼,citycode、adcode都ok
GeocodeQuery query = newGeocodeQuery(address, "010");
坐标转地址实现步骤:
geocoderSearch = new GeocodeSearch(this);
geocoderSearch.setOnGeocodeSearchListener(this);//和上⾯⼀样
/
/ 第⼀个参数表⽰⼀个Latlng(经纬度),第⼆参数表⽰范围多少⽶,第三个参数表⽰是⽕系坐标系还是GPS原⽣坐标系RegeocodeQuery query = newRegeocodeQuery(latLonPoint, 200,GeocodeSearch.AMAP); FromLocationAsyn(query);
之后再回调⽅法中解析即可:
//------------------------坐标转地址/坐标转地址的监听回调-------------------------
//result⾥⾯有你想要的结果.
@Override
public void onRegeocodeSearched(RegeocodeResult result, int rCode) {
}
@Override
public void onGeocodeSearched(GeocodeResult result, int rCode) {
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。