Jump to content
  • 0

Google maps API проблема с выводом маркеров из БД


Даниил Виттманн
 Share

Question

Всем здрасти. В общем есть у меня в БД таблица с информацией о маркерах (ид, имя, адрес, широта, долгота). Эта информация из базы данных размещается в XML средствами 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;
}

// подключаюсь к бд
$connection=mysql_connect ('localhost', $username, $password);
if (!$connection) {
  die('Not connected : ' . mysql_error());
}

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

// беру инфу о маркерах
$query = "SELECT * FROM markers WHERE 1";
$result = mysql_query($query);
if (!$result) {
  die('Invalid query: ' . mysql_error());
}

// открываю xml тег
echo '<markers>';

// цикл...
while ($row = @mysql_fetch_assoc($result)){
  echo '<marker ';
  echo 'type="' . $row['id] . '" ';
  echo 'name="' . parseToXML($row['name']) . '" ';	//беру имя и убираю из него все специальные символы
  echo 'address="' . parseToXML($row['address']) . '" '; //то же самое с адрессом
  echo 'lat="' . $row['lat'] . '" ';
  echo 'lng="' . $row['lng'] . '" ';
  echo '/>';
}

//тег закрыл
echo '</markers>';

?>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

 

 

В итоге если открыть браузером будет что-то типо этого

<markers>
  <marker id="1" name="Name of first marker" address="Address of first marker" lat="49.234310" lng="28.464508" />
  <marker id="2" name="Name of second marker" address="Address of second marker" lat="49.237968" lng="28.481297" />
</markers>

 


Дальше начинается самое сложное и непонятное для меня. С помощью js надо все впихнуть в google карту

Скрытый текст

 


 function initMap() { 
        var map = new google.maps.Map(document.getElementById('map'), { //вызываюкарту
          center:  {lat: 49.23, lng: 28.47}, //параметры
          zoom: 12
        });
        var infoWindow = new google.maps.InfoWindow;

          downloadUrl('pointmarkers.php', function(data) { // pointmarkers.php — тут указываю файл описаный выше
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName('marker'); //!!!!! А вот тут уже не работает.
            Array.prototype.forEach.call(markers, function(markerElem) {
              var name = markerElem.getAttribute('name');
              var address = markerElem.getAttribute('address');
              var point = new google.maps.LatLng(
                  parseFloat(markerElem.getAttribute('lat')),
                  parseFloat(markerElem.getAttribute('lng')));

              var infowincontent = document.createElement('div');
              var strong = document.createElement('strong');
              strong.textContent = name
              infowincontent.appendChild(strong);
              infowincontent.appendChild(document.createElement('br'));

              var text = document.createElement('text');
              text.textContent = address
              infowincontent.appendChild(text);
              var marker = new google.maps.Marker({
                map: map,
                position: point
              });
              marker.addListener('click', function() {
                infoWindow.setContent(infowincontent);
                infoWindow.open(map, marker);
              });
            });
          });
        }



      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() {}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

 

 

И в указаной выше строке выдает ошибку
Uncaught TypeError: Cannot read property 'getElementsByTagName' of null

делал по туториалу на англоязычных форумах конкретного ответа не нашел:unsure:. Надеюсь на вашу помощь.

Если нужно посмотреть вживую, то вот

Edited by Даниил Виттманн
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By alex_web64
      Здравствуйте. Есть такой xml-код
      <?xml version="1.0" encoding="UTF-8"?><ajax><cmd><![CDATA[<div class="success"><b>success</b></div><br><br>[ <a href="http://mysite.com/link/1/1-1-0-16" target="_blank">my link</a> ]]]></cmd></ajax>Мне необходимо получить с него число 16. Прошу вашей помощи в написании regexp, или другого решения. Мои попытки не увенчались успехом.
    • By GrandLamoz
      Доброго времени суток, товарищи!
      Прошу помочь с таким вот заданием:
      Вывести содержание документа XML, который приведён ниже, в виде таблицы с фиксированной шириной 900px, где каждый столбец имеет фиксированный размер. Каждый второй ряд таблицы выведите красным цветом.
       
    • By hike
      Здравствуйте! Можете подсказать мне идею, как скопировать таблицу из XHTML-документа, используя XSL-шаблон, чтобы на выходе получить тот же самый XHTML-документ, кроме дочерних узлов ячейки с атрибутом valign?
       
      Пример XHTML-документа:
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
      <title></title>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
      </head>
      <body>
      <table>
      <tr><td>Содержимое<span>здесь</span></td><td>Ссылка<a href='#>здесь</a>'></td></tr>
      <tr><td>Содержимое<span>здесь</span></td><td>Ссылка<a href="#">здесь</a></td></tr>
      <tr><td><input type="text"/></td><td>простой текст</td></tr>
      <tr><td valign="top"><b>Жирный текст</b> вверху</td><td>Метка <input type="radio" /></td></tr>
      </table>
      </body>
      </html>
       
      Пример XSL-шаблона:
       
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0">
          <xsl:template match="/">
                  <xsl:copy-of select="." />
          </xsl:template>
      </xsl:stylesheet>

      Как в этом select указать условие, что нужно копировать все КРОМЕ содержимого ячейки <td valign="top"><b>Жирный текст</b> вверху</td>?
    • By eugen35
      ВАЖНО! Хотелось бы использовать стандартное (последний утверждённый вариант) xml-описание счёта-фактуры и стандартный xslt для неё. 
       
      Ну и хорошо бы его где-то желательно автоматически брать, а не ручками забивать.
       
      1400 рублей - стоимость задания.
      Сделать веб-приложение (фронтэнд, если нужно, с меня), в которое вбиваешь требуемые реквизиты счёта-фактуры, а оно генерит xml. А по отдельной кнопке с использованием xslt позволяет распечатать этот xml.
       
      Код должен быть хорошо откомментирован.
       
      Хранить этот счёт-фактуру не нужно где-либо. Поскольку это чисто учебное приложение для меня.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy