【问题标题】:Google Maps API V3 Markers Not ShowingGoogle Maps API V3 标记未显示
【发布时间】:2012-04-12 02:00:54
【问题描述】:

我使用第 2 版已经有一段时间了,并决定是时候将第 3 版作为主要网站更新的一部分。我所有的代码都基于“Mike Williams' tutorial The Basics - Part 3: Loading the data from an XML file translated to 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> 

感谢任何人提供的任何建议。

【问题讨论】:

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


    【解决方案1】:

    我在 Firefox 中遇到错误:

    错误:格式不正确 源文件:http://www.littlehotels.co.uk/new/maps/php-to-xml.php 行:1,列:1722

    使用 XML 验证器检查。

    【讨论】:

      【解决方案2】:

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

      pretty "pueblos blancos"
      

      双引号或 CDATA 部分必须使用 &amp;quot;

      因此,您将无法将返回的数据解析为 XML

      【讨论】:

      • 我正在寻找同样的事情。我在其中找到了一些阻止它的 ñ 示例。不过,在我阅读您的帖子之前,我还没有找到“。谢谢。我已经删除了”,并将 ñ 更改为 n 只是为了让它正常工作。现在我只需要弄清楚如何在我的 php-to-xml 文件中将它们转换为一个永久且干净的解决方案。感谢您花时间和麻烦提供帮助。
      • 看看 PHP 脚本会很有帮助
      【解决方案3】:

      Molle 博士,这是 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 函数应该可以解决我原来的问题。它适用于引号,但不适用于 ñ 字符。我尝试过用 ñ &0141; 替换 ñ和 n。它们都不起作用。但是,我现在已经决定避免使用ñ。等我有时间再回来解决这个问题。

      非常感谢您为我指明了正确的方向。

      【讨论】:

        【解决方案4】:

        一直在研究同样的问题。似乎自定义图标阴影功能无论如何都被丢弃了。

        “在视觉刷新中所有阴影都已被移除。任何以编程方式指定的阴影都将被忽略。”

        https://developers.google.com/maps/documentation/javascript/basics#VisualRefreshChanges

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-07-29
          • 2012-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-21
          • 1970-01-01
          相关资源
          最近更新 更多