过去几周我一直在努力解决这个问题。感谢帮助。
我想只显示某个缩放级别以下的标记。这不仅可以防止滞后,还可以防止标记聚类。标记聚类不是我正在寻找的。 p>
请帮忙!这是我到目前为止的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
}
}
答案 0 :(得分: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
中并传递字符串通过这种方法调用。
但是,遗漏了一些东西,随便问。