1

I'm trying to have multiple values for profFName and profLName display on a map where a single point should display this value.

So, if I have (2) pID connected to the same marker... it should display the profFName and profLName on one point.

** Right now it is creating two markers at the exact same lat/longitude so it is plotting 3 points (as seen from the database) but it doesnt show (1) point if multiple professors exist at that location **

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

CodeTalk
  • 3,571
  • 16
  • 57
  • 92
  • As an important aside, have you considered standardizing the addresses you have (adding postal codes, etc) and verifying they actually exist? – Matt Feb 10 '12 at 20:02

1 Answers1

0

Quick solutions:

  1. Use GROUP_CONCAT function Can I concatenate multiple MySQL rows into one field?
  2. display only markers and add attribute id to each marker. When you click on marker select from database and concat received rows
  3. Create associative array of added markers {id: marker reference}. In function createMarker check this array and if marker id is already present, concate html of marker in array with marker passed in function. If not add marker to array.
Community
  • 1
  • 1
elrado
  • 16