Google Maps - Gezdirmeyi ve alanlara Yakınlaştırma - Ben veya pan zoom yaptığınızda belirteçleri görünmediğini - YARDIM!

2 Cevap php

Ben google harita üzerinde görüntülemek için belirteçlerin sunucu ucunda bazı sınır dayalı kümeleme uygulamak. Ne yapıyorum ben harita hamle veya haritanın bağlı alır ve sırayla sunucu tarafı komut dosyası almak için basit bir sql sorgusu çalıştıran ajax arama yapar büyütülebilir ya da yakınlaştırılmış her denir bir işleve sahip olduğunu belirteçler ve kümeler onları. SO kadar teh kümeleme parçası ancak bazen getBounds hissediyorum doğru sınırlarını gönderme görünmüyor güzel çalışıyor.

Sanki bir harita yan ve aniden tüm işaretleri yok ve harita boş şimdi işaretleri var için kullanılan bölgelerde biraz kaydırmak olabilir. Ben sql sorgu kontrol ve sorgusu kendisinden beklenen olacağını olandan müthiş bir farklı sınırlarını gösterir.

Take a look at the regions below: Orginal WitH Markers No markers

Birincisi, tüm işaretlerini göstermektedir.

Aşağıdaki biri ancak sadece üstüne biraz taşındı ve sol ancak yarısı bölge ancak hiçbir işaretleri, hepsi var önceki resimde olduğu gibi aynı oldu. Ben haritaların getBounds fonksiyonu ile olması sorunu izole ettim.

Bu sınırları alır ve çağrı yapar benim javascript kodu:

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
    }
});

Benim sunucu tarafı kodu bu koordinatlara dayalı ürün almak için kullanılan 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)';

Ben javascript onun getBounds işlevini şüphelenen ama en kısa zamanda bunu düzeltmek gerekir ediyorum. Herhangi bir fikir lütfen: (

2 Cevap

Ben senin tarif ettiğim tam olarak aynı şekilde çalışır bir sayfa var. İşte sınırları almak nasıl:

var bounds = map.getBounds();
var sw = bounds.getSouthWest();
var ne = bounds.getNorthEast();
var s = sw.lat();
var w = sw.lng();
var n = ne.lat();
var e = ne.lng();

Ben daha sonra sunucuya her değerini göndermek. Ben daha önce böyle bir sorgu ile sınırları içindeki noktaları kontrol:

WHERE (lat BETWEEN $sBound AND $nBound) AND (lng BETWEEN $wBound AND $eBound)

Ancak, son zamanlarda Sınırdışıalanlar uluslararası tarih satırı içeren bu sorgu başarısız olduğunu keşfetti. Bu (muhtemelen sınırları ayrıştırma oluyor) yaşıyorsanız sorun gibi görünmüyor, ancak kesinlikle düşünmelisiniz şey. İşte ben bunu sabit nasıl:

if ($wBound > $eBound) { // if bounds includes the intl. date line
    $sql .= "WHERE (lat BETWEEN $sBound AND $nBound) AND ((lng BETWEEN -180 AND $eBound) OR (lng BETWEEN $w AND 180))";
} else {
    $sql .= "WHERE (lat BETWEEN $sBound AND $nBound) AND (lng BETWEEN $wBound AND $eBound)";
}

Bu anlamıyla koddan kopyalanan ise:

$sql .= ' (a.`latitude` >= $lbound) AND (a.`latitude` <= $ubound)';

o zaman sorun sadece size tek tırnak yerine PHP değişmezleri çift kullanıyorsanız olabilir. Gibi, $ lbound ve $ ubound enterpolasyon olmaz, ve geçersiz bir SQL sorgusunu kullanarak ediyoruz.

Deneyin:

$sql .= " (a.`latitude` >= $lbound) AND (a.`latitude` <= $ubound)";

vb