2016-05-24 6 views
1

以前はマップAPIで作業したことがありません。私は下の画像のようなマップを実装したい。 Webサービスからデータを取得しています。これを使用して、イベントカウントをマーカーに表示させることができます。 基本的な機能は、ユーザーがズームインするとマップマーカーが拡大され、マーカーがカウントされることです。カスタムマーカー付きのAndroidマップ(マーカー上のテキスト)

enter image description here

私の質問は以下のとおりです。

  1. このようなマーカーをカスタマイズする方法があります。
  2. ズームイン、ズームアウトイベントでマーカーカウントを処理するにはどうすればよいですか。

助けてください。前もって感謝します。

+0

に従ってください、あなたは私が言及したライブラリの文書化を経て、それが参考に思わ@skadoosh答え – Bharatesh

+0

に記載されたライブラリを確認しました。実装が完了したら、私は確認します。 – SKP

答えて

0

マーカーを数えたり、マーカーを表示するために何もする必要はありません。 Googleはあなたが必要とする1が

マーカークラスタリングと呼ばれるGoogle Maps Android API utility library

と呼ばれるライブラリを持っている - 多数の点の表示を処理します。 video

happyCoding;

+0

このライブラリはすごくうまくいきます!あなたの答えをありがとう:) – SKP

+0

うれしいよ.... – Bharatesh

+1

その作業として、あなたは今、私の答えにそのチェックボックスをクリックすることができます:) :) ** – Bharatesh

0

Android-Maps-Utilsにはマーカークラスタリングユーティリティがあります。以下は手順です:

  1. compile 'com.google.maps.android:android-maps-utils:0.4.3'をbuild.gradleに追加してください。

  2. はあなたのマニフェスト

    <uses-permission android:name="your.package.permission.MAPS_RECEIVE"/> 
    
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    
  3. の権限の下に追加のLatLngオブジェクトとしてマーカーのあなたの位置を与えるクラスを作成します。

    パブリッククラスMarkerItemはClusterItem {

    private final LatLng mPosition; 
    
    public MarkerItem (double lat, double lon) { 
        mPosition = new LatLng(lat, lon); 
    } 
    
    @Override 
    public LatLng getPosition() { 
        return mPosition; 
    } 
    
  4. FragmentActivityがOnMapReadyCallbackを{

    private GoogleMap mGoogleMap; 
    
    // Declare a variable for the cluster manager. 
    ClusterManager<MarkerItem> mClusterManager; 
    
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    
        super.onCreate(savedInstanceState); 
    
        setContentView(R.layout.activity_main); 
    
        SupportMapFragment supportMapFragment = 
          (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
    
        supportMapFragment.getMapAsync(this); 
    } 
    
    @Override 
    public void onMapReady(GoogleMap googleMap) { 
    
        mGoogleMap = googleMap; 
    
        setUpClusterer(); 
    } 
    
    private void setUpClusterer() { 
    
        // Position the map. 
        mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446), 10)); 
    
        // Initialize the manager with the context and the map. 
        // (Activity extends context, so we can pass 'this' in the constructor.) 
        mClusterManager = new ClusterManager<>(this, mGoogleMap); 
    
        // Point the map's listeners at the listeners implemented by the cluster 
        // manager. 
        mGoogleMap.setOnCameraChangeListener(mClusterManager); 
        mGoogleMap.setOnMarkerClickListener(mClusterManager); 
    
        // Add cluster items (markers) to the cluster manager. 
        addItems(); 
    } 
    
    /** 
    * Generate dummy coordinates 
    */ 
    private void addItems() { 
    
        // Set some lat/lng coordinates to start with. 
        double lat = 51.5145160; 
        double lng = -0.1270060; 
    
        // Add ten cluster items in close proximity, for purposes of this example. 
        for (int i = 0; i < 10; i++) { 
         double offset = i/60d; 
         lat = lat + offset; 
         lng = lng + offset; 
         MarkerItem offsetItem = new MarkerItem(lat, lng); 
         mClusterManager.addItem(offsetItem); 
        } 
    } 
    

このライブラリに自動的に実装し

パブリッククラスMainActivityが延びて/あなたのアクティビティ内のフラグメントをClusterManagerの追加を実装しますハンドルt彼はクラスタリング部分。

こちらがお役に立てば幸いです。詳細については

this link

関連する問題