Je veux ajouter plusieurs marqueurs sur ma carte, mais je ne connais pas le chemin.
Pour le moment, je l’utilise, et cela fonctionne correctement:
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)));
Mais le problème vient lorsque je veux ajouter 300 marqueurs dans ma carte. Et le faire un par un est très ennuyant.
Est-il possible de lire les marqueurs d'un tableau ou quoi que ce soit?
Autre question: est-ce que je peux lire les marqueurs à partir d'un fichier externe pour pouvoir ajouter ou mettre à jour des marqueurs sans toucher au code de l'application?
Merci.
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)));
}
Utilisez MarkerOptions
private GoogleMap googleMap;
private MarkerOptions options = new MarkerOptions();
private ArrayList<LatLng> latlngs = new ArrayList<>();
Vous pouvez ajouter à la liste des latlngs par,
latlngs.add(new LatLng(12.334343, 33.43434)); //some latitude and logitude value
Et ensuite, utilisez la boucle for pour les définir sur la carte.
for (LatLng point : latlngs) {
options.position(point);
options.title("someTitle");
options.snippet("someDesc");
googleMap.addMarker(options);
}
Donc, si vous obtenez les coordonnées d'un fichier txt, vous pouvez les lire comme ceci:
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
}
}
}
si votre fichier txt ressemble à ceci
23.45 43.23
23.41 43.65
.
.
.
Que vous puissiez modifier chaîne en objets LatLng:
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]);
}
Et que:
for(LatLng cor : coordinates){
map.addMarker(new MarkerOptions()
.position(cor.getLat(), cor.getLng())
.title("Hello"));
}
Cela dépend de la source de vos données. Le meilleur moyen est de faire en sorte que votre objet personnalisé stocke des données. Par exemple:
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;
}
}
Ensuite, vous pouvez écrire une méthode pour convertir les données de votre fichier externe en liste de vos objets de données personnalisés (mais je pense que cela n’entre pas dans le cadre de cette question).
Ensuite, transmettez simplement ces données à votre méthode de dessin de marqueur et parcourez-les en boucle. C'est une bonne pratique que de penser à sauvegarder vos marqueurs dans une liste ou une carte (objet, marqueur) aussi, vous pourrez alors y accéder facilement.
Quelque chose comme ca:
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);
}
}
Oui, vous pouvez utiliser la variable ArrayList
pour stocker tous les marqueurs de cette liste, puis utiliser la boucle for pour ajouter des marqueurs sur la carte.
Par exemple:
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));
}
}