несколько маркеров на картах Google из файла xml

Я так близок к тому, чтобы

Мой вопрос: как я могу заставить карты google читать файл data.xml, который хранится на моем ftp-сервере?

Файл xml выглядит так:

<markers> <marker> <lat>57.709</lat> <lng>11.9799</lng> </marker> <marker> <lat>57.6468</lat> <lng>11.9961</lng> </marker> </markers> 

Это код для карты:

 <script src="http://maps.googleapis.com/maps/api/js?key=AIzaSyDY0kkJiTPVd2U7aTOAwhc9ySH6oHxOIYM&sensor=false"> </script> <script type="text/javascript"> function initialize() { var myLatlng = new google.maps.LatLng(57.4419, 11.1419); var myOptions = { zoom: 20, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP } var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); downloadUrl("data.xml", function(data) { var markers = data.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var latlng = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))); var marker = new google.maps.Marker({position: latlng, map: map}); } }); } </script> 

Это код PHP для файла XML:

 $xml="<markers>\n\t\t"; while($data=mysql_fetch_array($result)) { $xml .="<marker>\n\t\t"; $xml .= "<lat>".$data['latitude']."</lat>\n\t\t"; $xml .= "<lng>".$data['longitude']."</lng>\n\t\t"; $xml .="</marker>\n\t"; } $xml.="</markers>\n\r"; $handle = fopen('data.xml', 'w') or die('Cannot open data.xml'); fwrite($handle, $xml); в $xml="<markers>\n\t\t"; while($data=mysql_fetch_array($result)) { $xml .="<marker>\n\t\t"; $xml .= "<lat>".$data['latitude']."</lat>\n\t\t"; $xml .= "<lng>".$data['longitude']."</lng>\n\t\t"; $xml .="</marker>\n\t"; } $xml.="</markers>\n\r"; $handle = fopen('data.xml', 'w') or die('Cannot open data.xml'); fwrite($handle, $xml); 

Он сохраняется как data.xml, и мои карты должны загружаться, но маркеры не отображаются.

Оцените любой ответ на этот вопрос.

Существует три стандартных формата для «сопоставления» XML (XML означает расширяемый язык разметки , вы можете делать с ним то, что хотите).

  • KML – содержимое элемента <coordinates> , возможны несколько значений, разделенных строками.
 <Placemark> <name>name</name> <description>go 0.3&amp;#160;mi</description> <Point> <coordinates>-103.17619,44.09972,0</coordinates> </Point> </Placemark> 

example parser – geoxml3

  • атрибуты широты / долготы элемента-маркера (используемые и описанные в Mike Williams в Google Maps Javascript API v2 )
 <marker lat="44.09972" lng="-103.17619" /> 

Выполните анализ, используя код, который вы опубликовали в своем вопросе:

 var markers = data.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var latlng = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))); var marker = new google.maps.Marker({position: latlng, map: map}); } 
  • содержание широты / долготы в отдельных элементах
 <marker> <latitude>44.09972</latitude> <longitude>-103.17619</longitude> </marker> 

Разберите, получив содержимое элементов <latitude> и <longitude> :

 var markers = data.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var latlng = new google.maps.LatLng(parseFloat(nodeValue(markers[i].getElementByTagName("latitude")[0])), parseFloat(nodeValue(markers[i].getElementByTagName("longitude")[0]))); var marker = new google.maps.Marker({position: latlng, map: map}); } 

от geoxml3 :

 //nodeValue: Extract the text value of a DOM node, with leading and trailing whitespace trimmed function nodeValue (node) { var retStr=""; if (!node) { return ''; } if(node.nodeType==3||node.nodeType==4||node.nodeType==2){ retStr+=node.nodeValue; } else if(node.nodeType==1||node.nodeType==9||node.nodeType==11){ for(var i=0;i<node.childNodes.length;++i){ retStr+=arguments.callee(node.childNodes[i]); } } return retStr; }; 

вопрос о SO о том, как это сделать, используя jquery – пример из этого вопроса

XML-формат проанализирован:

 <marker> <lat>44.09972</lat> <lng>-103.17619</lng> </marker> 

Широта и долгота сохраняются как содержимое лат / lng-childNodes маркера

Вы можете получить доступ к значениям через:

 var latlng = new google.maps.LatLng(parseFloat(markers[i] .getElementsByTagName("lat")[0] .firstChild.nodeValue), parseFloat(markers[i] .getElementsByTagName("lng")[0] .firstChild.nodeValue));