【问题标题】:Google Maps API v3 | shows no map data谷歌地图 API v3 |不显示地图数据
【发布时间】:2013-08-16 12:33:37
【问题描述】:

我正在为我们当地的消防员之家编写一个小型 javascript 应用程序。该应用程序有点像 powerpoint 等,但在 html 中。 在这个应用程序中,我将显示一个谷歌地图,其中包含一条路线,显示从消防员家到火灾的路线。 我使用 jquery 从 http 服务器请求数据。

我的问题是我已经插入了谷歌地图 api 的代码,并且浏览器向我显示了带有谷歌徽标的地图对象等等。但是没有地图,只有灰色的背景。使用鼠标,我似乎可以在地图中放大/缩小、滚动等(如果我进行交互,在 firebug 中会将数据传输到 google api),但地图不存在。

我的个人地图 api 密钥已插入,如果我删除它,插件会显示失败。所以我认为这不是问题。

jquery 和 maps api 有问题吗? 周围还有人遇到这个问题吗?

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" type="text/css" href="./css/standard.css">
    <script src="./js/libs/jquery-1.9.0/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript"
        src="http://maps.googleapis.com/maps/api/js?key=api_key&sensor=false">
    </script>
    <script type="text/javascript">
        function initialize() {
            var mapOptions = {
                center: new google.maps.LatLng(50.98188, 6.78655),
                zoom: 8,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById("map_canvas"),mapOptions);
            window.console.log("Position center: "+map.getCenter()+"\nZoom: "+map.getZoom());
            map.setZoom(12);
            map.setCenter(new google.maps.LatLng(0, 0));
            window.console.log("Position center: "+map.getCenter()+"\nZoom: "+map.getZoom());
        }
    </script>
</head>
<body>
    <div id="site_content">
        <div id="head_left" class="background_box">
        </div>
        <div id="head_center" class="background_box">
            <div class="heading"></div>
        </div>
        <div id="head_right" class="background_box">
            <h1 class="date_data"></h1>
            <h1 class="time_data"></h1>
        </div>
        <div class="spacing_data"></div>
        <div id="data_box" class="background_box">
            <div id="map_canvas" style="width: 100%;height: 100%"></div>
        </div>
        <div class="spacing_data"></div>
        <div id="footer_left" class="background_box">
        </div>
        <div id="footer_center" class="background_box">
            <div class="footer"></div>
        </div>
        <div id="footer_right" class="background_box">
        </div>
    </div>
    <script>
        jQuery.getScript("./js/initialisation.js",function(){initialisation();});
        initialize();
    </script>
</body>

没有内容,因为这些都是在运行时通过 jquery 从服务器加载,然后插入到 dom 中。

【问题讨论】:

  • 让我们假设这不是 CSS 问题,缺少 #map_canvas 的高度(据我了解,地图是可见的,但不加载任何图块)...我们需要更多详细信息,因为给定的代码无法回答这个问题。请发布initialisation.js和standard.css的内容

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


【解决方案1】:

Mike Williams' description on percentage sized maps from his v2 tutorial

您需要为地图的所有父元素添加定义,以允许浏览器计算非零大小。

working example

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
html,body {
width: 100%;
height: 100%;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
        function initialize() {
            var mapOptions = {
                center: new google.maps.LatLng(50.98188, 6.78655),
                zoom: 8,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById("map_canvas"),mapOptions);
            window.console.log("Position center: "+map.getCenter()+"\nZoom: "+map.getZoom());
            map.setZoom(12);
            map.setCenter(new google.maps.LatLng(0, 0));
            window.console.log("Position center: "+map.getCenter()+"\nZoom: "+map.getZoom());
        }
google.maps.event.addDomListener(window,"load",initialize);
</script>
</head>
<body>
    <div id="site_content" style="width: 100%;height: 100%;">
        <div id="head_left" class="background_box" >
        </div>
        <div id="head_center" class="background_box">
            <div class="heading"></div>
        </div>
        <div id="head_right" class="background_box">
            <h1 class="date_data"></h1>
            <h1 class="time_data"></h1>
        </div>
        <div class="spacing_data"></div>
        <div id="data_box" class="background_box" style="width: 100%;height: 100%;">
            <div id="map_canvas" style="width: 100%;height: 100%;"></div>
        </div>
        <div class="spacing_data"></div>
        <div id="footer_left" class="background_box">
        </div>
        <div id="footer_center" class="background_box">
            <div class="footer"></div>
        </div>
        <div id="footer_right" class="background_box">
        </div>
    </div>
</body>
</html>

【讨论】:

    【解决方案2】:

    我没有发现任何明显的错误,但这对我有用。可能只是 CSS 问题。

    <!DOCTYPE html>
    <html>
    <head>
    <title></title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
        html { height: 100% }
        body { height: 100%; margin: 0; padding: 0 }
        #map_canvas { height: 100% }
    </style>
    
    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=geometry"></script>
    
    <script>
        function initialize() {
            var mapOptions = {
                center: new google.maps.LatLng(50.98188, 6.78655),
                zoom: 8,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById("map_canvas"),mapOptions);
            window.console.log("Position center: "+map.getCenter()+"\nZoom: "+map.getZoom());
            map.setZoom(12);
            map.setCenter(new google.maps.LatLng(0, 0));
            window.console.log("Position center: "+map.getCenter()+"\nZoom: "+map.getZoom());
        }
    
        google.maps.event.addDomListener(window, 'load', initialize);
    </script>
    </head>
    <body>
        <div id="map_canvas"></div>
    </body>
    </html>
    

    【讨论】:

      【解决方案3】:

      现在地图一切正常。谢谢大家的帮助。

      现在在调试之后,我知道我之前的代码中有两个问题。 1.百分比大小图问题 2.我的div框定义为溢出:隐藏。在我删除此声明后,现在显示完整的地图。

      喜欢开头:谢谢

      【讨论】:

        【解决方案4】:

        在我的情况下,这是样式的问题,首先我禁用了所有样式以查看会发生什么,并且因为地图出现了我新的他们负责。 然后我把所有样式都转回来,逐行删除,看看是哪一个负责。

        【讨论】:

          【解决方案5】:
          <!-- Preloader -->
          
          <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
          <script src="js/cookie.js"></script>
          <!-- Latest compiled and minified CSS -->
          <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css">
          
          <!-- Optional theme -->
          <!-- Compiled and minified CSS -->
          <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/css/materialize.min.css">
          
          <!-- Compiled and minified JavaScript -->
          <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/js/materialize.min.js"></script>
          <meta charset="utf-8" />
          <meta name="format-detection" content="telephone=no" />
          <meta name="msapplication-tap-highlight" content="no" />
          <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
          <!-- This is a wide open CSP declaration. To lock this down for production, see below. -->
          <meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *" />
          <!-- Good default declaration:
          * gap: is required only on iOS (when using UIWebView) and is needed for JS-   >native communication
          * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
          * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
          * Enable inline JS: add 'unsafe-inline' to default-src
          * Enable eval(): add 'unsafe-eval' to default-src
          * Create your own at http://cspisawesome.com
          -->
          <!-- <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: 'unsafe-inline' https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *" /> -->
          

          试试这个....

          【讨论】:

          • 您好,Amr,欢迎来到 StackOverflow。此处不鼓励仅使用代码的答案,因为它们不清楚并且不教任何东西。您能否编辑您的答案以描述为什么这可以解决 OP 的问题以及它的作用?谢谢。
          猜你喜欢
          • 2014-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 1970-01-01
          • 1970-01-01
          • 2013-07-05
          • 2011-03-25
          相关资源
          最近更新 更多