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

3

我希望能够获取触摸位置的坐标并将其传递给另一个活动。谷歌地图显示在我的活动中,但是它的触摸事件不起作用。我想要获取触摸位置的坐标,并将这些坐标传递给另一个活动,启动该活动。以下是我的代码:

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个回答

7
谷歌地图提供了一个OnMapClickListener,它需要一个LatLng参数。首先,在地图上设置一个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
   }
});

在确保你的googleMap不为null之后,将此代码放入initializeMap()中。
目前我无法测试代码,但我非常确定它应该像这样。否则,请参考Google关于OnMapClickListenerLatLng的文档进行帮助。
希望这可以帮助你,让我知道!

感谢您提供这种简单易懂的解决方案,它确实像您说的那样有效。 - user3598397

0
在你的活动中添加OnMapClickListener并在onMapClick中获取坐标。

0

您无需实现任何“点击监听器”(Click listener)。

GoogleMaps API自带一个内置的监听器,可以在地图被点击时提供坐标值(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。
为此,我们在onMapReady(GoogleMap googleMap)方法中添加mMap.setOnMapClickListener(this);,否则您将会收到一个空指针异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接