2016-09-29 41 views
2

首先,我绘制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); 
    } 
} 

达到我想从地图中删除标记用户访问该位置时的图标。

+1

清除地图上的上一个标记,然后添加新的标记。 –

回答

1

您可以简单地定义一个执行您的任务的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); 

UPDATE回答你的问题1在意见:

你应该使用它之前初始化MMAP,看看这段代码从这个Stackoverflow question

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); 
    } 
} 

不要忘记你的活动应该实现OnMapReadyCallback接口,这样的onMapReady方法被称为

您可以使用地图后,才准备

希望这有助于!

+0

感谢您给予回应,但我仍然收到空指针异常 – gautam

+0

@ user3881024你有没有跟踪空指针来自哪里? – HenriqueMS

+0

@ user3881024如果我是你,我会逐步进入调试模式,一步一步,以便我可以追踪它。 你也确定你需要调用mapFragment.getMapAsync(this);在那个循环里面?除非我错过了一些你不需要的东西,在这个方法中 – HenriqueMS