Android 高德地图 自己位置的显示与点地图上任意一点的坐标
程序员文章站
2022-07-14 16:22:36
...
一些简单的基本配置在这里就不做介绍
效果图片如下:
1. 中间的蓝点是自己的位置
2.黄色的图标是点击的位置
3.上面TextView显示的是黄色图片的坐标
下面是代码:
MainActivity
public class MainActivity extends AppCompatActivity implements GeoFenceListener, AMap.OnMapClickListener, LocationSource, AMapLocationListener {
/**
* 用于显示当前的位置
* <p>
* 示例中是为了显示当前的位置,在实际使用中,单独的地理围栏可以不使用定位接口
* </p>
*/
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<Marker> markerList = new ArrayList<Marker>();
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<GeoFence> fenceList = new ArrayList<GeoFence>();
@Override
public void onGeoFenceCreateFinished(final List<GeoFence> 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的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.maptext.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:id="@+id/tv"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:id="@+id/tvResult"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
下面是gps_point.png这个图片
以上是简单的一些操作,如有什么失误或是不明白的地方欢迎来共同探讨
上一篇: 自定义View-柱状图和折线图的合体
下一篇: ubuntu 快捷键