отображение нескольких маркеров GoogleMap на карте - PullRequest
0 голосов
/ 15 сентября 2010

Я пытаюсь отобразить массив почтовых индексов на карте Google, используя PHP и используя Symfony Framework (1.0)

Основная проблема, с которой я сталкиваюсь, заключается в том, что с каждым маркером связан некоторый текстпри нажатии на маркер появляется всплывающее окно.

Основная проблема заключается в том, что текст должен указывать на правильный почтовый индекс / маркер на карте, но по некоторым причинам это не так:

<?php
$addresses = array();
foreach($contents->getResults() as $content):
    $addresses[] = array(
        'postcode'=>sprintf('%s',str_replace(' ','',$content->getPostalCode())),
        'html'=>escape_javascript(get_partial('property/propertyList',array('content'=>$content))),
    );
endforeach;
?>

<?php
echo javascript_tag("
var map;
var localSearch = new GlocalSearch();
var center = false;
var icon = new GIcon();
icon.image = 'http://www.google.com/mapfiles/marker.png';
icon.shadow = 'http://www.google.com/mapfiles/shadow50.png';
icon.iconSize = new GSize(20, 34);
icon.shadowSize = new GSize(37, 34);
icon.iconAnchor = new GPoint(10, 34);
var delay = 100;
var bounds = new GLatLngBounds();

var addresses = ".json_encode($addresses).";

var nextAddress = 0;

function theNext() {
    if (nextAddress < addresses.length) {
        var postcode = addresses[nextAddress].postcode;;
        var html = addresses[nextAddress].html

        setTimeout('getAddress(\"'+postcode+'\",\"'+html+'\",theNext)', delay);
        nextAddress++;
    }
}
function getAddress(search, html, next) {
    usePointFromPostcode(search, html);
    next();
}

var geoCount = 0;
function usePointFromPostcode(address, html, callbackFunction) {
    localSearch.setSearchCompleteCallback(null, 
        function() {
            if (localSearch.results[0])
            {   
                geoCount++;

                var resultLat = localSearch.results[0].lat;
                var resultLng = localSearch.results[0].lng;
                var point = new GLatLng(resultLat,resultLng);

                var marker = new GMarker(point);
                GEvent.addListener(marker, 'click', function() {
                    marker.openInfoWindowHtml(html);
                });
                map.addOverlay(marker);
                bounds.extend(point);

                if(geoCount == addresses.length) {
                    setCenterToBounds();
                }
            }else{
                //console.info('Postcode not found!', address);
            }
        }); 

    localSearch.execute(address + ', UK');
}

function placeMarkerAtPoint(point, html)
{
    var marker = new GMarker(point,icon);
    map.addOverlay(marker);
}

function setCenterToBounds()
{
    map.setCenter(bounds.getCenter());
    map.setZoom(map.getBoundsZoomLevel(bounds));
    console.info('zoom',map.getBoundsZoomLevel(bounds));
}

function mapLoad() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById('map'));

        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        theNext();
    }

}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

function addUnLoadEvent(func) {
    var oldonunload = window.onunload;
    if (typeof window.onunload != 'function') {
      window.onunload = func;
    } else {
      window.onunload = function() {
        oldonunload();
        func();
      }
    }
}
addLoadEvent(mapLoad);
addUnLoadEvent(GUnload);
")
?>

Это происходит только на некоторых маркерах.Как будто он находит почтовый индекс, ставит маркер, но затем отображает неправильные данные для него

1 Ответ

0 голосов
/ 06 октября 2010

Хорошо, похоже, данные, возвращаемые из Google, похоже, возвращались в неправильном порядке.

Изменение задержки var = 100 на задержку var = 200, похоже, исправило это

Даже при том, что карта загружалась немного медленнее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...