Googleマップに表示するマーカーのサーバー側に境界ベースのクラスタリングを実装しています。私がやっているのは、マップが移動またはパンまたはズームされるたびに呼び出される関数がマップの境界をとり、サーバー側のスクリプトが単純なSQLクエリを実行してajax呼び出しを実行してマーカーとそれらをクラスタリングする。だから、クラスタリングの部分はうまく動作していますが、時にはgetBoundsが正しい境界を送信しているようには見えません。Googleマップ - パンニングとズームイン - ズームインまたはパンするとマーカーが表示されない - HELP!
私は、マーカーを持っていた側と地域のビットを突然パンすることがあります。突然すべてがマーカーを持たず、地図は空です。私はSQLクエリをチェックし、クエリ自体からは予想外の境界を示しています。
の下に地域を見てみましょう:最初のものは、すべてのマーカーを示し Orginal WitH Markers http://i31.tinypic.com/xds4t0.jpg No markers http://i31.tinypic.com/2r22ez4.jpg
。
しかし、次のものはちょうど上と左に少し移動しましたが、領域の半分は前の画像と同じですが、マーカーはまったくありません。私はマップのgetBounds関数であるという問題を切り分けました。
これは、境界を取得し、呼び出しを行う私のjavascriptのコードです:私のサーバー側のコードで
var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var data = {ne:northEast.toUrlValue(), sw:southWest.toUrlValue(), zoom:map.getZoom()};
//something getting messed up in the code above this point
$.ajax({
type: "POST",
url: 'maps/get-markers',
data: {object:$.toJSON(data)},
dataType: 'json',
success: function(response) {
//code to add markers
}
});
この座標に基づいてアイテムを取得するために使用PHPです:
$data = Zend_Json::decode(stripslashes($this->_request->getParam('object')));
//retrieve the variables from the GET vars
list($nelat, $nelng) = explode(',', $data['ne']);
list($swlat, $swlng) = explode(',',$data['sw']);
//clean the data
$nelng = (float)$nelng;
$swlng = (float)$swlng;
$nelat = (float)$nelat;
$swlat = (float)$swlat;
$ubound = $swlng > $nelng ? $swlng : $nelng;
$lbound = $swlng > $nelng ? $nelng : $swlng;
$sql = 'SELECT `a`.* FROM `locations` AS `a` WHERE (a.`longitude` > $lbound) AND (a.`longitude` < $ubound) AND';
$ubound = $swlat > $nelat ? $swlat : $nelat;
$lbound = $swlat > $nelat ? $nelat : $swlat;
$sql .= ' (a.`latitude` >= $lbound) AND (a.`latitude` <= $ubound)';
私はjavascriptでgetbounds関数を疑っていますが、できるだけ早く修正する必要があります。すべてのアイデアは、私はあなたがあなたが記載されているとまったく同じように動作するページを持っている
はそれが固定ガット - すべての私の20個の000マーカーは、すべての返信の場所:)おかげで台無しにしていました! – Ali