怎么用百度地图api自动获取当前位置(谷歌的也行)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用百度地图api自动获取当前位置(谷歌的也行)相关的知识,希望对你有一定的参考价值。
我在一些网站看到一个功能,就是用户点击图标获取当前位置,手机或电脑弹框,是否允许XX程序获取当前位置,用户点击确定后,用户的当前位置信息比如(北京市XX区XX街道)就显示在前面的文本框内,这个功能就是为了提高用户的体验。不用手动输入。请问有没有人做过这个功能。。。我在百度地图API找了半天都没有这个功能,有一个根据IP地址获取当前位置,但是只是获取到市这个级别,不好用。
用户通过点击地图上面的位置,在地图上面进行描点,然后再把获取的到的地理位置保存到地图上面的地址栏目中。
主要是百度地图API的使用
var map = new BMap.Map("allmap"); //实例化一个地图对象var point = new
BMap.Point(116.331398,39.897445); //设置地图中心的位置
map.centerAndZoom(point,12);
//设置地图元素的可视层
map.enableScrollWheelZoom();
//启用滚轮放大缩小,默认禁用
map.enableContinuousZoom();
//启用地图惯性拖拽,默认禁用
function myFun(result)
var cityName =
result.name;
map.setCenter(cityName);
var myCity = new
BMap.LocalCity();
myCity.get(myFun);
i=0
//点击获取坐标
map.addEventListener("click",function(e)
if(i === 0)
//存储经纬度
lng = e.point.lng;
lat =
e.point.lat;
//在地图上面描点
var marker = new BMap.Marker(new
BMap.Point(lng,lat)); // 创建标注
map.addOverlay(marker);
marker.enableDragging(); //可拖拽
var gc = new
BMap.Geocoder();
//获取地址的数据地址
var pt = e.point;
gc.getLocation(pt, function(rs)
var addComp =
rs.addressComponents;
address = addComp.province + addComp.city +
addComp.district + addComp.street + addComp.streetNumber;
//画图
var label = new BMap.Label(address,offset:new
BMap.Size(20,-10));
marker.setLabel(label);
);
i=1;
); 参考技术A 如果是手机上我经常做,都做烦了,网页上就是能根据IP定位,毕竟你没有相关定位能力。手机上可以下载百度的android定位包,用里面的Location功能获取Lat和Lon,也就是纬度和经度,同时获取的内容有一个叫Addrstr的String类型的变量,里面存的就是你说的位置信息。至于弹窗的话单独做咯~~~~~两句代码就能搞定的东西本回答被提问者和网友采纳
Android定位&地图&导航——基于百度地图移动获取位置和自动定位
一、问题描述 |
使用百度地图实现如图所示应用,首先自动定位当前我起始位置(小圆点位置),并跟随移动不断自动定位我的当前位置
百度Api不同版本使用会有些差异,本例中加入lib如下:
二、编写MyApplication类 |
public class MyApplication extends Application { static MyApplication myApplication; BMapManager mBMapManager = null; String mStrKey = "7ZfuRcOx1G3oZ8TKuTNGm4sO"; boolean m_bKeyRight = true; // 授权Key正确,验证通过 private List<Activity> activityList = new LinkedList<Activity>(); @Override public void onCreate() { myApplication = this; initEngineManager(this); super.onCreate(); } public void initEngineManager(Context context) { if (mBMapManager == null) { mBMapManager = new BMapManager(context); Toast.makeText(MyApplication.getInstance().getApplicationContext(), "BMapManager 初始化SUCSUC!", Toast.LENGTH_LONG).show(); } if (!mBMapManager.init(mStrKey, new MyGeneralListener())) { Toast.makeText(MyApplication.getInstance().getApplicationContext(), "BMapManager 初始化错误!", Toast.LENGTH_LONG).show(); } } public static MyApplication getInstance() { if (myApplication == null) { myApplication = new MyApplication(); } return myApplication; } public void addActivity(Activity activity) { activityList.add(activity); } public void exit() { for (Activity activity : activityList) { activity.finish(); } System.exit(0); } // 常用事件监听,用来处理通常的网络错误,授权验证错误等 static class MyGeneralListener implements MKGeneralListener { public void onGetNetworkState(int iError) { if (iError == MKEvent.ERROR_NETWORK_CONNECT) { Toast.makeText( MyApplication.getInstance().getApplicationContext(), "您的网络出错啦!", Toast.LENGTH_LONG).show(); } else if (iError == MKEvent.ERROR_NETWORK_DATA) { Toast.makeText( MyApplication.getInstance().getApplicationContext(), "输入正确的检索条件!", Toast.LENGTH_LONG).show(); } // ... } public void onGetPermissionState(int iError) { if (iError == MKEvent.ERROR_PERMISSION_DENIED) { // 授权Key错误: Toast.makeText( MyApplication.getInstance().getApplicationContext(), "请输入正确的授权Key!", Toast.LENGTH_LONG).show(); MyApplication.getInstance().m_bKeyRight = false; } } } }
三、编写主程序MainActivity,显示当前所处位置 |
主程序MainActity:
public class MainActivity extends Activity { public MyApplication app; static MapView mMapView = null; public MKMapViewListener mMapListener = null; MyLocationOverlay myLocationOverlay = null; // 定位相关 LocationClient mLocClient; public NotifyLister mNotifyer = null; public MyLocationListenner myListener = new MyLocationListenner(); LocationData locData = null; private MapController mMapController = null; static MKSearch mkSerach; Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { Toast.makeText(MainActivity.this, "msg:" + msg.what, Toast.LENGTH_SHORT).show(); }; }; static TextView showAddr; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showAddr = (TextView) findViewById(R.id.showAddr); MyIcon mi = new MyIcon(this); //在屏幕中心点添加接我图标 getWindow().addContentView( mi, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); MyIcon2 m2 = new MyIcon2(this); getWindow().addContentView( m2, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); mMapView = (MapView) findViewById(R.id.bmapsView); mMapController = mMapView.getController(); initMapView(); app = MyApplication.getInstance(); mLocClient = new LocationClient(this); mLocClient.registerLocationListener(myListener); //搜索初始化 mkSerach = new MKSearch(); mkSerach.init(app.mBMapManager, new MKSearchListener() { @Override public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onGetPoiDetailSearchResult(int arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetAddrResult(MKAddrInfo info, int arg1) { showAddr.setText(info.strAddr); } }); //设置地图相关 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); option.setCoorType("bd09ll"); option.setScanSpan(300000); mLocClient.setLocOption(option); mLocClient.start(); mMapView.getController().setZoom(16); mMapView.getController().enableClick(true); mMapView.displayZoomControls(true); mMapListener = new MKMapViewListener() { public void onMapMoveFinish() { } public void onClickMapPoi(MapPoi mapPoiInfo) { // TODO Auto-generated method stub String title = ""; if (mapPoiInfo != null) { title = mapPoiInfo.strText; Toast.makeText(MainActivity.this, title, Toast.LENGTH_SHORT) .show(); } } }; mMapView.regMapViewListener(MyApplication.getInstance().mBMapManager, mMapListener); myLocationOverlay = new MyLocationOverlay(mMapView); locData = new LocationData(); myLocationOverlay.setData(locData); mMapView.getOverlays().add(myLocationOverlay); myLocationOverlay.enableCompass(); mMapView.refresh(); } private void initMapView() { mMapView.setLongClickable(true); } /** * 监听函数,又新位置的时候,格式化成字符串,输出到屏幕中 */ public class MyLocationListenner implements BDLocationListener { public void onReceiveLocation(BDLocation location) { if (location == null) return; locData.latitude = location.getLatitude(); locData.longitude = location.getLongitude(); locData.direction = 2.0f; locData.accuracy = location.getRadius(); locData.direction = location.getDerect(); Log.d("loctest", String.format("before: lat: %f lon: %f", location.getLatitude(), location.getLongitude())); myLocationOverlay.setData(locData); mMapView.refresh(); mMapController .animateTo(new GeoPoint((int) (locData.latitude * 1e6), (int) (locData.longitude * 1e6)), mHandler .obtainMessage(1)); } public void onReceivePoi(BDLocation poiLocation) { if (poiLocation == null) { return; } } } public class NotifyLister extends BDNotifyListener { public void onNotify(BDLocation mlocation, float distance) { } } @Override protected void onPause() { mMapView.onPause(); super.onPause(); } @Override protected void onResume() { mMapView.onResume(); super.onResume(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mMapView.onRestoreInstanceState(savedInstanceState); } public static void getPosition(GeoPoint g) { mkSerach.reverseGeocode(g); showAddr.setText("获取位置中..."); } }
Xml布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/showAddr" android:gravity="center" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="选择地点" android:textSize="20dp" /> <com.baidu.mapapi.map.MapView android:id="@+id/bmapsView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> </LinearLayout>
三、绘制图形 |
MyIcon 的onDraw实现绘制中心点的图标,MyIcon2绘制指示器图标,如图所示
public class MyIcon extends View { public static int w; public static int h; public static Bitmap mBitmap; public MyIcon(Context context) { super(context); mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.me); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); w = this.getWidth() / 2 - mBitmap.getWidth() / 2; h = this.getHeight() / 2 - mBitmap.getHeight() / 2; canvas.drawBitmap(mBitmap, w, h, null); } } public class MyIcon2 extends View{ public static int w; public static int h; private Bitmap mBitmap; public MyIcon2(Context context) { super(context); mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.jiewo); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); w = this.getWidth() / 2 - mBitmap.getWidth() / 2; h = (this.getHeight() / 2 - mBitmap.getHeight() / 2) - ( MyIcon.mBitmap.getHeight()/2); canvas.drawBitmap(mBitmap, w, h, null); } }
作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:![JRedu技术交流 技术分享](https://image.cha138.com/20200610/d5510f5e1775483fa27dd2884b0bd1c1.jpg)
出处:http://www.cnblogs.com/jerehedu/
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:
![JRedu技术交流 技术分享](https://image.cha138.com/20200610/d5510f5e1775483fa27dd2884b0bd1c1.jpg)
以上是关于怎么用百度地图api自动获取当前位置(谷歌的也行)的主要内容,如果未能解决你的问题,请参考以下文章