Xóa điểm đánh dấu khỏi GoogleMap


124

Trong API Google Maps mới dành cho Android, chúng tôi có thể thêm một điểm đánh dấu , nhưng không có cách nào để (dễ dàng) xóa một điểm đánh dấu .

Giải pháp của tôi là giữ các điểm đánh dấu trong bản đồ và vẽ lại bản đồ khi tôi muốn xóa điểm đánh dấu, nhưng nó không hiệu quả lắm.

private final Map<String, MarkerOptions> mMarkers = new ConcurrentHashMap<String, MarkerOptions>();

private void add(String name, LatLng ll) {
  final MarkerOptions marker = new MarkerOptions().position(ll).title(name);
  mMarkers.put(name, marker);

  runOnUiThread(new Runnable() {
    @Override
    public void run() {
      mMap.addMarker(marker);
    }
  });
}

private void remove(String name) {
  mMarkers.remove(name);

  runOnUiThread(new Runnable() {
    @Override
    public void run() {
      mMap.clear();

      for (MarkerOptions item : mMarkers.values()) {
        mMap.addMarker(item);
      }
    }
  });
}

Có ai có một ý tưởng tốt hơn?


Tại sao bạn sử dụng Runnable () để thêm các điểm đánh dấu?
user3927312 Ngày

Để làm điều đó trên chuỗi giao diện người dùng
Jonas

sử dụng mMap.clear () để xóa tất cả các điểm đánh dấu
Bahaa Salaheldin

Câu trả lời:


260

Chữ ký phương thức cho addMarkerlà:

public final Marker addMarker (MarkerOptions options)

Vì vậy, khi bạn thêm một điểm đánh dấu vào a GoogleMapbằng cách chỉ định các tùy chọn cho điểm đánh dấu, bạn nên lưu Markerđối tượng được trả về (thay vì MarkerOptionsđối tượng mà bạn đã sử dụng để tạo nó). Đối tượng này cho phép bạn thay đổi trạng thái điểm đánh dấu sau này. Khi bạn hoàn thành điểm đánh dấu, bạn có thể gọi Marker.remove()để xóa nó khỏi bản đồ.

Ngoài ra, nếu bạn chỉ muốn ẩn nó tạm thời, bạn có thể chuyển đổi khả năng hiển thị của điểm đánh dấu bằng cách gọi Marker.setVisible(boolean).


1
Điều này không làm việc cho tôi. marker.setVosystem (false), marker.remove (), thậm chí markerManager.remove (marker) không ảnh hưởng đến bản đồ. Các điểm đánh dấu vẫn còn. bất kỳ gợi ý?
Totalys

1
Hãy xem nhận xét của tôi bên dưới về việc giữ một điểm đánh dấu, trong khi nó không được sử dụng nhiều sau khi đã bị xóa khỏi bản đồ, nếu bạn nên quyết định kiểm tra các giá trị của nó .. phương pháp Xóa đặt giá trị thẻ thành null ...
Speckpgh

Tài giỏi! Cảm ơn!
Taslim Oseni

32

Thêm điểm đánh dấu vào bản đồ như thế này

Marker markerName = map.addMarker(new MarkerOptions().position(latLng).title("Title"));

Sau đó, bạn sẽ có thể sử dụng phương pháp loại bỏ, nó sẽ chỉ xóa điểm đánh dấu đó

markerName.remove();

25

để xóa tất cả các nét vẽ nguệch ngoạc trong việc sử dụng bản đồ

map.clear()

14
Điều này sẽ xóa tất cả các lớp phủ trên bản đồ, không chỉ là một điểm đánh dấu như câu hỏi gợi ý.
Emzor

4

nếu điểm đánh dấu tồn tại loại bỏ điểm đánh dấu cuối cùng. nếu điểm đánh dấu không tồn tại, hãy tạo điểm đánh dấu hiện tại

Marker currentMarker = null;
if (currentMarker!=null) {
    currentMarker.remove();
    currentMarker=null;
}

