10

Я хочу добавить несколько маркеров на свою карту, но я не знаю, как это сделать.Добавление нескольких маркеров в API Карт Google v2 Android

На данный момент им с помощью этого, и он работает правильно:

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))); 

Но проблема возникает, когда я хочу, чтобы добавить 300 маркеров в моей карте. И делать это один за другим очень раздражает.

Есть ли способ прочитать маркеры из массива или что-нибудь еще?

Другой вопрос: могу ли я читать маркеры из внешнего файла, чтобы я мог добавлять или обновлять маркеры, не касаясь кода приложения?

Спасибо.

+2

Вы должны хранить 'LatLag' в одном ArrayList и использовать цикл для добавления нескольких маркеров. – Piyush

ответ

32
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))); 
} 
+0

добро пожаловать в SO .. попробуйте записать немного о вашем решении. – deejay

+5

не работает он добавляет только один маркер i.e только для 1-й записи –

1

Так что, если вы получите координаты из текстового файла, который вы могли читать их, как это:

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 
     } 
    } 
} 

если ваш текстовый файл выглядит следующим образом

23.45 43.23 
23.41 43.65 
. 
. 
. 

Чем вы могли бы изменить строку 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]); 
} 

И чем:

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

Я получаю свои координаты по txt-файлу, где я сохранил нужные мне координаты на карте –

+0

@ Tárraga Я изменил свой ответ. – IgorB

8

Использование MarkerOptions

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

Вы можете добавить в список latlngs по,

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

И затем, использовать цикл, чтобы установить их на карте.

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

Спасибо. Прекратите работу: D – Ferrrmolina

0

Да, вы можете использовать ArrayList для хранения все маркера в этом списке, и после этого использовать для цикла для добавления маркеров на карте.

Например:

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

Это зависит от источника данных. Лучше всего сделать свой пользовательский объект для хранения данных. Например:

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; 
     } 
    } 

Затем вы можете написать какой-нибудь способ, чтобы преобразовать данные из внешнего файла в список ваших объектов пользовательских данных (но я думаю, что это выходит за рамки этого вопроса).

Затем просто передайте эти данные методу рисования маркера и проведите через него. Хорошая практика заключается в том, чтобы сохранить ваши маркеры в каком-то аррайалисте или карте (объект, маркер), а затем вы можете легко получить к ней доступ.

Нечто подобное:

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

Итак, где я должен добавить данные? –

+0

Это зависит от вас, но определенно до вызова метода draw. Если вы используете внешний файл, попробуйте найти его преобразование в объект Java –

+0

Я также должен спросить, как добавить данные таким образом, или если вы можете привести мне пример. –

Смежные вопросы