android 实现点击地图获取经纬度功能

    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对象可以转换该点的经纬度。
    以下是本例的效果图及源码。
   android 实现点击地图获取经纬度功能_第1张图片 
     图-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>
复制代码
原文地址:http://www.apkbus.com/forum.php?mod=viewthread&tid=44920&reltid=67418&pre_thread_id=0&pre_pos=2&ext=

你可能感兴趣的:(android,Google,layout,float,resources,Constructor)