高德地图,定位 ,中间固定点拖动获取位置
import android.graphics.Color; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.ViewTreeObserver; import android.view.animation.LinearInterpolator; import android.widget.TextView; import android.widget.Toast; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; import com.amap.api.maps.AMap; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.LocationSource; import com.amap.api.maps.MapView; import com.amap.api.maps.UiSettings; import com.amap.api.maps.model.CameraPosition; import com.amap.api.maps.model.LatLng; import com.amap.api.maps.model.Marker; import com.amap.api.maps.model.MarkerOptions; import com.amap.api.maps.model.animation.Animation; import com.amap.api.maps.model.animation.RotateAnimation; import com.amap.api.services.core.LatLonPoint; import com.amap.api.services.geocoder.GeocodeResult; import com.amap.api.services.geocoder.GeocodeSearch; import com.amap.api.services.geocoder.RegeocodeQuery; import com.amap.api.services.geocoder.RegeocodeResult; import com.tlh.gczp.R; import com.tlh.gczp.mvp.view.BaseUIActivity; import butterknife.BindView; import butterknife.ButterKnife; /** * 地图选点 */ public class AMapSelectPointActivity extends BaseUIActivity implements LocationSource { public static String TITLE_TAG = "title_str";//标题key public static String RESULT_TAG = "result_str";//返回数据key String titleStr = "地图";//标题 @BindView(R.id.activity_amapselectpoint_map) MapView mMapView; @BindView(R.id.activity_amapselectpoint_text) TextView addressTxtView;//位置 AMap aMap;//地图 private UiSettings mUiSettings;//定义一个UiSettings对象 //声明AMapLocationClient类对象 public AMapLocationClient mLocationClient = null; //声明定位回调监听器 public AMapLocationListener mLocationListener; //声明AMapLocationClientOption对象 public AMapLocationClientOption mLocationOption = null; OnLocationChangedListener listener; MarkerOptions markerCenter = new MarkerOptions();//中心点 Marker marker;//中间 GeocodeSearch geocodeSearch;//地理位置查询 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentViewItem(R.layout.activity_amapselectpont); ButterKnife.bind(this); //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理 mMapView.onCreate(savedInstanceState); rightBtn.setTextColor(Color.parseColor("#fcc900")); initData(); showPage(); } /** * 实例化数据 */ private void initData() { initMap(); titleStr = getIntent().getStringExtra(TITLE_TAG); if (TextUtils.isEmpty(titleStr)){ titleStr = "地图"; } setPageName(titleStr); currentPageName = titleStr; setRightTxt(getString(R.string.str_common_finish), new View.OnClickListener() { @Override public void onClick(View view) { searchAddressByLat(marker.getPosition()); } }); } private void initMap() {//实例化Map geocodeSearch = new GeocodeSearch(this); //初始化地图变量 if (aMap == null) { aMap = mMapView.getMap(); } aMap.setMapType(AMap.MAP_TYPE_NORMAL); mUiSettings = aMap.getUiSettings();//实例化UiSettings类 mUiSettings.setZoomControlsEnabled(true); //定位按钮 aMap.setLocationSource(this);// 设置定位监听 mUiSettings.setMyLocationButtonEnabled(true); // 显示默认的定位按钮 aMap.setMyLocationEnabled(true);// 可触发定位并显示定位层 mUiSettings.setScaleControlsEnabled(true);//显示比例尺控件 mUiSettings.setAllGesturesEnabled(true); mUiSettings.setCompassEnabled(true);//指南针 // LatLng latLng = new LatLng(39.906901, 116.397972); // final Marker marker = aMap.addMarker(new MarkerOptions(). // position(latLng). // title("北京"). // snippet("DefaultMarker")); // final Marker marker = aMap.addMarker(new MarkerOptions()); // MarkerOptions markeroptions = new MarkerOptions(); // markeroptions.position(latLng); // markeroptions.title("当前位置"); // markeroptions.visible(true); // BitmapDescriptor bitmapDescriptor= BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.mipmap.positioning_normal)); // markeroptions.icon(bitmapDescriptor); // aMap.addMarker(markeroptions); mMapView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Log.e("mMapView","onGlobalLayout===---123"); marker = aMap.addMarker(new MarkerOptions()); Animation animation = new RotateAnimation(marker.getRotateAngle(), marker.getRotateAngle() + 720, 0, 0, 0); long duration = 1000L; animation.setDuration(duration); animation.setInterpolator(new LinearInterpolator()); marker.setAnimation(animation); marker.startAnimation(); marker.setPositionByPixels(mMapView.getWidth()/2, mMapView.getHeight()/2); } }); LatLng ll = new LatLng(34.6006623972045,108.97923588752748); markerCenter.position(ll); markerCenter.visible(true); markerCenter.title("中心点"); // BitmapDescriptor bitmapDescriptor= BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.mipmap.icon_nearby)); // markerCenter.icon(bitmapDescriptor); aMap.addMarker(markerCenter); //初始化AMapLocationClientOption对象 mLocationOption = new AMapLocationClientOption(); //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。 // mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving); mLocationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation aMapLocation) { if (aMapLocation != null) { if (listener != null) { listener.onLocationChanged(aMapLocation); } if (aMapLocation.getErrorCode() == 0) { //可在其中解析amapLocation获取相应内容。 Log.e("AMapSelectPointActivity", "aMapLocation=" + aMapLocation.getCity()); Log.e("AMapSelectPointActivity", "aMapLocation address=" + aMapLocation.getAddress()); } else { //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。 Log.e("AmapError", "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } } Log.e("AMapSelectPointActivity", "aMapLocation run onLocationChanged"); } }; //初始化定位 mLocationClient = new AMapLocationClient(getApplicationContext()); //设置定位回调监听 mLocationClient.setLocationListener(mLocationListener); mLocationClient.setLocationOption(mLocationOption);//设置模式 aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition cameraPosition) { LatLng target = cameraPosition.target; System.out.println(target.latitude + "jinjin------" + target.longitude); } @Override public void onCameraChangeFinish(CameraPosition cameraPosition) { LatLng target = cameraPosition.target; System.out.println("changeFinish="+target.latitude + "jinjin------" + target.longitude); LatLng ll = new LatLng(target.latitude,target.longitude); markerCenter.position(ll); searchAddressByLat(ll); // markerCenter.visible(true); // markerCenter.title("中心点"); // BitmapDescriptor bitmapDescriptor= BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.mipmap.icon_nearby)); // markerCenter.icon(bitmapDescriptor); // aMap.addMarker(markerCenter); } }); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); mLocationClient.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理 mMapView.onResume(); //启动定位 mLocationClient.startLocation(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理 mMapView.onPause(); mLocationClient.stopLocation(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理 mMapView.onSaveInstanceState(outState); } @Override public void activate(OnLocationChangedListener onLocationChangedListener) { Log.e("AMapSelectPointActivity", "activate is run"); listener = onLocationChangedListener; } @Override public void deactivate() {//高德地图位置监听 listener = null; } private void searchAddressByLat(final LatLng latLng){ geocodeSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() { @Override public void onRegeocodeSearched(RegeocodeResult result, int rCode) { if (rCode == 1000) { if (result != null && result.getRegeocodeAddress() != null && result.getRegeocodeAddress().getFormatAddress() != null) { String addressName = result.getRegeocodeAddress().getFormatAddress() + "附近"; aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15)); addressTxtView.setText(result.getRegeocodeAddress().getFormatAddress()); Toast.makeText(AMapSelectPointActivity.this, addressName,Toast.LENGTH_LONG).show(); } else { Toast.makeText(AMapSelectPointActivity.this, "未找到",Toast.LENGTH_LONG).show(); } } else { Toast.makeText(AMapSelectPointActivity.this, "失败",Toast.LENGTH_LONG).show(); } } @Override public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { } }); LatLonPoint point = new LatLonPoint(latLng.latitude,latLng.longitude); RegeocodeQuery query = new RegeocodeQuery(point, 200,GeocodeSearch.AMAP); geocodeSearch.getFromLocationAsyn(query); } }
Share this:
码字很辛苦,转载请注明来自技术联盟的《高德地图,定位 ,中间固定点拖动获取位置》
2016-12-15
Android