2016-09-29 46 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

相關問題