2013-05-22 6 views
2

Google지도 v2에서 원이 그려지는 위치가 변경되면 바로 현재 위치로 표시됩니다. 이제 내가보고있는 것은 위치가 변경 될 때마다 원이 삭제되지 않고 계속 그려집니다 (위치가 동일하면 서로 겹쳐집니다). Marker에서도 똑같은 일이 발생합니다. 다음은 Google지도 v2에서 안드로이드로 원과 마커를 지우는 법

@Override 
public void onLocationChanged(Location location) { 
    if (location != null) { 

    // Create a LatLng object for the current location 
    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); 

    // Show the current location in Google Map 
    map.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 

    // Zoom in the Google Map 
    map.animateCamera(CameraUpdateFactory.zoomTo(14)); 

    CircleOptions circleOptions = new CircleOptions().center(latLng) // set center 
    .radius(1000) // set radius in meters 
    .fillColor(Color.TRANSPARENT) // default 
    .strokeColor(0x10000000).strokeWidth(5); 

    myCircle = map.addCircle(circleOptions); 

    map.addMarker(new MarkerOptions().position(latLng).title("You are here!")); 
} 

V2 I는 구글지도에서 원을 그리는 데 사용하고있는 코드입니다 어떻게 내가 원이 다음 번에 그려지고 때마다 이전의 원과 마커에서 삭제되어 있는지 확인하십시오 Google지도. 코드에서 변경해야 할 사항은 무엇입니까?

도움이 될 것입니다.

답변

2

지도에서 물건을 제거하는 것은 간단합니다. 어떤 이유로 든 GoogleMaps v2에서는 Marker의 ID를 가져 와서 그 값을 자동으로 생성하므로 꽤 쓸모 없으므로 단순히 제거 할 수 없습니다. 이 문제를 해결하려면 제거 할 개체에 대한 참조를 저장할 수있는 무언가를 만드는 것뿐입니다. 이를 수행하는 한 가지 방법은 HashMap을 만들고 Marker, 서클 또는 일부 고유 한 ID를 사용하여 제거 할 수있는 기능에 대한 참조를 저장하는 것입니다. HashMap에지도에있는 것들에 대한 참조를 저장하면 위치 업데이트가 발생할 때마다 해당 키와 연결된 마커에서 remove를 호출 할 수 있습니다. 동그라미에 대해서도 마찬가지입니다 (아래에 나와있는 유형을 설정하는 경우 다른 HashMap이 필요하지만 두 가지를 모두 저장할 객체 문자열 인 일반 String을 사용할 수 있는지 여부는 알 수 없습니다).

은 추가, 그런 당신이 당신의 Marker 또는 다른 맵 개체를 만들 어디서든 Activity

private HashMap<String, Marker> mapStuff = new HashMap<String, Marker>(); 

내에서 모든 메소드에서 액세스 할 수 있도록 자사의 인스턴스 변수처럼 HashMap를 선언,이 방법을 사용하려면 일부 키 값

Marker dude = map.addMarker(new MarkerOptions() 
.position(newLatLng(latitude, longitude)) 
.title(MARKER_TITLE) 
.snippet(SNIPPET)); 
mapStuff.put("userMarker", dude); 

개념은 정말 다른 포스터에 의해 제안 된 것과 동일로 HashMap에 불과 Marker을 가지고 인스턴스 변수로 사용하고 거기에 참조를 저장합니다. 둘 다 똑같은 일을합니다. HashMap 접근 방식은 여러 마커 또는 개체를 다루는 경우에 가장 적합합니다. Marker 또는 하나의 서클 만 다루는 경우 하나의 마커를 추가하거나 제거 할 때 Collection을 사용할 필요가 없으므로 단일 변수 접근이 더 정확할 수 있습니다. 당신이 당신의 위치를 ​​업데이트 할 때 onLocationChanged 아마, 참조

userMarker = map.addMarker(new MarkerOptions() 
.position(newLatLng(latitude, longitude)) 
.title(MARKER_TITLE) 
.snippet(SNIPPET)); 

를 저장, 그냥

private Marker userMarker; 

를 선언 한 다음지도에 Marker를 추가 할 경우 단지 마커의 실존을 확인하고 제거 그리고 만약 본

if(userMarker == null){ 
    displayUserMarker(location); 
} else { 
    userMarker.remove; 
    displayUserMarker(location); 
} 
+0

감사 Rarw 제안합니다. 모든 예제를 통해이 사실을 더 잘 이해할 수 있습니다. – ferhan

+0

조금씩 추가하겠습니다. – Rarw

1
map.clear(); 

토륨 추가 다시 추가 전에는 if (location!= null이) 그래서 위치가 모든 마커와 원을 변경할 때마다이 제거되고 모든

0

먼저 다시 그려 것을

, 당신은

myMarker = map.addMarker(new MarkerOptions().position(latLng).title("You are here!")); 

동그라미에 계속처럼 마커에 대한 참조를 유지 당신이 그들을 제거 할 때, 단지 remove() 전화 :

myCircle.remove(); 
myMarker.remove(); 
관련 문제