我想从地图上替换一个标记,当用户访问该位置(接近一个标记)



首先,我像这样绘制Marker:

public void addMarker(String title,String  lat,String Lng,int id,String address,int f)
{    
        marker= mMap.addMarker(new MarkerOptions().snippet(title)
                .title(title+", "+address)
                .position(new LatLng(Double.valueOf(lat), Double.valueOf(Lng)))
                .icon(BitmapDescriptorFactory.fromResource(id)));
        LatLng coordinate = new LatLng(Double.valueOf(lat), Double.valueOf(Lng));
        CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(coordinate, 10);
        mMap.animateCamera(yourLocation);
        mMarkerArray.add(marker);
}

之后,当我到达任何现有的Location

时,我试图用另一个图标替换标记
@Override
public void onLocationChanged(Location location)
{
    Log.d("latitude_main", "onlocation???");
    Geocoder geocoder;
    List<Address> addresses;
    geocoder = new Geocoder(this, Locale.getDefault());
    double latitude = location.getLatitude();
    double longitude = location.getLongitude();
    Log.e("latitude_main", "latitude--" + latitude+"longitude="+longitude);
    current_lat= String.valueOf(latitude);
    current_lng= String.valueOf(longitude);
    Log.e("latitude_main","size-=="+salesmanlocationArrayList.size() );
   for(int i=0;i<salesmanlocationArrayList.size();i++)
   {           
       if(salesmanlocation.getLati().equals("12.9165757") && salesmanlocation.getLongi().equals("77.6101163"))
       {           
            mMap.addMarker(new MarkerOptions()
                   .snippet(""+i).title(salesmanlocation.getFirm_name()+", "+salesmanlocation.getAddress())
                   .position(new LatLng(Double.valueOf(salesmanlocation.getLati().toString()), Double.valueOf(salesmanlocation.getLongi().toString())))
                   .icon(BitmapDescriptorFactory.fromResource(R.drawable.event_events_select)));
       }
       mapFragment.getMapAsync(this);
   }
}

我想在用户访问该位置时从地图上删除标记

你可以简单地定义一个OnMyLocationChangeListener类来执行你的任务,并在你的GoogleMap实例上设置它,这样你就可以在你的应用程序中随时使用它。

步骤1 -定义监听器

public class MyMarkerLocationListener implements GoogleMap.OnMyLocationChangeListener {
    List<Marker> markerList;
    int MY_DISTANCE;
    GoogleMap mMap;
    public MyMarkerLocationListener(List<Marker> markerList, int meters, GoogleMap mMap)
    {
        this.markerList = markerList;
        this.MY_DISTANCE = meters;
        this.mMap = mMap;
    }
    @Override
    public void onMyLocationChange(Location location) {
        // your code/logic
        //...
        Location myNewLocation = location;
        Location someMarkerLocation = new Location("some location");
        //for each marker on your list
        //check if you are close to it
        for (Marker m : markerList) {
            LatLng markerPosition = m.getPosition();
            someMarkerLocation.setLatitude(markerPosition.latitude);
            someMarkerLocation.setLongitude(markerPosition.longitude);
            if (myNewLocation.distanceTo(someMarkerLocation) < MY_DISTANCE) {
                //remove marker
                m.remove();
                //or if you still want to use it later
                //m.setVisible(false);
                // add your new marker
                //mMap.addMarker(new MarkerOptions().icon()....);
            }
        }
    }
}

在定义你的类之后,你只需在你的片段或活动代码的映射上设置监听器=)

步骤2 -实例化监听器并设置它

MyMarkerLocationListener myListener = new MyMarkerLocationListener(mMarkerArray, 100, mMap);
mMap.setOnMyLocationChangeListener(myListener);

更新在评论中回答你的问题:

你应该初始化mMap在使用它之前,看看这段代码从这个Stackoverflow问题

    public class MapPane extends Activity implements OnMapReadyCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_activity);
    MapFragment mapFragment = (MapFragment) getFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap map) {
//DO WHATEVER YOU WANT WITH GOOGLEMAP
 map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        map.setMyLocationEnabled(true);
        map.setTrafficEnabled(true);
        map.setIndoorEnabled(true);
        map.setBuildingsEnabled(true);
        map.getUiSettings().setZoomControlsEnabled(true);
    }
}

别忘了你的activity应该实现OnMapReadyCallback接口这样onMapReady方法就会被调用

你只能在地图准备好后才能使用它

希望这对你有帮助!

相关内容

最新更新