【问题标题】:Google Maps Android - Only show markers below a certain zoom levelGoogle Maps Android - 仅显示低于特定缩放级别的标记
【发布时间】:2017-10-01 01:53:13
【问题描述】:

过去几周我一直在研究这个问题,但没有任何有效的答案。感谢您的帮助。

我只想显示低于某个缩放级别的标记。这不仅是为了防止滞后,也是为了防止标记的聚集。标记聚类不是我想要的。

请帮忙!到目前为止,这是我的 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

}


}

【问题讨论】:

    标签: android google-maps


    【解决方案1】:
    • 创建一个变量来存储标记。

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

    • 像这样添加所有标记。

           Marker marker = googleMap.addMarker(new MarkerOptions().position(latlng).title(name).snippet(snippet));
           list.add(marker);
      
    • 然后设置一个OnCameraMoveListener

      googleMap.setOnCameraMoveListener(() -> {
           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中,然后通过这个方法调用传递字符串。

    还是有什么遗漏,欢迎提问。

    【讨论】:

    • 非常感谢您的帮助!你保存了我的应用!
    • 完全没问题。
    猜你喜欢
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2013-04-30
    • 2013-12-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多