Intereting Posts
Как обращаться с несколькими входами и сессиями социальных сетей Поток на Android? Использование одного и того же отладочного хранилища ключей на нескольких компьютерах Можно ли изменить, где сохраняются виртуальные устройства Android? GIT: два разных репозитория с одной общей папкой Как режим Doze влияет на зарегистрированных слушателей (особенно для датчиков) Android – настройка тайм-аута для AsyncTask? Android Camera setDisplayOrientation не работает Отправка DatagramPacket без подключения к Интернету – Android Добавить кнопки над вкладкой Уведомления в строке состояния Сила приложения Android закрыта без какой-либо ошибки Не удается увидеть окончательное содержимое переменной внутри анонимного класса при отладке приложения Eclipse для Android Отменено разрешение android.permission.CALL_PHONE Использует ли Flexbox в React Native использовать dp или pixel? Как я могу использовать SensorManager.getOrientation для управления наклоном, например «My Paper Plane»? Как создать диалог с вкладками Android с фрагментами?

Как показать несколько маркеров в MapFragment в Google Map API v2?

Я использую Google Map API v2 в своем приложении для отображения Карт.

Я выполнил все шаги, которые необходимо выполнить, чтобы включить Карту Google в моем приложении.

 public class PinLocationOnMapView extends FragmentActivity { private double mLatitude = 0.0, mLongitude = 0.0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SupportMapFragment fragment = SupportMapFragment.newInstance(); getSupportFragmentManager().beginTransaction() .add(android.R.id.content, fragment).commit(); } } 

Если я использую этот код, он показывает мне карту, но если я дам свои значения широты / долготы, плитки карт не загружаются, и я вижу только белые плитки.

Ниже приведен код, написанный в onCreate () выше класса:

  if (getIntent().getExtras() != null) { final Bundle bundle = getIntent().getBundleExtra("LOCATION"); mLatitude = bundle.getDouble("LATITUDE"); mLongitude = bundle.getDouble("LONGITUDE"); } else { finish(); } GoogleMapOptions options = new GoogleMapOptions(); LatLng latLng = new LatLng(mLatitude, mLongitude); CameraPosition cameraPosition;// = new CameraPosition(latLng, 0, 0, 0); cameraPosition = CameraPosition.fromLatLngZoom(latLng, (float) 14.0); options.mapType(GoogleMap.MAP_TYPE_SATELLITE).camera(cameraPosition) .zoomControlsEnabled(true).zoomGesturesEnabled(true); SupportMapFragment fragment = SupportMapFragment.newInstance(options); getSupportFragmentManager().beginTransaction() .add(android.R.id.content, fragment).commit(); 

Кроме того, у меня есть список значений lat / long. Я хочу показать их на MapFragment , как показать несколько маркеров на MapFragment ?

Я пытался использовать ItemizedOverlay и ItemizedOverlay , но для меня это не сработало. Я считаю, что я правильно создал ключ SHA1 чтобы получить ключ API , потому что, если это было неправильно, я не мог видеть карту, используя MapFragment , но я вижу, что если я не пройду значение lat / log.

Solutions Collecting From Web of "Как показать несколько маркеров в MapFragment в Google Map API v2?"

Я делаю это так, чтобы показывать позиции автомобиля на карте с маркерами разных цветов:

  private void addMarkersToMap() { mMap.clear(); for (int i = 0; i < Cars.size(); i++) { LatLng ll = new LatLng(Cars.get(i).getPos().getLat(), Cars.get(i).getPos().getLon()); BitmapDescriptor bitmapMarker; switch (Cars.get(i).getState()) { case 0: bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED); Log.i(TAG, "RED"); break; case 1: bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN); Log.i(TAG, "GREEN"); break; case 2: bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE); Log.i(TAG, "ORANGE"); break; default: bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED); Log.i(TAG, "DEFAULT"); break; } mMarkers.add(mMap.addMarker(new MarkerOptions().position(ll).title(Cars.get(i).getName()) .snippet(getStateString(Cars.get(i).getState())).icon(bitmapMarker))); Log.i(TAG,"Car number "+i+" was added " +mMarkers.get(mMarkers.size()-1).getId()); } } } 

Автомобили – это ArrayList пользовательских объектов, а mMarkers – это ArrayList маркеров.

