2012-03-28 129 views
1

我已經使用了第2版很長一段時間,並決定是時候到版本3作爲主要網站更新的一部分。我基於「Mike Williams' tutorial The Basics - Part 3: Loading the data from an XML file translated to v3」上的所有代碼。經過幾個小時的微調,我已經完成了所有工作,包括集羣和自定義標記。谷歌地圖API V3標記不顯示

我是一個非常快樂的兔子,熱衷於炫耀它。然後令我失望的是,我發現IE或Firefox都無法工作(我一直在Chrome中進行測試)。

我很清楚Google Maps API並不是一件容易的事情,但是有什麼理由讓我在不同的瀏覽器中看到這種行爲?地圖可以通過去www.littlehotels.co.uk/new/並點擊「地圖搜索」來查看。代碼在這裏:

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>Little Hotels of Spain - Google Map</title> 
<meta name="description" content="Little Hotels provides maps showing the location of hotels, using Google Maps to create both a street/road map and a satellite image."> 
<meta name="keywords" content="Little Hotels, Little Hotels of Spain, Spain, mainland spain, balearic, balearics, canary, canaries, small, hotel, hotels, map, google map, holiday, holidays"> 
<style type="text/css"> 
html { height: 100% } 
body{ height: 100%; margin: 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size:12px; color:#333333;} 
a:link, a:visited, a:hover {color: #FF6600; text-decoration: none; font-weight: bold;} 
h1{font-size: 16px; color: #2B8CB9; font-weight: bold;} 
#content{padding: 0 5px 0; width: 640px;} 
#map_canvas { height: 100% } 
.verdana{font-family:Verdana, Arial, Helvetica, sans-serif; font-size: 9px; color: #666666;} 
</style> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript" src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/src/markerclusterer_compiled.js"></script> 
<script type="text/javascript" src="../js/downloadxml.js"></script> 
<script type="text/javascript"> 
//<![CDATA[ 
     var gmarkers = []; 

    // global "map" variable 
     var map = null; 
     var markerclusterer = null; 

    var image = new google.maps.MarkerImage('../images/hotel_icon.png', 
     new google.maps.Size(32, 37), 
     new google.maps.Point(0,0), 
     new google.maps.Point(16, 35)); 
    var shadow = new google.maps.MarkerImage('../images/hotel_shadow.png', 
     new google.maps.Size(51, 37), 
     new google.maps.Point(0,0), 
     new google.maps.Point(16, 35)); 

// A function to create the marker and set up the event window function 
function createMarker(latlng, name, html) { 
    var contentString = html; 
    var marker = new google.maps.Marker({ 
     position: latlng, 
     icon: image, 
     shadow: shadow 
     }); 

    google.maps.event.addListener(marker, 'click', function() { 
     infowindow.setContent(contentString); 
     infowindow.open(map,marker); 
     }); 

    // save the info we need to use later for the side_bar 
    gmarkers.push(marker); 
} 

// This function picks up the click and opens the corresponding info window 
function myclick(i) { 
    google.maps.event.trigger(gmarkers[i], "click"); 
} 

function initialize() { 
     var lat = 0; 
     var lng = 0; 
     var zoomzoom = 0; 
     var query = location.search.substring(1); 
     var pairs = query.split("&"); 
     for (var i=0; i<pairs.length; i++) { 
    var pos = pairs[i].indexOf("="); 
    var argname = pairs[i].substring(0,pos).toLowerCase(); 
    var value = pairs[i].substring(pos+1).toLowerCase(); 
     if (argname == "lat") {lat = parseFloat(value);} 
     if (argname == "lng") {lng = parseFloat(value);} 
     if (argname == "zoom") {zoomzoom = parseInt(value);} 
     } 
var thisLatlng = new google.maps.LatLng(lat, lng); 
    var myOptions = { 
center: thisLatlng, 
zoom: zoomzoom, 
mapTypeId: google.maps.MapTypeId.ROADMAP, 
    streetViewControl: false, 
    zoomControl: true, 
    zoomControlOptions: { 
    style: google.maps.ZoomControlStyle.SMALL 
    } 
    } 

    map = new google.maps.Map(document.getElementById("map_canvas"), 
           myOptions); 

    google.maps.event.addListener(map, 'click', function() { 
     infowindow.close(); 
     }); 

     downloadUrl("php-to-xml.php", function(doc) { 
     var xmlDoc = xmlParse(doc); 
     var markers = xmlDoc.documentElement.getElementsByTagName("marker"); 
     for (var i = 0; i < markers.length; i++) { 

      var lat = parseFloat(markers[i].getAttribute("lat")); 
      var lng = parseFloat(markers[i].getAttribute("lng")); 
      var point = new google.maps.LatLng(lat,lng); 
      var html=markers[i].getAttribute("html"); 
      var hotel=markers[i].getAttribute("hotel"); 

      var marker = createMarker(point,hotel,html); 
     } 

var clusterStyles = [ 
    { 
    opt_textColor: '#5a7aba', 
    url: '../images/cluster_icon.png', 
    height: 40, 
    width: 40 
    } 
]; 
     var mcOptions = {gridSize: 35, maxZoom: 8, styles: clusterStyles}; 
     markerCluster = new MarkerClusterer(map, gmarkers,mcOptions); 
     }); 
    } 

var infowindow = new google.maps.InfoWindow(
    { 
    size: new google.maps.Size(300,50) 
    }); 

//]]> 
</script> 
</head> 

<body onload="initialize()"> 
<div id="content"> 
<h1>Little Hotels Map Search</h1> 
<span class="verdana">Click on the icons for more information or use the Google controls to zoom, scroll, pan and change view.<br /><br /></span> 
<table border=1 bordercolor="#666666"> 
     <tr> 
     <td> 
<div id="map_canvas" style="width: 640px; height: 450px"></div> 
     </td> 
     </tr> 
</table> 
<br /> 
</div> 
</body> 
</html> 

感謝任何人可以提供的建議。

回答

1

返回的XML格式不正確。它包含:

pretty "pueblos blancos" 

你必須使用&quot;爲雙引號或CDATA段。

正因爲如此,你就無法解析返回的數據作爲XML

+0

我在尋找同樣的東西。我發現了幾個例子 - 在那裏阻止它。我沒有追蹤到「直到我閱讀你的帖子,謝謝,我已經刪除了」並且改變了爲了讓它工作。現在我只需要弄清楚如何在我的php-to-xml文件中將它們轉換成它是一個永久和乾淨的解決方案。 感謝您花時間和麻煩來幫忙。 – TrapezeArtist 2012-03-28 16:34:46

+0

看到PHP-skript會有所幫助 – 2012-03-28 16:54:03

0

莫爾博士,這是一個PHP腳本:

<?php 
header('Content-Type: text/xml'); 
header('charset:UTF-8'); 

require_once('../Connections/MySQL_extranet.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); 
$xmlStr=str_replace("ñ",'&ntilde;',$xmlStr); 
return $xmlStr; 
} 

mysql_select_db($database_MySQL_extranet, $MySQL_extranet); 
// Select all the rows in the markers table 
$query = "SELECT hid, hotel, lat, lng, picture, summary FROM ex_hotel WHERE country = 'spain'"; 
$result = mysql_query($query); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

// Start XML file, echo parent node 
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; 

echo '<markers>'; 

// Iterate through the rows, printing XML nodes for each 
while ($row = @mysql_fetch_assoc($result)){ 

    // ADD TO XML DOCUMENT NODE 
    echo '<marker '; 
    echo ' html="&lt;img src=&quot;../images/' . $row['picture'] . '&quot; align=&quot;left&quot; height=&quot;108&quot; width=&quot;155&quot; style=&quot;margin-right:8px;&quot;&gt; &lt;div style=&quot;width:320px&quot;&gt; &lt;a href=&quot;' . 'http://www.littlehotels.co.uk/new/spain/' . $row['hid'] . '.php&quot; target=&quot;_parent&quot; &gt;' . parseToXML($row['hotel']) . '&lt;/a&gt; &lt;br&gt;&lt;span class=&quot;verdana&quot;&gt;&lt;br&gt;'.parseToXML($row['summary']).'&lt;/span&gt;&lt;/div&gt;"'; 
    echo ' lat="' . $row['lat'] . '"'; 
    echo ' lng="' . $row['lng'] . '"'; 
    echo ' />'; 
} 

// End XML file 
echo '</markers>'; 
?> 

的parsetoXML功能應該解決我原來的問題。它適用於引號,但不適用於 - 角色。我用各種方法嘗試用&ntilde替換 - & 0141;和n。他們都沒有工作。不過,我剛剛解決了避免使用 - 目前。當我有更多時間時,我會再回來解決這個問題。

非常感謝您指點正確的方向。