Я хочу отображать два разных типа маркеров на карте Google из двух разных баз данных - PullRequest
1 голос
/ 23 января 2012

Мне трудно понять, как отобразить два разных набора маркеров на моей карте. У меня есть две разные базы данных, в каждой из которых есть таблица, из которой мне нужно получить данные для отображения. Для одной таблицы форматом является id, улица, город, штат, zip_code, type и lat / lng, как вы можете видеть ниже. Я могу отобразить этот список свойств нормально, но когда я пытаюсь добавить другой набор из второй таблицы, он не работает. Я вставил свой исходный код, который работает на одну таблицу ниже:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>propertylocations</title>
    <script src="http://maps.google.com/maps?file=api&v=2&key=mykey" 
       type="text/javascript"></script>
    <script type="text/javascript">

    var iconFlag = new GIcon(); 
    iconFlag.image = 'images/redflag.png';
    iconFlag.iconSize = new GSize(12, 20);
    iconFlag.iconAnchor = new GPoint(6, 20);
    iconFlag.infoWindowAnchor = new GPoint(5, 1);

    var iconBlue = new GIcon(); 
    iconBlue.image = 'images/glossy-ball.png';
    iconBlue.iconSize = new GSize(12, 20);
    iconBlue.iconAnchor = new GPoint(6, 20);
    iconBlue.infoWindowAnchor = new GPoint(5, 1);

    var iconRed = new GIcon(); 
    iconRed.image = 'images/redbutton.png';
    iconRed.iconSize = new GSize(12, 20);
    iconRed.iconAnchor = new GPoint(6, 20);
    iconRed.infoWindowAnchor = new GPoint(5, 1);

    var customIcons = [];
    customIcons["rental"] = iconFlag;
    customIcons["commercial"] = iconBlue;
    customIcons["residential"] = iconRed;

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

        // Change this depending on the name of your PHP file
        GDownloadUrl("markers4.php", function(data) {
          var xml = GXml.parse(data);
          var markers = xml.documentElement.getElementsByTagName("marker");
          for (var i = 0; i < markers.length; i++) {
            var id = markers[i].getAttribute("id");
            var street = markers[i].getAttribute("street");
            var city = markers[i].getAttribute("city");
            var state = markers[i].getAttribute("state");
            var zip_code = markers[i].getAttribute("zip_code");
            var type = markers[i].getAttribute("type");
            var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
            var marker = createMarker(point, id, street, city, state, zip_code, type);
            map.addOverlay(marker);
           }
        });
      }
    }

    function createMarker(point, id, street, city, state, zip_code, type) {
      var marker = new GMarker(point, customIcons[type]);
      var html = "<b>" + id + "</b> <br/>" + street + "<br/>" + city + "<br/>" + state + "<br/>" + zip_code +"<br/>" + type;
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }
    //]]>
  </script>
  </head>
<body background="images/bg2.jpg">
  <body onload="load()" onunload="GUnload()">
    <center><div id="map" style="width: 800px; height: 600px"></div></center>
  </body>
</html>

Я попытался сделать следующее, чтобы отобразить данные из второй таблицы, но он изменил значки на значки по умолчанию и одинаково отформатировал поля выноски html - поэтому один из них отображался правильно, а все значки из другой таблицы отображались как "неопределенное".

Все здесь идентично вышеописанному, за исключением того, что я добавил второй GdownloadURL и создал функцию маркера (поэтому я опустил верхний раздел, который можно увидеть выше).

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

         // Change this depending on the name of your PHP file
        GDownloadUrl("markers4.php", function(data) {
          var xml = GXml.parse(data);
          var markers = xml.documentElement.getElementsByTagName("marker");
          for (var i = 0; i < markers.length; i++) {
            var id = markers[i].getAttribute("id");
            var street = markers[i].getAttribute("street");
            var city = markers[i].getAttribute("city");
            var state = markers[i].getAttribute("state");
            var zip_code = markers[i].getAttribute("zip_code");
            var type = markers[i].getAttribute("type");
            var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
            var marker = createMarker(point, id, street, city, state, zip_code, type);
            map.addOverlay(marker);
           }
        });
    GDownloadUrl("markers6.php", function(data) {
          var xml = GXml.parse(data);
          var markers = xml.documentElement.getElementsByTagName("marker");
          for (var i = 0; i < markers.length; i++) {
            var realtor_phone = markers[i].getAttribute("realtor_phone");
            var availability_date = markers[i].getAttribute("availability_date");
            var type = markers[i].getAttribute("type");
            var point = new GLatLng(parseFloat(markers[i].getAttribute("latitude")),
                                    parseFloat(markers[i].getAttribute("longitude")));
            var marker = createMarker(point, realtor_phone, availability_date, type);
            map.addOverlay(marker);
           }
        });
      }
    }

    function createMarker(point, id, street, city, state, zip_code, type) {
      var marker = new GMarker(point, customIcons[type]);
      var html = "<b>" + id + "</b> <br/>" + street + "<br/>" + city + "<br/>" + state + "<br/>" + zip_code +"<br/>" + type;
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }

    function createMarker(point, realtor_phone, availability_date, type) {
      var marker = new GMarker(point, customIcons[type]);
      var html = "<b>" + realtor_phone + "</b><br/>" + availability_date;
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }
    //]]>
  </script>
  </head>
<body background="images/bg2.jpg">
  <body onload="load()" onunload="GUnload()">
    <center><div id="map" style="width: 800px; height: 600px"></div></center>
  </body>
</html>

Я могу изменить какой html-формат пиктограммы, который я вижу, переместив фигурную скобку ниже первого «маркера возврата» и поместив его после второго «маркера возврата» как двойной, но в любом случае у меня возникают проблемы с форматированием. Если у кого-то есть какие-то идеи, я буду очень признателен за них. Я застрял и имею несколько разных типов данных, которые мне нужно загрузить и отобразить на моей карте. Благодарю.

...