Примечание. Вы можете показать карту в фрагменте следующим образом:

 private GoogleMap mMap; .... private void setUpMapIfNeeded() { // Do a null check to confirm that we have not already instantiated the // map. if (mMap == null) { // Try to obtain the map from the SupportMapFragment. mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); // Check if we were successful in obtaining the map. if (mMap != null) { setUpMap(); } } } private void setUpMap() { // Hide the zoom controls as the button panel will cover it. mMap.getUiSettings().setZoomControlsEnabled(false); // Add lots of markers to the map. addMarkersToMap(); // Setting an info window adapter allows us to change the both the // contents and look of the // info window. mMap.setInfoWindowAdapter(new CustomInfoWindowAdapter()); // Set listeners for marker events. See the bottom of this class for // their behavior. mMap.setOnMarkerClickListener(this); mMap.setOnInfoWindowClickListener(this); mMap.setOnMarkerDragListener(this); // Pan to see all markers in view. // Cannot zoom to bounds until the map has a size. final View mapView = getSupportFragmentManager().findFragmentById(R.id.map).getView(); if (mapView.getViewTreeObserver().isAlive()) { mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @SuppressLint("NewApi") // We check which build version we are using. @Override public void onGlobalLayout() { LatLngBounds.Builder bld = new LatLngBounds.Builder(); for (int i = 0; i < mAvailableCars.size(); i++) { LatLng ll = new LatLng(Cars.get(i).getPos().getLat(), Cars.get(i).getPos().getLon()); bld.include(ll); } LatLngBounds bounds = bld.build(); mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 70)); mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this); } }); } } 

И просто позвоните setUpMapIfNeeded() в onCreate()

Чтобы добавить несколько маркеров для сопоставления при преобразовании адреса (например, 123 Testing Street Lodi ca) в LatLng с использованием geoCoder, приведен пример кода ниже.

 // convert address to lng lat and add markers to map public void addMarkersToMap() { mMap.clear(); Double[] latitude = new Double[addressArrayList.size()]; Double[] longitude = new Double[addressArrayList.size()]; String[] addrs = new String[addressArrayList.size()]; addrs = addressArrayList.toArray(addrs); List<Address> addressList; if (addrs != null && addrs.length > 0) { for (int i = 0; i < addrs.length; i++) { try { addressList = geoCoder.getFromLocationName(addrs[i], 1); if (addressList == null || addressList.isEmpty() || addressList.equals("")) { addressList = geoCoder.getFromLocationName("san francisco", 1); } latitude[i] = addressList.get(0).getLatitude(); longitude[i] = addressList.get(0).getLongitude(); System.out.println("latitude = " + latitude[i] + " longitude = " + longitude[i]); mMap.addMarker(new MarkerOptions() .position(new LatLng(latitude[i], longitude[i])) .title(namesArrayList.get(i)) .snippet(addressArrayList.get(i)) .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)) .alpha(0.7f) ); } catch (Exception e) { e.printStackTrace(); } // end catch } } } //end addMarkersToMap 

Я не знаю, может быть, я исправил код, и теперь все в порядке, но в onCreate()

 if (getIntent().getExtras() != null) { final Bundle bundle = getIntent().getBundleExtra("LOCATION"); mLatitude = bundle.getDouble("LATITUDE"); mLatitude = bundle.getDouble("LONGITUDE"); } 

Вторая mLatitude я думаю, она должна быть mLongitude как и называть ее в следующих строках.

Извините, если я опоздал с ответом и бесполезен.

Попробуйте этот код, который вызывает XML-файл в корневом каталоге вашего веб-сайта –

Один из способов добавления маркеров – загрузить файл xml, который находится в корневом каталоге (см. Код ниже), который содержит маркер html.

Здесь код устанавливает пространство карты и столбец боковой панели, чтобы удерживать карту и ссылки для маркеров. Обратите внимание, что оба тега div с id и идентификатором td для боковой панели для элементов html и map.

Вы можете настроить маркеры, но обратите внимание на необходимость использования специальных символов, которые должны быть помечены правильно; Например, амперсанд (&) должен быть действительно закодирован как «&» + «amp» + »; (без кавычек). То же самое относится к большему, чем и меньше символов, и так далее. Это сложная задача, если у вас есть несколько маркеров, но один раз на месте ее легко изменить, так как не требуется никаких сборок, которые необходимо создать или кодировать внутри приложения. В скрипте, который читает файл, использование тега CDATA технически должно сделать ненужным использование специального символьного представления, но для Gmaps API v2 я все равно их использую. Для моего примера имя файла xml – example3.xml.

Вы можете отформатировать xml следующим образом:

 <Markers> <marker lat="47.881389" lng="-122.242222" html='&lt;div style="background-color:#FFFF88;font-family:Tahoma; font-size:12px;padding:6px; border:solid 1px black;"&gt;&lt;b&gt;SiteLines Park &#38; Playground Products&lt;/b&gt; &lt;br&gt;626 128th Street SW&lt;br&gt;Suite 104-A&lt;br&gt;Everett&#8218;&#160;WA 98204&lt;br&gt;Phone&#58; &#40;425&#41; 355-5655&lt;br&gt;&lt;b&gt;Toll&#160;Free&#58;&#160;&#40;800&#41;&#160;541-0869&lt;/b&gt;&lt;br&gt;Fax&#58;&#160;&#40;425&#41;&#160;347-3056&lt;br&gt;Email&#58;&#160;&lt;a href="mailto:info@sitelines.com" target="blank"&gt;emailus&#64;sitelines.com&lt;/a&gt;&lt;br&gt;Web&#58;&#160;&lt;a href="http://www.sitelines.com" target="blank"&gt;www.sitelines.com&lt;/a&gt; &lt;/div&gt;'label="SiteLines Park &#38; Playground Products" /> </Markers> And for the html and script: <form style="background-color: #ffffff;" id="form1" runat="server"> <div style="text-align: center;"> <table style="border: 1px currentColor; vertical-align: middle;"> <tbody> <tr> <td style="background-color: #bbcae3; vertical-align: top;"> <div style="background-color: #e4e4e4; font-family: Tahoma; font-size: 12px; line-height: 22px; padding: 5px; text-decoration: underline; width: 210px; color: #000000; text-align: left;" id="side_bar"></div> </td> <td> <div style="height: 600px; width: 600px;" id="map"></div> </td> </tr> </tbody> </table> </div> </form> <script type="text/javascript" src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAyUoL7QQqyBn6qU653XJGLxSjEdRKL8ahnZ9z8zIKzjlyzNOP2RRCsKP_vlAEzWT8jzEKS0_9RrXOAg"></script> <script type="text/javascript">// <![CDATA[ if (GBrowserIsCompatible()) { // this variable will collect the html which will eventualy be placed in the side_bar var side_bar_html = ""; // arrays to hold copies of the markers and html used by the side_bar // because the function closure trick doesnt work there var gmarkers = []; var htmls = []; var i = 0; // A function to create the marker and set up the event window function createMarker(point, name, html) { var marker = new GMarker(point); GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(html); }); // save the info we need to use later for the side_bar gmarkers[i] = marker; htmls[i] = html; // add a line to the side_bar html side_bar_html += '<a href="javascript:myclick(' + (gmarkers.length-1) + ')">' + name + '<\/a><br>'; i++; return marker; } // This function picks up the click and opens the corresponding info window function myclick(i) { gmarkers[i].openInfoWindowHtml(htmls[i]); } // create the map var map = new GMap2(document.getElementById("map")); map.addControl(new GLargeMapControl()); map.addControl(new GMapTypeControl()); map.setCenter(new GLatLng(0, 0), 0); // // ===== Start with an empty GLatLngBounds object ===== var bounds = new GLatLngBounds(); // Read the data from example3.xml GDownloadUrl("/testStore/example3.xml", function(doc) { var xmlDoc = GXml.parse(doc); var markers = xmlDoc.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { // obtain the attribues of each marker var lat = parseFloat(markers[i].getAttribute("lat")); var lng = parseFloat(markers[i].getAttribute("lng")); var point = new GLatLng(lat, lng); var html = markers[i].getAttribute("html"); var label = markers[i].getAttribute("label"); // create the marker var marker = createMarker(point, label, html); map.addOverlay(marker); } // put the assembled side_bar_html contents into the side_bar div document.getElementById("side_bar").innerHTML = side_bar_html; }); } else { alert("Sorry, the Google Maps API is not compatible with this browser"); } // This Javascript is based on code provided by the // Blackpool Community Church Javascript Team // http://www.commchurch.freeserve.co.uk/ // http://econym.googlepages.com/index.htm 

//]]>