2014-01-08 63 views
0

谷歌地圖多個標記我如此接近得到這個工作從XML文件

我的問題是:如何才能讓谷歌地圖讀取存儲我的FTP服務器上的data.xml文件?

的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> 

這是XML文件的PHP代碼:

$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,我的地圖應該加載,但沒有標記出現。

欣賞對此的任何迴應。

+0

緯度&LNG不是''元素的屬性。 – geocodezip

+0

哦,那麼元素的屬性是什麼? –

+0

您的xml沒有任何內容。 ''會屬性。 – geocodezip

回答

0

有三個標準格式的「映射」 XML (XML代表eXtensible Markup Language,你可以用它來做什麼)。

  • 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

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

解析用c像你這樣的頌歌已經張貼在你的問題:在不同的元素

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; 
    }; 
    

    question on SO about how to do this using jquery - example from that question

    XML格式解析:

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

的緯度和經度存儲爲緯度/液化天然氣的childNodes的內容標記的

您可以通過訪問值:

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