it-swarm.com.de

Hinzufügen mehrerer Markierungen in Google Maps API v2 Android

Ich möchte mehrere Markierungen in meine Karte einfügen, weiß aber nicht, wie.

Im Moment benutze ich das und es funktioniert korrekt:

Marker m1 = googleMap.addMarker(new MarkerOptions()
                .position(new LatLng(38.609556, -1.139637))
                .anchor(0.5f, 0.5f)
                .title("Title1")
                .snippet("Snippet1")
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.logo1)));


Marker m2 = googleMap.addMarker(new MarkerOptions()
                .position(new LatLng(40.4272414,-3.7020037))
                .anchor(0.5f, 0.5f)
                .title("Title2")
                .snippet("Snippet2")
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.logo2)));


Marker m3 = googleMap.addMarker(new MarkerOptions()
                .position(new LatLng(43.2568193,-2.9225534))
                .anchor(0.5f, 0.5f)
                .title("Title3")
                .snippet("Snippet3")
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.logo3)));

Das Problem tritt jedoch auf, wenn ich 300 Markierungen in meine Karte einfügen möchte. Und es ist sehr ärgerlich, es einzeln zu machen.

Gibt es eine Möglichkeit, Marker aus einem Array oder etwas zu lesen?

Eine andere Frage: Kann ich Markierungen aus externen Dateien lesen, damit ich Markierungen hinzufügen oder aktualisieren kann, ohne den App-Code zu berühren?

Vielen Dank.

14
Tárraga
ArrayList<MarkerData> markersArray = new ArrayList<MarkerData>();

for(int i = 0 ; i < markersArray.size() ; i++) {

    createMarker(markersArray.get(i).getLatitude(), markersArray.get(i).getLongitude(), markersArray.get(i).getTitle(), markersArray.get(i).getSnippet(), markersArray.get(i).getIconResID());
}


protected Marker createMarker(double latitude, double longitude, String title, String snippet, int iconResID) {

    return googleMap.addMarker(new MarkerOptions()
            .position(new LatLng(latitude, longitude))
            .anchor(0.5f, 0.5f)
            .title(title)
            .snippet(snippet)
            .icon(BitmapDescriptorFactory.fromResource(iconResID)));
}
43
nbaroz

Verwenden Sie MarkerOptions

private GoogleMap googleMap;
private MarkerOptions options = new MarkerOptions();
private ArrayList<LatLng> latlngs = new ArrayList<>();

Sie können zur Liste der Sprachen hinzufügen, indem Sie

 latlngs.add(new LatLng(12.334343, 33.43434)); //some latitude and logitude value

Verwenden Sie dann for-Schleife, um sie auf der Karte festzulegen.

 for (LatLng point : latlngs) {
     options.position(point);
     options.title("someTitle");
     options.snippet("someDesc");
     googleMap.addMarker(options);
 }
15
siriscac

Wenn Sie also Koordinaten aus einer TXT-Datei erhalten, können Sie sie wie folgt lesen:

BufferedReader reader = null;
try {
    reader = new BufferedReader(
        new InputStreamReader(getAssets().open("filename.txt"), "UTF-8")); 

    // do reading, usually loop until end of file reading 
    String mLine = reader.readLine();
    while (mLine != null) {
       //process line
       ...
       mLine = reader.readLine(); 
    }
} catch (IOException e) {
    //log the exception
} finally {
    if (reader != null) {
         try {
             reader.close();
         } catch (IOException e) {
             //log the exception
         }
    }
}

wenn deine txt-datei so aussieht

23.45 43.23
23.41 43.65
.
.
.

Dann könnten Sie String in LatLng-Objekte ändern:

String[] coord = mLine.split("\\r?\\n");
ArrayList<LatLng> coordinates = new ArrayList<LatLng>;

for(int i = 0; i <  coord.lenght(); ++i){
    String[] latlng =   coord.split(" ");
    coordinates.add(new LatLng(latlng[0], latlng[1]);
}

Und dann:

for(LatLng cor : coordinates){
    map.addMarker(new MarkerOptions()
       .position(cor.getLat(), cor.getLng())
       .title("Hello"));
}
1
Igor Bykov

Das hängt von der Quelle Ihrer Daten ab. Besser ist es, ein benutzerdefiniertes Objekt zum Speichern von Daten zu erstellen. Zum Beispiel:

public class MyMarkerData {
        LatLng latLng;
        String title;
        Bitmap bitmap;

        public LatLng getLatLng() {
            return latLng;
        }

        public void setLatLng(LatLng latLng) {
            this.latLng = latLng;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public Bitmap getBitmap() {
            return bitmap;
        }

        public void setBitmap(Bitmap bitmap) {
            this.bitmap = bitmap;
        }
    }

Dann können Sie eine Methode schreiben, um Daten aus Ihrer externen Datei in eine Liste Ihrer benutzerdefinierten Datenobjekte zu konvertieren (ich denke jedoch, dass dies nicht in den Rahmen dieser Frage fällt).

Übergeben Sie diese Daten dann einfach an Ihre Markierungsmethode und durchlaufen Sie sie. Es wird empfohlen, Ihre Marker in einer Arrayliste oder in einer Map (Objekt, Marker) zu speichern. Dann können Sie einfach darauf zugreifen.

Sowas in der Art:

    HashMap<Marker, MyMarkerData> mDataMap = new HashMap<>();

        public void drawMarkers(ArrayList<MyMarkerData> data) {
                Marker m;
                for (MyMarkerData object: data) {
                    m = googleMap.addMarker(new MarkerOptions()
                            .position(object.getLatLng())
                            .title(object.getTitle())
                            .icon(BitmapDescriptorFactory.fromBitmap(object.getBitmap()));

                    mDataMap.put(m, object);
                }
            }
0
Georgiy Shur

Ja, Sie können die Variable ArrayList verwenden, um alle Marker in dieser Liste zu speichern, und anschließend die for-Schleife zum Hinzufügen von Markern auf der Karte verwenden.

Zum Beispiel: 

googleMap.clear();
Now get all the marker in the Markers
//seachModelsList is the list of all markers
Marker[] allMarkers = new Marker[seachModelsList.size()];

for (int i = 0; i < seachModelsList.size(); i++)
{
    LatLng latLng = new LatLng(seachModelsList.get(i).getCoordinates()[1], seachModelsList.get(i)
            .getCoordinates()[0]);
    if (googleMap != null) {
        googleMap.setOnMarkerClickListener(this);
        allMarkers[i] = googleMap.addMarker(new MarkerOptions().position(latLng);
        googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 17.0f));
        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 17));

    }
}
0
A-Droid Tech