if (currentMarker==null) {
    currentMarker = mMap.addMarker(new MarkerOptions().position(arg0).
    icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
}

3

Nếu bạn sử dụng ngôn ngữ Kotlin, bạn chỉ cần thêm mã này:

Tạo các biến toàn cục của GoogleMapMarkercác loại.

Tôi sử dụng điểm đánh dấu biến để làm cho giá trị điểm đánh dấu biến có thể thay đổi trực tiếp

private lateinit var map: GoogleMap
private lateinit var marker: Marker

Và tôi sử dụng hàm / phương pháp này để thêm điểm đánh dấu trên bản đồ của mình:

private fun placeMarkerOnMap(location: LatLng) {
    val markerOptions = MarkerOptions().position(location)
    val titleStr = getAddress(location)
    markerOptions.title(titleStr)
    marker = map.addMarker(markerOptions)
}

Sau khi tạo hàm, tôi đặt mã này vào onMapReady()để xóa điểm đánh dấu và tạo một mã mới:

map.setOnMapClickListener { location ->
        map.clear()
        marker.remove()
        placeMarkerOnMap(location)
    }

Sẽ rất tốt nếu bạn muốn hiển thị vị trí địa chỉ khi bạn nhấp vào điểm đánh dấu, hãy thêm mã này để ẩn và hiển thị địa chỉ điểm đánh dấu nhưng bạn cần một phương pháp để lấy vị trí địa chỉ. Tôi nhận được mã từ bài đăng này: Làm thế nào để nhận địa chỉ đầy đủ từ vĩ độ và kinh độ?

map.setOnMarkerClickListener {marker ->
        if (marker.isInfoWindowShown){
            marker.hideInfoWindow()
        }else{
            marker.showInfoWindow()
        }
        true
    }

2

sử dụng mã sau:

 mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
       @Override
       public boolean onMarkerClick(Marker marker) {

           marker.remove();
           return true;
       }
   });

khi bạn nhấp vào "một điểm đánh dấu" , bạn có thể xóa nó.


2

Chỉ là LƯU Ý, thứ mà tôi đã lãng phí hàng giờ để theo dõi đêm nay ...

Nếu bạn quyết định giữ một điểm đánh dấu vì lý do nào đó, sau khi bạn ĐÃ XÓA nó khỏi bản đồ ... getTag sẽ trả về NULL, mặc dù các giá trị nhận được còn lại sẽ trả về với các giá trị bạn đã đặt khi điểm đánh dấu được tạo .. .

Giá trị TAG được đặt thành NULL nếu bạn xóa một điểm đánh dấu và sau đó cố gắng tham chiếu nó.

Có vẻ như là một lỗi với tôi ...


1

1. Nếu bạn muốn xóa một điểm đánh dấu, bạn có thể làm điều đó marker.remove(); hoặc bạn cũng có thể ẩn điểm đánh dấu thay vì xóa nó như

 marker.setVisible(false);

và hiển thị nó sau này bất cứ khi nào cần.
2. Tuy nhiên, nếu bạn muốn xóa tất cả các điểm đánh dấu khỏi bản đồ, Sử dụng map.clear();
Lưu ý: map.clear(); cũng sẽ xóa, Polylines, Circlesv.v.
3. Nếu bạn không muốn xóa, Polylines, Circlesv.v., hãy sử dụng một vòng lặp đến độ dài của điểm đánh dấu (nếu bạn có nhiều điểm đánh dấu) để xóa những Kiểm tra Ví dụ ở đây HOẶC đặt chúng Hiển thị là sai Và không sử dụng map.clear();trong trường hợp như vậy.


1

Tạo một biến toàn cục để theo dõi điểm đánh dấu

private Marker currentLocationMarker;

// Xóa điểm đánh dấu cũ

            if (null != currentLocationMarker) {
                currentLocationMarker.remove();
            }

// Thêm điểm đánh dấu cập nhật vào và di chuyển máy ảnh

            currentLocationMarker = mMap.addMarker(new MarkerOptions().position(
                    new LatLng(getLatitude(), getLongitude()))
                    .title("You are now Here").visible(true)
                    .icon(Utils.getMarkerBitmapFromView(getActivity(), R.drawable.auto_front))
                    .snippet("Updated Location"));

            currentLocationMarker.showInfoWindow();

0

Tạo mảng với tất cả các điểm đánh dấu trên thêm trong bản đồ.

Sau đó, sử dụng:

Marker temp = markers.get(markers.size() - 1);
temp.remove();

0

Đối với những người đang làm theo ví dụ trên dự án GoogleMaps - MapWithMarker này, bạn có thể xóa điểm đánh dấu bằng cách làm như vậy

override fun onMapReady(googleMap: GoogleMap?) {
    googleMap?.apply {

        // Remove marker
        clear()

        val sydney = LatLng(-33.852, 151.211)
        addMarker(
            MarkerOptions()
                .position(sydney)
                .title("Marker in Sydney")
        )
        moveCamera(CameraUpdateFactory.newLatLng(sydney))
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.