【问题标题】:displaying multiple GoogleMap markers on map在地图上显示多个 GoogleMap 标记
【发布时间】:2010-09-15 12:57:55
【问题描述】:

我正在尝试使用 PHP 和 Symfony 框架 (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);
")
?>

它只发生在一些标记上。这就像它找到了邮政编码,将标记放在上面,但随后显示错误的详细信息

【问题讨论】:

    标签: php javascript google-maps symfony1


    【解决方案1】:

    好的,看来从 Google 返回的数据似乎以错误的顺序返回。

    将 var delay = 100 更改为 var delay = 200 似乎可以解决此问题

    即使它使地图加载速度有点慢

    【讨论】:

      猜你喜欢
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      相关资源
      最近更新 更多