android 定位到输入的地址
16lz
2021-01-26
定位到自己输入的地址的地方
先上效果:
首先需要定位,打开程序自动定位到自己所在的位置,然后输入城市和详细地址,定位。
mainactivity代码全部如下:
package com.yqy.locgeodemo;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.RadioGroup.OnCheckedChangeListener;import android.widget.Toast;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MarkerOptions;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;import com.baidu.mapapi.search.core.SearchResult;import com.baidu.mapapi.search.geocode.GeoCodeOption;import com.baidu.mapapi.search.geocode.GeoCodeResult;import com.baidu.mapapi.search.geocode.GeoCoder;import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;public class MainActivity extends Activity implementsOnGetGeoCoderResultListener {GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用// 定位相关LocationClient mLocClient;public MyLocationListenner myListener = new MyLocationListenner();BitmapDescriptor mCurrentMarker;MapView mMapView;BaiduMap mBaiduMap;// UI相关OnCheckedChangeListener radioButtonListener;Button requestLocButton;boolean isFirstLoc = true;// 是否首次定位@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 地图初始化mMapView = (MapView) findViewById(R.id.bmapView);mBaiduMap = mMapView.getMap();// 开启定位图层mBaiduMap.setMyLocationEnabled(true);// 定位初始化mLocClient = new LocationClient(this);mLocClient.registerLocationListener(myListener);LocationClientOption option = new LocationClientOption();option.setOpenGps(true);// 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型option.setScanSpan(1000);mLocClient.setLocOption(option);mLocClient.start();// 初始化搜索模块,注册事件监听mSearch = GeoCoder.newInstance();mSearch.setOnGetGeoCodeResultListener(this);Button btn_search = (Button) findViewById(R.id.btn_search);btn_search.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {SearchButtonProcess();}});}/** * 发起地址搜索 * * @param v */public void SearchButtonProcess() {EditText editCity = (EditText) findViewById(R.id.et_city);EditText editGeoCodeKey = (EditText) findViewById(R.id.et_addr);// Geo搜索mSearch.geocode(new GeoCodeOption().city(editCity.getText().toString()).address(editGeoCodeKey.getText().toString()));}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}/** * 定位SDK监听函数 */public class MyLocationListenner implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {// map view 销毁后不在处理新接收的位置if (location == null || mMapView == null)return;MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此处设置开发者获取到的方向信息,顺时针0-360.direction(100).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);if (isFirstLoc) {isFirstLoc = false;LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);mBaiduMap.animateMapStatus(u);}}public void onReceivePoi(BDLocation poiLocation) {}}@Overrideprotected void onPause() {mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {mMapView.onResume();super.onResume();}@Overrideprotected void onDestroy() {// 退出时销毁定位mLocClient.stop();mSearch.destroy();// 关闭定位图层mBaiduMap.setMyLocationEnabled(false);mMapView.onDestroy();mMapView = null;super.onDestroy();}/** * 地址搜索返回结果 */@Overridepublic void onGetGeoCodeResult(GeoCodeResult result) {if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {Toast.makeText(MainActivity.this, "抱歉,未能找到结果", Toast.LENGTH_LONG).show();return;}mBaiduMap.clear();mBaiduMap.addOverlay(new MarkerOptions().position(result.getLocation()).icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_marka)));mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(result.getLocation()));String strInfo = String.format("纬度:%f 经度:%f",result.getLocation().latitude, result.getLocation().longitude);Toast.makeText(MainActivity.this, strInfo, Toast.LENGTH_LONG).show();}@Overridepublic void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {}}
DemoApplication.java:
package com.yqy.locgeodemo;import android.app.Application;import com.baidu.mapapi.SDKInitializer;public class DemoApplication extends Application {@Overridepublic void onCreate() {super.onCreate();// 在使�? SDK 各组间之前初始化 context 信息,传�? ApplicationContextSDKInitializer.initialize(this);}}
项目demo
下载地址为:
android 定位到输入的地址
更多相关文章
- 实现查询地址和路线导航的代码
- Android(安卓)Fragment学习笔记(二)
- Android(安卓)MMS/SMS 入口
- Android(安卓)CircularFloatingActionMenu在ScrollView这样的滚
- 抓包工具TcpDump for Android(安卓)+ wireshark
- 充电clientandroid电池(五):电池 充电IC(PM2301)驱动分析篇
- ArcGIS for android 简单使用(一):环境配置与定位当前位置,放大,缩小
- Android(安卓)MMS/SMS(二)
- Unity与Android交互-案例演示接入穿山甲广告SDK(二)