2012-02-09 3 views
1

profFNameprofLNameに複数の値を表示しようとしています。Googleマップで2行のデータベースに同じポイントが表示されています

したがって、同じマーカーに(2)pIDが接続されていると... profFNameprofLNameが一点に表示されます。

**現在、正確に同じ緯度/経度で2つのマーカーを作成しているので、3点(データベースから見たもの)をプロットしていますが、その場所に複数の教授が存在する場合は表示されません**

Javascriptを

<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:マーカー参照}の連想配列を作成します。関数createMarker でこの配列をチェックし、マーカーidがすでに存在する場合、配列内のマーカーのconcate htmlを マーカーで渡します。配列にマーカーを追加しない場合
関連する問題