使用XML在Google地图中创建多个标记

时间:2011-11-30 04:27:00

标签: javascript xml google-maps google-maps-api-3 google-maps-markers

我几乎肯定以前曾问过这个问题,但是对于我的爱,我无法在任何地方找到答案。基本上我想要做的是在我正在构建的自定义Google地图上创建多个标记。我已经有一个XML文件,其中包含坐标(lat / lng)和每个项目的标题。我想从XML文件中获取数据并使用它在地图上创建标记。我已经找到了如何使用KML文件和MySQL / PHP执行此操作,但我需要知道如何在Javascript中执行此操作。

还有一件事:我有一个自己的.xml文件,因此我不会从网页上获取数据,因为我相信(从我今天的研究中得知)代码可能会有所不同。

如果有人知道之前是否已将其发布到其他地方,请你指点我?我一整天都在寻找,这是我的最后一招。非常感谢!!!

2 个答案:

答案 0 :(得分:3)

如果您正在寻找一种在JavaScript中解析xml文本的方法,那么请看这里: XML parsing of a variable string in JavaScript 有关从JavaScript加载xml文件的信息: Load xml from javascript

从自定义xml创建标记非常简单。我添加了一个简短的例子。它显示了如何解析xml文本或加载xml文件,然后根据数据创建标记。

一些自定义xml文本:

var myXmlText = '<?xml version="1.0" encoding="ISO-8859-1"?>' +
      '<coords>' +
         '<item><position lat="50.1" lng="14.5"/><title>Praha</title></item>' +
         '<item><position lat="51.5" lng="0"/><title>London</title></item>' +
         '<item><position lat="48.8" lng="2.4"/><title>Paris</title></item>' +
         '<item><position lat="52.5" lng="13.4"/><title>Berlin</title></item>' +
         '<item><position lat="48.2" lng="16.4"/><title>Wien</title></item>' +
      '</coords>';

将xml文本解析为xml DOM对象:

function parseXml(xmlText) {
   var xmlDoc;
   if (window.DOMParser) {
      parser=new DOMParser();
      xmlDoc=parser.parseFromString(xmlText,"text/xml");
   } else { // Internet Explorer
      xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
      xmlDoc.async="false";
      xmlDoc.loadXML(xmlText); 
   }
   return xmlDoc;
}

将xml文件加载并解析为xml DOM对象:

function loadXml(xmlUrl) {
   if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
   } else {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   xmlhttp.open("GET",xmlUrl,false);
   xmlhttp.send();
   xmlDoc=xmlhttp.responseXML;
   return xmlDoc;
}

从xml DOM对象中的数据创建标记:

function createMarkers(xmlDoc) {
   var items = xmlDoc.getElementsByTagName('item');
   for(var i=0; i<items.length; i++) {
      var positionEl = items[i].getElementsByTagName('position')[0];
      var latlng = new google.maps.LatLng(positionEl.getAttribute('lat'), positionEl.getAttribute('lng'));
      var titleNode = items[i].getElementsByTagName('title')[0].childNodes[0];
      var marker = new google.maps.Marker({
          position: latlng,
          map: map,
          title: titleNode.nodeValue
      });
    }
}

要从xml文件创建标记,您只需要:

var xmlDoc = loadXml("my_items.xml");
createMarkers(xmlDoc);

要从xml文本创建标记,请使用:

var xmlDoc = parseXml(myXmlText);
createMarkers(xmlDoc);

答案 1 :(得分:0)

为了解决这个问题,我将以下代码添加到createMarkers函数中:

var myOptions = {
    zoom: 6 ,
    center: latlng ,
    mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map"), myOptions);