在android中的谷歌地图上获取位置触摸的坐标

时间:2014-08-06 06:11:27

标签: android google-maps

我想获取被触摸的位置坐标并将其传递给另一个活动。谷歌地图显示在我的活动中,但其触摸事件无效。我想得到触摸位置的坐标,并开始将这些坐标传递给另一个活动的另一个活动。它是我的代码:

public class MapActivity extends Activity {
    protected LocationManager locationManager;
    String stlatitude = null, stlongitude = null;
    private GoogleMap googleMap;
    String locationName = "";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Bundle b = getIntent().getExtras();
        stlatitude = b.getString("latitude");
        stlongitude = b.getString("longitude");
        locationName = b.getString("location_name");

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        try {

            initilizeMap();

            googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            googleMap.setMyLocationEnabled(true);
            MarkerOptions marker = new MarkerOptions().position(
                    new LatLng(Float.parseFloat(stlatitude), Float
                            .parseFloat(stlongitude))).title(locationName);
            googleMap.addMarker(marker);
            if (stlatitude != null || stlongitude != null) {
                LatLng myLatLng = new LatLng(Float.parseFloat(stlatitude),
                        Float.parseFloat(stlongitude));
                googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
                        myLatLng, 12.0f));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }



    @Override
    protected void onResume() {
        super.onResume();
        initilizeMap();
    }


    private void initilizeMap() {
        if (googleMap == null) {
            googleMap = ((MapFragment) getFragmentManager().findFragmentById(
                    R.id.map)).getMap();

            // check if map is created successfully or not
            if (googleMap == null) {
                Toast.makeText(getApplicationContext(),
                        "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }

    public boolean onTouchEvent(MotionEvent event, MapView mapView)
     {
     //---when user lifts his finger---
     if (event.getAction() == 1) {
     GeoPoint p = mapView.getProjection().fromPixels(
     (int) event.getX(),
     (int) event.getY());
     Toast.makeText(getBaseContext(),
     p.getLatitudeE6() / 1E6 + "," +
     p.getLongitudeE6() /1E6 ,
     Toast.LENGTH_SHORT).show();
     }
     return false;
     }
     }

3 个答案:

答案 0 :(得分:7)

Google Maps提供了一个采用LatLng的OnMapClickListener。 首先,将onMapClickListener设置为您的地图,然后在侦听器中执行您的操作。 从头顶看,这应该看起来像

googleMap.setOnMapClickListener(new OnMapClickListener() {
   @Override
   public void onMapClick(LatLng point) {
      Log.d("DEBUG","Map clicked [" + point.latitude + " / " + point.longitude + "]");
      //Do your stuff with LatLng here
      //Then pass LatLng to other activity
   }
});

确认后,将它放在initilizeMap()中,您的googleMap不会为空。

我目前无法测试代码,但我很确定它看起来应该是这样的。否则,关于OnMapClickListenerLatLng的Google文档应该有所帮助。

希望这有助于你,让我知道!

答案 1 :(得分:0)

将OnMapClickListener添加到您的活动中并获取onMapClick

中的坐标

答案 2 :(得分:0)

您不需要实现任何Click侦听器。 GoogleMaps API带有一个内置的侦听器,该侦听器提供了Map Click上的坐标(LatLng)。

完整代码

活动代码

public class MapActivity extends AppCompatActivity implements OnMapReadyCallback, GoogleMap.OnMapClickListener{

    private GoogleMap Map;
    private SupportMapFragment mapFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_map);

       mapFragment = (SupportMapFragment) getSupportFragmentManager()
                                              .findFragmentById(R.id.map);

       mapFragment.getMapAsync(this);

    }

   /* 
    *   Its the callback method for OnMapReadyCallback interface
    *   attach listener when the map is ready
    */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        mMap.setOnMapClickListener(this);
    }

    // Its the callback method for GoogleMap.OnMapClickListener interface
    @Override
    public void onMapClick(LatLng latLng) {
        Log.d("Map", latlng.toString());
    }


}

布局代码:activity_map.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".activities.MapActivity">
    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".activities.AddressActivity"
    />
</RelativeLayout>

注意:

最重要的一点是在地图准备好后附加MapClickListener。
为此,我们将mMap.setOnMapClickListener(this);放入onMapReady(GoogleMap googleMap)方法中,否则将获得空指针异常