webentwicklung-frage-antwort-db.com.de

Entfernen Sie den vorherigen Marker und fügen Sie einen neuen Marker in Google Map v2 hinzu

Ich möchte eine aktuelle Markierung nach langem Klicken auf die Karte irgendwo entfernen und an dieser Stelle eine neue Markierung erstellen. Ich habe die Google-Karte bei langem Klicken auf die Karte gelöscht. Es wird eine neue Markierung erstellt, aber die vorherige Markierung wird ebenfalls angezeigt. 

Mein Code lautet:

public class EditLocation extends Fragment {

View v;
Context c;
GoogleMap MAP;
Button back;
int loc;
String lat;
boolean isTapped = true;

public EditLocation(Context c, int location, String latitude) {
    // TODO Auto-generated constructor stub
    this.c = c;
    this.loc = location;
    this.lat = latitude;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    v = inflater.inflate(R.layout.map, container, false);

    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(c);
    if (status != ConnectionResult.SUCCESS) {
        int requestCode = 10;
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status,
                (Activity) c, requestCode);
        dialog.show();
    } else {
        FragmentManager myFM = ((FragmentActivity) c)
                .getSupportFragmentManager();
        final SupportMapFragment myMAPF = (SupportMapFragment) myFM
                .findFragmentById(R.id.fragmentmap);

        MAP = myMAPF.getMap();

        MAP.setMyLocationEnabled(true);

        LocationManager locationManager = (LocationManager) c
                .getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria = new Criteria();

        String provider = locationManager.getBestProvider(criteria, true);

        final Location location = locationManager
                .getLastKnownLocation(provider);
        final LatLng currentPosition = new LatLng(location.getLatitude(),
                location.getLongitude());

        MAP.setOnMapClickListener(new OnMapClickListener() {
            @Override
            public void onMapClick(LatLng point) {
                // TODO Auto-generated method stub

                MAP.addMarker(new MarkerOptions()
                        .position(currentPosition)
                        .snippet(
                                "Lat:" + location.getLatitude() + "Lng:"
                                        + location.getLongitude())
                        .icon(BitmapDescriptorFactory
                                .defaultMarker(BitmapDescriptorFactory.HUE_Azure))
                        .title("ME"));
                Log.e("lat", "" + point);

            }
        });

        MAP.setOnMapLongClickListener(new OnMapLongClickListener() {

            @Override
            public void onMapLongClick(LatLng point) {
                // TODO Auto-generated method stub

                // isTapped = false;
                MAP.clear();

                MAP.addMarker(new MarkerOptions().position(point)

                .title(point.toString()));

            }

        });

    }

    return v;

}
20
Shani Goriwal

Erstellen Sie einfach ein neues Markerobjekt und entfernen Sie vor dem Hinzufügen eines neuen Markers den vorherigen

Marker marker;

MAP.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {

                @Override
                public void onMapLongClick(LatLng arg0) {
                    if (marker != null) {
                        marker.remove();
                    }
                    marker = MAP.addMarker(new MarkerOptions()
                            .position(
                                    new LatLng(arg0.latitude,
                                            arg0.longitude))
                            .draggable(true).visible(true));
                }
            });

BEARBEITEN

Machen Sie dasselbe für OnMapClick

MAP.setOnMapClickListener(new OnMapClickListener() {
        @Override
        public void onMapClick(LatLng point) {
            // TODO Auto-generated method stub

                if (marker != null) {
                    marker.remove();
                }
            marker = MAP.addMarker(new MarkerOptions()
                    .position(currentPosition)
                    .snippet(
                            "Lat:" + location.getLatitude() + "Lng:"
                                    + location.getLongitude())
                    .icon(BitmapDescriptorFactory
                            .defaultMarker(BitmapDescriptorFactory.HUE_Azure))
                    .title("ME"));
            Log.e("lat", "" + point);

        }
    });
34
AnujMathur_07

Löschen Sie einfach die Google-Karte, bevor Sie eine Markierung hinzufügen. So was: 

@Override
public void onMapLongClick(LatLng latLng) {
    googleMap.clear();

    googleMap.addMarker(new MarkerOptions()
            .position(latLng)
            .title(latLng.toString())
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
}
4
Noman

Hier auf einfache Weise Sie müssen lediglich den position des Markers ändern. Globales Objekt als Marker marker; erstellen
Danach fügen Sie eine Markierung hinzu, um die Karte zuzuordnen 

marker = map.addMarker(markerOptions).position(new Latlng(31.647316, 74.763791));  

Und danach verwenden Sie marker.setPosition(newlaLng);, wo Sie Marker hinzufügen müssen.

2

Löschen Sie zuerst die Google-Karte und fügen Sie dann eine neue Markierung hinzu. Überprüfen Sie den Code unten

mMap.clear();

//google map marker adding code here
1

Für die Leute, die versucht haben, die erste Lösung in dieser Frage und Sie erhalten den Fehler Marker wurde nicht initialisiert .

Denn wir sind vergleichen der Marker und Null. Wenn wir nicht einmal den Marker initialisiert haben an erster Stelle.

Lösung:

Int mMarkerCount = 0; //Global Variable
Marker mMarker; //Global Variable

if(mMarkerCount > 0){
    if(mMarker != null){
        mMarker.remove();              
    }
}

mMarker = mMap.addMarker(new MarkerOptions().position(latLng));
mMarkerCount++;

Die Lösung für die Frage:

Int mMarkerCount = 0; //Global Variable
Marker mMarker;

mMap.setOnMapClickListener(new OnMapClickListener() {
    @Override
    public void onMapClick(LatLng latlng) {
        if(mMarkerCount > 0){
            if(mMarker != null){
                mMarker.remove();              
            }
        }

        mMarker = mMap.addMarker(new MarkerOptions().position(latLng));
        mMarkerCount++;  
    }
});

Am Anfang wird die Zählung Null sein. Die Methode marker remove wird also nicht called. Einmal ist der Marker initialisiert und die Zählung ist erhöht. Wir können den vorherigen Marker entfernen mit Hilfe der remove-Methode und einen neuen Marker erstellen wie im Code gezeigt.

0
Ashfaq nisar

Bitte probieren Sie den Schlagcode: -

// Global Variable...
private Marker mPreviousMarker ;

     @Override
        public boolean onMarkerClick(Marker marker) {
            if (mPreviousMarker != null) {
                mPreviousMarker.remove();

            }
            mPreviousMarker = googleMap.addMarker(new MarkerOptions().position(latLng).icon(bitmapDescriptor));
        }

LatLng: - Ihr Latlong, an dem Sie BitmapDescroptor hinzufügen möchten, ist icon. {Nur zum Verständnis}

0
sharma_kunal

Nur die Antwort von Anthony neu posten. 

Die Methodensignatur für addMarker lautet:

public final Marker addMarker (Optionen für MarkerOptions) Wenn Sie also eine Marke zu GoogleMap hinzufügen, indem Sie die Optionen für den Marker angeben, sollten Sie das zurückgegebene Marker-Objekt speichern (anstelle des MarkerOptions-Objekts, das Sie zum Erstellen verwendet haben). . Mit diesem Objekt können Sie den Markierungsstatus später ändern. Wenn Sie mit der Markierung fertig sind, können Sie Marker.remove () aufrufen, um sie von der Karte zu entfernen.

Wenn Sie die Markierung nur vorübergehend ausblenden möchten, können Sie die Sichtbarkeit der Markierung durch Aufruf von Marker.setVisible (boolean) umschalten.

Die Antwort finden Sie hier Entfernen Sie eine Markierung aus einer GoogleMap

0
Sagar Devanga