通过手指点击屏幕从而获取所点击点的地理坐标是一个在实际应用中较为常见的功能。下面,我将为大家介绍如何实现此功能。
基本原理:通过点击获取屏幕坐标,利用坐标转换的接口,把屏幕坐标转换为地理坐标。
有了以上的基本原理,我们就可以去具体实现了,步骤如下:
第一步,集成MapView,重写onTouchEvent方法。代码如下:
public class MyMapView extends MapView { public MyMapView(Context context) { super(context); } public MyMapView(Context context, AttributeSet set) { super(context, set); } public MyMapView(Context context, AttributeSet set, int i) { super(context, set, i); } @Override public boolean onTouchEvent(MotionEvent arg0) { // TODO Auto-generated method stub int x = (int)arg0.getX(); int y = (int)arg0.getY(); GeoPoint geoPoint = this.getProjection().fromPixels(x, y); int xx = geoPoint.getLongitudeE6(); int yy = geoPoint.getLatitudeE6(); Log.d("xxxxxxxxxxx", Integer.toString(xx)); Log.d("yyyyyyyyyyy", Integer.toString(yy)); return super.onTouchEvent(arg0); } }
第二步,在布局文件中添加上一步自己定义的MapView。代码如下:
<com.baidumap.basemap.MyMapView android:id="@+id/bmapsView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/button1" android:clickable="true" />
第三步,在主类中定义并初始化MyMapView对象,运行程序,点击屏幕就可以获取点击点的地理坐标了。
注意事项:
1 在自定义并继承MapView的时候需要注意几个几个构造方法,特别是public MyMapView(Context context, AttributeSet set),一定要有,不然会报错。
2 布局文件添加的MapView不再是我们百度为大家提供的MapView,应该添加自定义的那个MyMapView(否则有什么意义呢?)。
3 在使用setContentView方法之前一定要先初始化BMapManager,否则会报错,这个在官方开发指南及本博客的相关章节都有强调,可是还有很多不细心的开发者犯这个小错误。
最后希望通过我们大家共同的努力使百度地图SDK越来越好!
更多详细信息请登录百度地图API官方网站:http://developer.baidu.com/map/
百度地图API论坛:http://bbs.lbsyun.baidu.com/