如何在 Google Maps v2 上将标记添加到当前位置?

Posted

技术标签:

【中文标题】如何在 Google Maps v2 上将标记添加到当前位置?【英文标题】:How to add markers to current location on Google Maps v2? 【发布时间】:2016-08-22 02:58:47 【问题描述】:

我正在制作一个基于位置的提醒应用,并且想知道如何将标记添加到当前位置。

我正在使用以下代码:

 public void onMapReady(GoogleMap googleMap) 
    mMap = googleMap;
    mMap.setMapType(googleMap.MAP_TYPE_NORMAL);
    LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 10f));

    //Add a marker in Sydney, Australia, and move the camera.

    mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() 
        @Override
        public void onMapClick(LatLng latLng) 
            mMap.clear();
            locationLat = latLng.latitude;
            locationLong = latLng.longitude;

            AddLocationActivity.this.addMarker(new LatLng(locationLat,locationLong), AddLocationActivity.locationName);

            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(locationLat,locationLong), 10.9f));
            AddLocationActivity.this.mainClass.locationName = address;
            Log.i("AddLocationActivity",""+AddLocationActivity.this.mainClass.locationName);

        
    );


是否有任何方法可以缩放地图视图和/或将标记添加到当前位置?

【问题讨论】:

看看他们的文档:developers.google.com/maps/documentation/android-api/marker. 【参考方案1】:

根据以下更改您的代码:

 mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() 
    @Override
    public void onMapClick(LatLng latLng) 
        mMap.clear();
        Marker marker = mMap.addMarker(new MarkerOptions().position(latLng).title("Title"));
        marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN));

        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10.9f));
    
);

【讨论】:

用这些代码替换 cooment 行下方的 setOnMapClickListener() 代码部分。【参考方案2】:

试试这个

LatLng markerLocation = new LatLng(latitude,longitude); // latitude and longitude must be a float or double
Marker marker = mMap.addMarker(new MarkerOptions()
                    .position(markerLocation)); // any title you want

对于缩放地图视图,已经有一个默认功能。如果要添加底部,请使用手势,可以添加缩放控件

这是完整的代码

public void onMapReady(GoogleMap googleMap) 
    mMap = googleMap;
    mMap.setMapType(googleMap.MAP_TYPE_NORMAL);
    LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 10f));

    //Add a marker in Sydney, Australia, and move the camera.

    mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() 
        @Override
        public void onMapClick(LatLng latLng) 
            mMap.clear();

            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10f));
            Marker marker = mMap.addMarker(new MarkerOptions().position(latLng)); 

        
    );

【讨论】:

我不明白你,,,请告诉我应该为这段代码替换哪一行,,,【参考方案3】:

试试这个对我有用的方法

public class MainActivity extends Activity implements LocationListener 
 GoogleMap map;

 @Override
 protected void onCreate(Bundle savedInstanceState) 
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

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

  lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);

  map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
    .getMap();

 

 @Override
 public void onLocationChanged(Location location) 

  map.clear();

  MarkerOptions mp = new MarkerOptions();

  mp.position(new LatLng(location.getLatitude(), location.getLongitude()));

  mp.title("my position");

  map.addMarker(mp);

  map.animateCamera(CameraUpdateFactory.newLatLngZoom(
    new LatLng(location.getLatitude(), location.getLongitude()), 16));

 

 @Override
 public void onProviderDisabled(String provider) 
  // TODO Auto-generated method stub

 

 @Override
 public void onProviderEnabled(String provider) 
  // TODO Auto-generated method stub

 

 @Override
 public void onStatusChanged(String provider, int status, Bundle extras) 
  // TODO Auto-generated method stub

 


输出

【讨论】:

【参考方案4】:

您首先需要通过 google maps 中的 onlicationchangelistener 获取当前位置。这是代码中的监听器。

然后根据你得到的那个位置放置标记。

下面是代码部分-

private GoogleMap.OnMyLocationChangeListener myLocationChangeListener = new GoogleMap.OnMyLocationChangeListener() 
@Override
public void onMyLocationChange(Location location) 
    LatLng loc = new LatLng(location.getLatitude(), location.getLongitude());
    if(mMarker == null)
       mMarker = mMap.addMarker(new MarkerOptions().position(loc));
    else
       mMarker.remove();
       mMarker = mMap.addMarker(new MarkerOptions().position(loc));
    
       mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16.0f));
 
;

将监听器添加到地图。

mMap.setOnMyLocationChangeListener(myLocationChangeListener);

这会将标记放在当前位置。

【讨论】:

这是不推荐使用的方法

以上是关于如何在 Google Maps v2 上将标记添加到当前位置?的主要内容,如果未能解决你的问题,请参考以下文章

在 Google Maps API v2 中更改标记大小

在 Google Maps API v2 Android 中添加多个标记

添加大量标记时,Google Maps Android API v2 非常慢

居中位图标记(Google Maps Android API v2)

google-maps kml,如何标记线串?

Google Maps API v2:如何使标记可点击?