2017-10-01 5 views
0

私はここ数週間、実用的な答えなしで作業しています。ヘルプは高く評価されます。GoogleマップAndroid - 特定のズームレベル以下のマーカーを表示してください

特定のズームレベル以下のマーカーのみを表示したいとします。これは、遅れを防ぐだけでなく、マーカーのクラスタリングを防止するためです。マーカーのクラスタリングは、私が探しているものではありません。

助けてください!ここに私のJavaコードはこれまでです:

package us.wingitapp.jared.wingit; 

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.location.Address; 
import android.location.Geocoder; 
import android.os.Bundle; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.app.FragmentActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.EditText; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.Marker; 
import com.google.android.gms.maps.model.MarkerOptions; 

import com.google.android.gms.common.api.Status; 
import com.google.android.gms.location.places.Place; 
import com.google.android.gms.location.places.ui.PlaceAutocompleteFragment; 
import com.google.android.gms.location.places.ui.PlaceSelectionListener; 

import java.io.IOException; 
import java.util.List; 


public class MainActivity extends FragmentActivity implements OnMapReadyCallback { 

private GoogleMap mMap; 
PlaceAutocompleteFragment placeAutoComplete; 
private static final String TAG = "Main Activity"; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    placeAutoComplete = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.place_autocomplete); 
    placeAutoComplete.setOnPlaceSelectedListener(new PlaceSelectionListener() { 
     @Override 
     public void onPlaceSelected(Place place) { 

      Log.i(TAG, "Place Selected: " + place.getName()); 
      LatLng latLng = place.getLatLng(); 

      //move map camera 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,11)); 
     } 

     @Override 
     public void onError(Status status) { 
      Log.d("Maps", "An error occurred: " + status); 
     } 
    }); 

    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 
} 


@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    //initialize markers here 

} 


} 

答えて

1
  • は、マーカーを格納する変数を作成します。

    List<Marker> list = new ArrayList<>();

  • みたいにすべてのマーカーを追加します。

    Marker marker = googleMap.addMarker(new MarkerOptions().position(latlng).title(name).snippet(snippet)); 
        list.add(marker); 
    
  • はその後OnCameraChangeListenerを設定します。

    googleMap.setOnCameraChangeListener(new 
        GoogleMap.OnCameraChangeListener() { 
        @Override 
        public void onCameraChange(CameraPosition cameraPosition) { 
        for(Marker m:list){ 
         m.setVisible(cameraPosition.zoom>8); 
        //8 here is your zoom level, you can set it as your need. 
        } 
        } 
        }); 
    

また、このリスト内のすべてのマーカーを初期化することの利点は、あなたがポジションを提供することにより、任意のマーカーのすべての情報を得ることができるであり、あなたはまた、マーカーを選択して、カメラを移動するためにスピナーを設定することができますスピナーの選択時にそのマーカー。

次のコードは、(私のプロジェクトのコピーを貼り付けるだけで)助けることができます。ここ

for (Marker m: list) { 
      if (m.getTitle().equals(selection)) { 
       m.showInfoWindow(); 
       CameraPosition cameraPosition = new CameraPosition.Builder().target(m.getPosition()).zoom(14).build(); 
       googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 
       break; 
      } 
     } 

selection

は、スピナーの onItemClickListenerから渡された文字列であり、また、あなたは、メソッド内のコードの上に置くスピナーの onItemClickListenerにメソッド呼び出しを入れて、このメソッドの呼び出しによって文字列を渡すことができます。

まだ、何か不足している、お気軽にお問い合わせください。

+0

ありがとうございました!あなたは私のアプリを救った! –

+0

全く問題ありません。 –

関連する問題