高德地图配置
- 第一步:需要用的jar包
- 第二步:需要用的集类
- 第三步:需要用到的权限
- 第四步:嵌入代码
- 第五步:实现效果
第一步:需要用的jar包
第二步:需要用的集类
第三步:需要用到的权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>```
**第四步:嵌入代码**
```public class MapActivity extends AppCompatActivity {
private AMap aMap;
private MapView mapView;
private boolean isUpdate = false;
private SingleOverlay mMyOverlay;//我的位置
private SingleOverlay mPinOverlay;//大头针
private Marker mPinMarker;//大头针对应的marker
private Circle mCircle;//地图上的圆
private LatLng mStartPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
initMap(savedInstanceState);
}
/**
* 初始化地图
*/
private void initMap(Bundle arg0) {
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(arg0);// 此方法必须重写
if (aMap == null) {
aMap = mapView.getMap();
}
// aMap.getUiSettings().setZoomControlsEnabled(false);
if (mMyOverlay == null)
mMyOverlay = new SingleOverlay(this, aMap);
mMyOverlay.setIcon(R.drawable.icon_map_current_location);
if (mPinOverlay == null)
mPinOverlay = new SingleOverlay(this, aMap);
mPinOverlay.setIcon(R.drawable.icon_map_pin);
//启动定位
Locate locate = new Locate(this);
locate.start();
locate.setOnLocationListener(new Locate.OnLocationListener() {
@Override
public void onReceiveLocation(AMapLocation location) {
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
mStartPosition = latLng;
addUserMarker(latLng);
addPoiMrker(latLng);
Toast.makeText(MapActivity.this, "000" + location, Toast.LENGTH_SHORT).show();
}
@Override
public void onReceiveFail() {
Toast.makeText(MapActivity.this, "0002222" , Toast.LENGTH_SHORT).show();
}
});
//回到当前位置
findViewById(R.id.current_local).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Marker marker = mMyOverlay.getMyMarker();
if (marker != null) {
mPinOverlay.move(mMyOverlay.getMyMarker().getPosition());
}
}
});
//地图移动事件
aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
mCircle.setCenter(cameraPosition.target);
mPinMarker.setPosition(cameraPosition.target);
Locate locate = new Locate(MapActivity.this);
//把经纬度转换成地址信息
locate.searchAddress(cameraPosition.target.latitude, cameraPosition.target.longitude);
locate.setOnGeoSearchLintener(new Locate.OnGeoSearchLintener() {
@Override
public void onRegeocodeSearched(RegeocodeResult arg0, int arg1) {
if (arg0 != null) {
String address = arg0.getRegeocodeAddress().getFormatAddress();
Toast.makeText(MapActivity.this, "++" + address, Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onCameraChangeFinish(CameraPosition cameraPosition) {
}
});
//地图长按事件
aMap.setOnMapLongClickListener(new AMap.OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng latLng) {
mPinOverlay.move(latLng);//平移地图,不缩放地图
// mPinOverlay.moveAndZoom(latLng);//平移地图 ,缩放地图
Locate locate = new Locate(MapActivity.this);
//把经纬度转换成地址信息
locate.searchAddress(latLng.latitude, latLng.longitude);
locate.setOnGeoSearchLintener(new Locate.OnGeoSearchLintener() {
@Override
public void onRegeocodeSearched(RegeocodeResult arg0, int arg1) {
if (arg0 != null) {
String address = arg0.getRegeocodeAddress().getFormatAddress();
Toast.makeText(MapActivity.this, "--" + address, Toast.LENGTH_SHORT).show();
}
}
});
}
});
}
/**
* 地图上显示当前用户的位置
*/
private void addUserMarker(LatLng latLng) {
PoiItem item = new PoiItem();
item.setTitle("title");
item.setSnippet("snippet");
item.setLatLng(latLng);
mMyOverlay.removeFromMap();
mMyOverlay.setPoi(item);
mMyOverlay.addToMap();//显示我的位置
mMyOverlay.zoomToSpan();
}
/**
* 地图上显示大头针的位置
*/
private void addPoiMrker(LatLng latLng) {
PoiItem item = new PoiItem();
item.setTitle("title");//title 和 snippet必须添加否则气泡不显示
item.setSnippet("snippet");
item.setLatLng(latLng);
mPinOverlay.setPoi(item);//显示大头针位置
mPinOverlay.addToMap();
mPinMarker = mPinOverlay.getMyMarker();
mPinMarker.setAnchor(0.5f, 1.27f);
mCircle = mPinOverlay.addCircle(item.getLatLng(), this);
}
}
第五步:实现效果