通過手指點擊屏幕從而獲取所點擊點的地理坐標是一個在實際應用中較為常見的功能。下面,我將為大家介紹如何實現此功能。
基本原理:通過點擊獲取屏幕坐標,利用坐標轉換的接口,把屏幕坐標轉換為地理坐標。
有了以上的基本原理,我們就可以去具體實現了,步驟如下:
第一步,集成MapView,重寫onTouchEvent方法。代碼如下:
[java]
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。代碼如下:
[html]
<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" /> www.2cto.com
第三步,在主類中定義並初始化MyMapView對象,運行程序,點擊屏幕就可以獲取點擊點的地理坐標了。
注意事項:
1 在自定義並繼承MapView的時候需要注意幾個幾個構造方法,特別是public MyMapView(Context context, AttributeSet set),一定要有,不然會報錯。
2 布局文件添加的MapView不再是我們百度為大家提供的MapView,應該添加自定義的那個MyMapView(否則有什麼意義呢?)。
3 在使用setContentView方法之前一定要先初始化BMapManager,否則會報錯,這個在官方開發指南及本博客的相關章節都有強調,可是還有很多不細心的開發者犯這個小錯誤。
最後希望通過我們大家共同的努力使百度地圖SDK越來越好!