2012-10-04 40 views
0

这可能是一个荒谬的简单问题。谷歌地图API - 从mySQL数据库的Infowindow内容,并通过ClusterMarkerer显示

我试图显示在地图,其中标志物信息窗口会显示以下内容:

名称
地址
关于(即说明)
URL

标记均从查询使用PHP的mySQL数据库。该代码当前正确映射了所有标记,但仅在infowindow中显示“name”属性。什么是缺少的代码添加3个其他属性? (?地址,关于URL)我的猜测是,有在代码中的这点东西,需要调整:

  google.maps.event.addListener(marker, 'click', (function(marker, i) { 
        return function() { 
         infowindow.setContent(markers[i].getAttribute("name")); 
         infowindow.open(map, marker); 
        } 
       })(marker, i)); 

如果可能的话,请回答有必要的脚本!

-Live链接到数据库输出:http://www.oaktonjapan.com/testmap/testcode3.php
** 注意,第一个(PAX共用工作)和最后一个(创业代)都填充了“地址,大约和URL内容
-Live链接到现有的。输出:http://oaktonjapan.com/testmap/testmap5.html
*
*点击红色的相扑标记此标记应显示所有4个属性,如果正确编码...

目前代码:

function load() { 
    var cluster = []; 
    var map = new google.maps.Map(document.getElementById("map"), { 
    center: new google.maps.LatLng(35.681382,139.766084), 
    zoom: 14, 
    mapTypeId: 'roadmap' 
    }); 
    var infowindow = new google.maps.InfoWindow(); 
    var min = .999999; 
    var max = 1.000001; 

    // Change this depending on the name of your PHP file 
    downloadUrl("testcode3.php", function(data) { 
    var xml = data.responseXML; 
    var markers = xml.documentElement.getElementsByTagName("marker"); 
    for (var i = 0; i < markers.length; i++) { 
     var name = markers[i].getAttribute("name"); 
     var address = markers[i].getAttribute("address"); 
     var type = markers[i].getAttribute("type"); 
     var about = markers[i].getAttribute("about"); 
     var url = markers[i].getAttribute("url"); 
     var offsetLat = markers[i].getAttribute("lat") * (Math.random() * (max - min) + min); 
     var offsetLng = markers[i].getAttribute("lng") * (Math.random() * (max - min) + min); 
     var point = new google.maps.LatLng(offsetLat, offsetLng); 
     var html = "<b>" + name + "</b> <br/>" + address; 
     var icon = customIcons[type] || {}; 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: point, 
     icon: icon.icon, 
     content: html 
     }); 
     google.maps.event.addListener(marker, 'click', (function(marker, i) { 
        return function() { 
         infowindow.setContent(markers[i].getAttribute("name")); 
         infowindow.open(map, marker); 
        } 
       })(marker, i)); 
     cluster.push(marker); 
    } 
    var mc = new MarkerClusterer(map,cluster); 
    }); 
} 


function downloadUrl(url, callback) { 
    var request = window.ActiveXObject ? 
     new ActiveXObject('Microsoft.XMLHTTP') : 
     new XMLHttpRequest; 

    request.onreadystatechange = function() { 
    if (request.readyState == 4) { 
     request.onreadystatechange = doNothing; 
     callback(request, request.status); 
    } 
    }; 

    request.open('GET', url, true); 
    request.send(null); 
} 

function doNothing() {} 

非常感谢您的帮助!

+1

你试过了什么? http://mattgemmell.com/2008/12/08/what-have-you-tried/ – geocodezip

+0

评论不是为广泛的细节设计的,最好的做法是编辑你的问题以添加你尝试过的东西。 – geocodezip

+0

感谢您的链接。我试图做下列事情无济于事: - 更改infowindow.setContent(markers [i] .getAttribute(“name”)),更改标记定义(即var marker =)我搜索了Google Maps API ,这对我有很大的帮助,但是我还没有找到合并mySQL和MarkerClusterer的教程。最接近的教程是https://developers.google.com/maps/articles/phpsqlsearch_v3?hl=en#createmap。 – Ken

回答

0

我原以为你会得到一个变量“html”未定义的错误。

这是你得到的数据列的XML的:

var name = markers[i].getAttribute("name"); 
    var address = markers[i].getAttribute("address"); 
    var type = markers[i].getAttribute("type"); 
    var about = markers[i].getAttribute("about"); 

这将它合并到你上面指定的列表:

var html = name + "<br>" + address + "<br>"+ about + "<br>" + url; 

这将在信息窗口显示出来(唐不知道为什么你有“内容:html”那里,但至少现在它不会导致错误):

var marker = new google.maps.Marker({ 
    map: map, 
    position: point, 
    icon: icon.icon, 
    content: html 
    }); 
    google.maps.event.addListener(marker, 'click', (function(marker, i) { 
       return function() { 
        infowindow.setContent(html); 
        infowindow.open(map, marker); 
       } 
      })(marker, i)); 
+0

拖了两天(和晚上)的这个问题,通过一次调整解决。谢谢!并感谢发布实际问题的见解。我还有更多要学习。 – Ken

相关问题