Android 高德地图 自己位置的显示与点地图上任意一点的坐标

一些简单的基本配置在这里就不做介绍

效果图片如下:
1. 中间的蓝点是自己的位置
2.黄色的图标是点击的位置
3.上面TextView显示的是黄色图片的坐标



Android 高德地图 自己位置的显示与点地图上任意一点的坐标_第1张图片


下面是代码:

MainActivity


public class MainActivity extends AppCompatActivity implements GeoFenceListener, AMap.OnMapClickListener, LocationSource, AMapLocationListener {


    /**
     * 用于显示当前的位置
     * 

* 示例中是为了显示当前的位置,在实际使用中,单独的地理围栏可以不使用定位接口 *

*/ private AMapLocationClient mlocationClient; private LocationSource.OnLocationChangedListener mListener; private AMapLocationClientOption mLocationOption; private MapView mMapView; private AMap mAMap; // 中心点坐标 private LatLng centerLatLng = null; // 中心点marker private Marker centerMarker; private BitmapDescriptor ICON_YELLOW = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW); private BitmapDescriptor ICON_RED = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED); private MarkerOptions markerOption = null; private List markerList = new ArrayList(); private TextView tv; private TextView tvResult; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setTitle("高德地图"); tvResult = (TextView) findViewById(R.id.tvResult); tv = (TextView) findViewById(R.id.tv); mMapView = (MapView) findViewById(R.id.map); mMapView.onCreate(savedInstanceState); markerOption = new MarkerOptions().draggable(true); init(); } void init() { if (mAMap == null) { mAMap = mMapView.getMap(); mAMap.getUiSettings().setRotateGesturesEnabled(false); mAMap.moveCamera(CameraUpdateFactory.zoomBy(6)); setUpMap(); } } /** * 设置一些amap的属性 */ private void setUpMap() { mAMap.setOnMapClickListener(this); mAMap.setLocationSource(this);// 设置定位监听 mAMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示 // 自定义系统定位蓝点 MyLocationStyle myLocationStyle = new MyLocationStyle(); // 自定义定位蓝点图标 myLocationStyle.myLocationIcon( BitmapDescriptorFactory.fromResource(R.mipmap.gps_point)); // 自定义精度范围的圆形边框颜色 myLocationStyle.strokeColor(Color.argb(0, 0, 0, 0)); // 自定义精度范围的圆形边框宽度 myLocationStyle.strokeWidth(0); // 设置圆形的填充颜色 myLocationStyle.radiusFillColor(Color.argb(0, 0, 0, 0)); // 将自定义的 myLocationStyle 对象添加到地图上 mAMap.setMyLocationStyle(myLocationStyle); mAMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false // 设置定位的类型为定位模式 ,可以由定位、跟随或地图根据面向方向旋转几种 mAMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE); } /** * 方法必须重写 */ @Override protected void onResume() { super.onResume(); mMapView.onResume(); } /** * 方法必须重写 */ @Override protected void onPause() { super.onPause(); mMapView.onPause(); deactivate(); } /** * 方法必须重写 */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); } /** * 方法必须重写 */ @Override protected void onDestroy() { super.onDestroy(); mMapView.onDestroy(); if (null != mlocationClient) { mlocationClient.onDestroy(); } } List fenceList = new ArrayList(); @Override public void onGeoFenceCreateFinished(final List geoFenceList, int errorCode, String customId) { Message msg = Message.obtain(); if (errorCode == GeoFence.ADDGEOFENCE_SUCCESS) { fenceList = geoFenceList; msg.obj = customId; msg.what = 0; } else { msg.arg1 = errorCode; msg.what = 1; } } @Override public void onMapClick(LatLng latLng) { markerOption.icon(ICON_YELLOW); centerLatLng = latLng; addCenterMarker(centerLatLng); tv.setBackgroundColor(getResources().getColor(R.color.colorAccent)); tv.setText("选中的坐标:" + centerLatLng.longitude + "," + centerLatLng.latitude); } /** * 定位成功后回调函数 */ @Override public void onLocationChanged(AMapLocation amapLocation) { if (mListener != null && amapLocation != null) { if (amapLocation != null && amapLocation.getErrorCode() == 0) { // tvResult.setVisibility(View.GONE); mListener.onLocationChanged(amapLocation);// 显示系统小蓝点 } else { String errText = "定位失败," + amapLocation.getErrorCode() + ": " + amapLocation.getErrorInfo(); Log.e("AmapErr", errText); // tvResult.setVisibility(View.VISIBLE); tvResult.setText(errText); } } } /** * 激活定位 */ @Override public void activate(LocationSource.OnLocationChangedListener listener) { mListener = listener; if (mlocationClient == null) { mlocationClient = new AMapLocationClient(this); mLocationOption = new AMapLocationClientOption(); // 设置定位监听 mlocationClient.setLocationListener(this); // 设置为高精度定位模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); // 只是为了获取当前位置,所以设置为单次定位 mLocationOption.setOnceLocation(true); // 设置定位参数 mlocationClient.setLocationOption(mLocationOption); mlocationClient.startLocation(); } } /** * 停止定位 */ @Override public void deactivate() { mListener = null; if (mlocationClient != null) { mlocationClient.stopLocation(); mlocationClient.onDestroy(); } mlocationClient = null; } private void addCenterMarker(LatLng latlng) { if (null == centerMarker) { centerMarker = mAMap.addMarker(markerOption); } centerMarker.setPosition(latlng); markerList.add(centerMarker); } @Override public void onPointerCaptureChanged(boolean hasCapture) { } }

xml的代码:




    
    

    




下面是gps_point.png这个图片
Android 高德地图 自己位置的显示与点地图上任意一点的坐标_第2张图片

以上是简单的一些操作,如有什么失误或是不明白的地方欢迎来共同探讨

你可能感兴趣的:(地图)