android 获取google mapview上某点的经纬度数据是相当简单的,只需要重写ItemizedOverlay类的onTap(GeoPoint p, MapView mapView)函数,p.getLatitudeE6(),p.getLongitudeE6()分别获取纬度和经度的函数。在重写onTap方法时,还需要定位一个点作为参考点,就是说先定位地图的某一点,然后再点击获取其他点的经纬度。
ItemizedOverlay有两个onTap函数分别是onTap(GeoPoint p, MapView mapView)和onTap(int index)。简单的区别就是onTap(int index)处理点击一个点的item,即点中某个图标触发的事件(不点中图标则不处理),如弹出提示信息,如果点中则返回true否则返回 false;onTap(GeoPoint p, MapView mapView)就是处理tap事件的,即是不管点不点中图标的区域都执行,点击在图标区域内返回true,区域外返回false。
要获取google mapview上的某点的经纬度就要重写onTap(GeoPoint p, MapView mapView)方法,因为该方法点击mapview任何一点都会触发事件,并传递GeoPoint参数。根据GeoPoint对象可以转换该点的经纬度。
以下是本例的效果图及源码。
2012-5-7 14:01 上传 下载附件 (56.63 KB)
图-1 点击地图获取经纬度功能
1.ClickMapviewActivity .java
  1. package com.clickmapview.main;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. import com.google.android.maps.GeoPoint;
  5. import com.google.android.maps.MapActivity;
  6. import com.google.android.maps.MapController;
  7. import com.google.android.maps.MapView;
  8. import com.google.android.maps.Overlay;
  9. import com.google.android.maps.OverlayItem;

  10. import android.content.res.Resources;
  11. import android.graphics.drawable.Drawable;
  12. import android.os.Bundle;

  13. public class ClickMapviewActivity extends MapActivity {
  14. // 地图控件的变量
  15. private MapController mapController;
  16. private List<GeoPoint> updatePoints = new ArrayList<GeoPoint>();
  17. private List<Overlay> mapOverlays;
  18. private MapView mapView;

  19. /** Called when the activity is first created. */
  20. @Override
  21. public void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.main);
  24. // 地图控件初始化
  25. mapView = (MapView) findViewById(R.id.mapview);
  26. mapView.setClickable(true);
  27. mapView.setBuiltInZoomControls(true);
  28. mapController = mapView.getController();
  29. mapView.setTraffic(true);// 交通图
  30. mapView.setSatellite(false);// 卫星图
  31. // mapView.setStreetView(true);//街景
  32. mapOverlays = mapView.getOverlays();
  33. mapController.setZoom(18);
  34. // 定义一个经纬度
  35. GeoPoint gpoint = new GeoPoint((int) (22.533477 * 1000000), (int) (113.992628 * 1000000));

  36. Resources r = this.getResources();
  37. Drawable drawale = r.getDrawable(R.drawable.current);
  38. // 添加一点标注位置
  39. updatePoints.add(gpoint);
  40. //该点的信息
  41. OverlayItem overlayitem = new OverlayItem(gpoint, "标题", "内容");
  42. MyItemizedOverlay iconOverlay = new MyItemizedOverlay(updatePoints,
  43. drawale, this);
  44. // 添加图层
  45. iconOverlay.addOverlay(overlayitem);
  46. mapOverlays.add(iconOverlay);
  47. // 移到中间
  48. mapController.animateTo(gpoint);
  49. }

  50. @Override
  51. protected boolean isRouteDisplayed() {
  52. // TODO Auto-generated method stub
  53. return false;
  54. }
  55. }
复制代码 2.MyItemizedOverlay.java
  1. package com.clickmapview.main;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. import android.content.Context;
  5. import android.graphics.Canvas;
  6. import android.graphics.drawable.Drawable;
  7. import android.widget.Toast;

  8. import com.google.android.maps.GeoPoint;
  9. import com.google.android.maps.ItemizedOverlay;
  10. import com.google.android.maps.MapView;
  11. import com.google.android.maps.OverlayItem;

  12. public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {

  13. private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
  14. private Context context;
  15. public MyItemizedOverlay(List<GeoPoint> points,Drawable defaultMarker,Context context) {
  16. // Wrap this around our defaultMarker
  17. super(boundCenterBottom(defaultMarker));
  18. this.context=context;
  19. // TODO Auto-generated constructor stub
  20. }

  21. // Get ArrayList items
  22. @Override
  23. protected OverlayItem createItem(int i) {
  24. // TODO Auto-generated method stub
  25. return mOverlays.get(i);
  26. }
  27. //OverlayItem
  28. @Override
  29. public int size() {
  30. // TODO Auto-generated method stub
  31. return mOverlays.size();
  32. }
  33. // 点击地图标注显示的内容
  34. @Override
  35. protected boolean onTap(int index) {
  36. //这个方法的重写弹出信息等
  37. return true;
  38. }
  39. @Override
  40. public void draw(Canvas canvas, MapView mapView, boolean shadow) {
  41. // TODO Auto-generated method stub
  42. super.draw(canvas, mapView, shadow);
  43. }
  44. // Define a method in order to add new OverlayItems to our ArrayList
  45. public void addOverlay(OverlayItem overlay) {
  46. // add OverlayItems
  47. mOverlays.add(overlay);
  48. populate();
  49. }
  50. //该方法的重写可以相应点击图标的区域内还是外
  51. @Override
  52. public boolean onTap(GeoPoint p, MapView mapView) {
  53. // TODO Auto-generated method stub
  54. //p获取的经纬度数据是整型变量,需要转换为float类型
  55. float lat=p.getLatitudeE6();
  56. float lon=p.getLongitudeE6();
  57. //将当前的经纬度显示出来
  58. Toast.makeText(context, "当前位置\n纬度:"+lat/1000000+"\n经度:"+lon/1000000, Toast.LENGTH_LONG).show();
  59. return super.onTap(p, mapView);
  60. }
  61. }
复制代码 3.main.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <com.google.android.maps.MapView
  7. android:id="@+id/mapview"
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent"
  10. android:apiKey="0bICReSImsEvI16EsnPDUkwRIsqPitPYH7I5ugQ" />
  11. </LinearLayout>

更多相关文章

  1. Android(安卓)Location服务之Geocoder
  2. Android百度地图SDK:隐藏比例尺,隐藏百度LOGO,隐藏缩放控件
  3. 【技术直通车】ArcGIS for Android地图控件的5大常见操作
  4. Android使用Google提供的地图实现定位时LocationListener的各个
  5. android关于百度地图显示网格问题
  6. Android(安卓)v4包下的PagerTitleStrip,ViewPager的页面标题
  7. android 使用基站 wifi定位
  8. Android地图开发之OpenStreetMap基础教程
  9. Android(安卓)应用保存状态

随机推荐

  1. android在EditText中插入表情图片
  2. Android中Uri的使用
  3. 8步教你打开Android之门 NDK入门教程
  4. DRM in Android
  5. 构建 Android 手机 RSS 阅读器
  6. 30+关于如何成为更好Android开发者的短小
  7. Android中Content Provide
  8. Android音乐播放器开发
  9. Android程序库
  10. Android中常用的adb命令