2012-02-09 2 views
1

profFNameprofLName에 대해 여러 값을 표시하려고하는데 한 점에이 값이 표시되어야합니다.Google지도에서 2 행의 데이터베이스에 동일한 점이 표시됩니다.

그래서 (2) pID가 동일한 마커에 연결된 경우 ... profFNameprofLName이 한 지점에 표시되어야합니다.

** 바로 지금 위도/경도가 정확히 일치하는 두 개의 마커를 생성하므로 데이터베이스에서 보았을 때 3 점을 플로팅하고 있지만 그 위치에 여러 명의 교수가있는 경우 포인트가 표시되지 않습니다 **

자바 스크립트

<script type="text/javascript"> 
    //<![CDATA[ 

    var iconBlue = new GIcon(); 
    iconBlue.image = 'http://labs.google.com/ridefinder/images/mm_20_blue.png'; 
    iconBlue.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'; 
    iconBlue.iconSize = new GSize(12, 20); 
    iconBlue.shadowSize = new GSize(22, 20); 
    iconBlue.iconAnchor = new GPoint(6, 20); 
    iconBlue.infoWindowAnchor = new GPoint(5, 1); 

    var iconRed = new GIcon(); 
    iconRed.image = 'http://labs.google.com/ridefinder/images/mm_20_red.png'; 
    iconRed.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'; 
    iconRed.iconSize = new GSize(12, 20); 
    iconRed.shadowSize = new GSize(22, 20); 
    iconRed.iconAnchor = new GPoint(6, 20); 
    iconRed.infoWindowAnchor = new GPoint(5, 1); 

    var customIcons = []; 
    customIcons["restaurant"] = iconBlue; 
    customIcons["bar"] = iconRed; 

    function load() { 
     if (GBrowserIsCompatible()) { 
     var map = new GMap2(document.getElementById("map")); 
     map.addControl(new GSmallMapControl()); 
     map.addControl(new GMapTypeControl()); 
     map.setCenter(new GLatLng(47.614495, -122.341861), 13); 

     GDownloadUrl("phpsqlajax_genxml.php", function(data) { 
      var xml = GXml.parse(data); 
      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 profFName = markers[i].getAttribute("profFName"); 
      var profLName = markers[i].getAttribute("profLName"); 
      var type = markers[i].getAttribute("type"); 
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), 
            parseFloat(markers[i].getAttribute("lng"))); 
      var marker = createMarker(point, name, address, profFName, profLName, type); 
      map.addOverlay(marker); 
      } 
     }); 
     } 
    } 

    function createMarker(point, name, address, profFName, profLName, type) { 
      var marker = new GMarker(point, customIcons[type]); 
      var html = "<b>" + name + "</b> <br/>" + address + "<br><br>" + profFName + profLName; 
      GEvent.addListener(marker, 'click', function() { 
       marker.openInfoWindowHtml(html); 
      }); 
       return marker; 
    } 
    //]]> 
    </script> 

    </head> 

    <body onload="load()" onunload="GUnload()"> 
    <div id="map" style="width: 110 0px; height: 500px"></div> 
    </body> 

PHP

<?php 
require("phpsqlajax_dbinfo.php"); 

function parseToXML($htmlStr) 
{ 
$xmlStr=str_replace('<','&lt;',$htmlStr); 
$xmlStr=str_replace('>','&gt;',$xmlStr); 
$xmlStr=str_replace('"','&quot;',$xmlStr); 
$xmlStr=str_replace("'",'&#39;',$xmlStr); 
$xmlStr=str_replace("&",'&amp;',$xmlStr); 
return $xmlStr; 
} 

// Opens a connection to a MySQL server 
$connection=mysql_connect ($host, $username, $password); 
if (!$connection) { 
    die('Not connected : ' . mysql_error()); 
} 

// Set the active MySQL database 
$db_selected = mysql_select_db($database, $connection); 
if (!$db_selected) { 
    die ('Can\'t use db : ' . mysql_error()); 
} 

// Select all the rows in the markers table 
$query = "SELECT * FROM markers M, professor P 
WHERE P.id = M.id;"; 
if($row = mysql_fetch_array($result)) { 
    do { 
     echo $row; 
    } 
    while($row = mysql_fetch_array($result)); 
} else { 
    die('No results.'); 
} 

header("Content-type: text/xml"); 

// Start XML file, echo parent node 
echo '<markers>'; 

// Iterate through the rows, printing XML nodes for each 
while ($row = @mysql_fetch_assoc($result)){ 
    // ADD TO XML DOCUMENT NODE 
    echo '<marker '; 
    echo 'name="' . parseToXML($row['name']) . '" '; 
    echo 'address="' . parseToXML($row['address']) . '" '; 
    echo 'profFName="' . parseToXML($row['profFName']) . '" '; 
    echo 'profLName="' . parseToXML($row['profLName']) . '" '; 
    echo 'lat="' . $row['lat'] . '" '; 
    echo 'lng="' . $row['lng'] . '" '; 
    echo 'type="' . $row['type'] . '" '; 
    echo '/>'; 
} 

// End XML file 
echo '</markers>'; 

?> 

img1

img2

+0

중요한 점은 우편 주소 등을 표준화하여 실제로 존재하는지 확인한 것입니까? – Matt

답변

0

빠른 솔루션 :

  1. 사용 GROUP_CONCAT 기능 Can I concatenate multiple MySQL rows into one field?
  2. 만 표시 마커를 각 마커 속성 ID를 추가합니다. 마커를 클릭하면 데이터베이스에서 선택하고 수신 된 행을 연결합니다.
  3. 추가 된 마커 {id : marker reference}의 연관 배열을 만듭니다. 함수 createMarker 에서이 배열을 검사하고 마커 id가 이미 존재하면 배열에있는 마커의 concate html을 마커와 함께 전달합니다. 배열에 마커를 추가하지 않을 경우.
관련 문제