2016-07-27 11 views
0

データベースの値に基づいてマーカーがプログラム上に配置されたマップがあります。マーカーをクリックすると、その場所の詳細ページに移動します。Google Maps API:別のマーカーによってマーカーが隠されているかどうかを確認する方法はありますか?

私の問題は、マップが十分にズームアウトされていると、互いに十分近くにあるマーカーが単一のマーカーとして表示され、マーカーの一部が実際に隠れていることです。 マーカーがマーカーのグループの一部であるか、他のマーカーによって隠されているかどうかをプログラムで確認する方法はありますか?

私の意図は、各動的に生成されたマーカーのためにこのような何かを行うことです。

marker.addListener('click', function() { 
    // if marker is not hiding any other markers 
    window.location.href = markerURL; 
    // else if it is hiding markers/is part of a group of markers 
    map.setZoom(15); 
    map.setCenter(marker.getPosition()); 
}); 

私はMarker API documentationをチェックしていますが、任意の有用な方法を見つけるように見えることはできません。私の場合、getClickablegetVisibleはいつもtrueを返します。マーカーが別のマーカーで覆われているかどうかは関係ありません。助言がありますか?ありがとうございました!

+0

あなたは[MarkerClusterer](https://github.comを使用する場合があります/ googlemaps/js-marker-clusterer)を使用して、複数のマーカーがクラスタ化されていることを明示します。 – geocodezip

+0

@geocodezip提案していただきありがとうございます。私はこれを考えましたが、より簡単な方法があることを望んでいました。私はクラスタリングを制御する必要はありません、私はそれが起こったかどうかを知りたいだけです。よりよい解決策が見つからない場合、私はそのライブラリを使い終わってしまうかもしれません。 – elethan

+0

このようなことをするためにAPIに組み込まれているものは何もありません。あなたが思いつくアルゴリズムは、マーカーclustererのように単純でも直感的でもないと思われます。 – geocodezip

答えて

1

私の問題を解決するためにMarkerClustererに行ってしまいました。私はより簡単な解決策を望んでいましたが、結局のところ非常に簡単なことが判明しました。

私が既存のマーカー生成コードに追加する必要があったのは、一覧:var markers = [];でした。その後、すべてのマーカーでmarkers.push(marker);と呼んでいました。最後のステップは、新しいMarkerClustererオブジェクトを作成することでした。

var markerCluster = new MarkerClusterer(map, markers, options); 

をそしてMarkerClustererは、多かれ少なかれ(optionsパラメータはオプションですが、私は私のイメージへのパスを設定し、最大ズームレベルを設定するためにそれを使用し、残りを処理します)。今では、以前にマーカーが積み重ねられていて、あるズームレベルで特定のマーカーを表示またはクリックできなくなった場合、そのクラスター内のマーカーの数を示す数のクラスターが表示されます。クラスタアイコンをクリックするとさらに拡大され、マーカーが表示されます。

このすべては、githubページのsimple usage exampleに続いて行われましたが、pretty good documentationもあります。これは正しい動作するようになって私の時間のほとんどは、実際に自分のサイトのカラースキームに一致するように、クラスタのアイコンをスタイリング過ごした...

enter image description here