初始化地图时未出现谷歌地图标记

Posted

技术标签:

【中文标题】初始化地图时未出现谷歌地图标记【英文标题】:Google Maps marker not appearing when map is initialized 【发布时间】:2013-07-06 04:12:45 【问题描述】:

我是 Google Map API 的新手。我知道这可能是一个简单的。代码按需要工作,但我无法让标记最初显示在地图上。标记正在等待点击事件显示标记。首次加载地图时需要在地图上显示初始标记,以便可以拖动它。

<!DOCTYPE html>
<html>
    <head>
    <script type="text/javascript" charset="utf-8" src="libs/jq.ui.min.js"></script> 
    <script type="text/javascript"
      src="https://maps.googleapis.com/maps/api/js?libraries=geometry,places,visualization&sensor=false"></script>


 <script>
var initialLocation;
var map;
var marker;
var latlon;
var lat;
var lon;


     //---------------------------------------------------
      getLocation();
      //--------------------------------------------------- 
      function getLocation()
  
  if (navigator.geolocation)
    
  var timeoutVal = 10 * 1000 * 1000;
  navigator.geolocation.getCurrentPosition(initialize,showError,
    enableHighAccuracy:true,timeout:timeoutVal,maximumAge:0

  );
        lat = position.coords.latitude; 
        lon = position.coords.longitude;

    

  

 //---------------------------------------------------

function initialize()              
    var myOptions=
    center:latlon,
    zoom:15,
    zoomControl:true,
    zoomControlOptions: 
    style:google.maps.ZoomControlStyle.SMALL
        ,
    mapTypeId: google.maps.MapTypeId.ROADMAP
    ;          


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

              myListener = google.maps.event.addListener(map, 'click', function(event) 
                    placeMarker(event.latLng);
                    google.maps.event.removeListener(myListener);
                    );

              google.maps.event.addListener(map, 'drag', function(event) 
                    placeMarker(event.latLng);
                    google.maps.event.removeListener(myListener);
                    );




        // Try W3C Geolocation (Preferred)
             if(navigator.geolocation) 
               // browserSupportFlag = true;
                navigator.geolocation.getCurrentPosition(function(position) 
          initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
                map.setCenter(initialLocation);
               , function() 
                showError;
                );
                

                function placeMarker(location) 

                  marker = new google.maps.Marker(
                        position: location,
            icon:'map_icon3.png',
            animation:google.maps.Animation.DROP,
                        map: map,
                        draggable: true
                    );
        marker.setMap(map);
                    map.setCenter(location);
                    var markerPosition = marker.getPosition();
                    populateInputs(markerPosition);
                    google.maps.event.addListener(marker, "drag", function (mEvent) 
                    populateInputs(mEvent.latLng);
                    );
                

                function populateInputs(pos) 
                    document.getElementById("t1").value=pos.lat()
                    document.getElementById("t2").value=pos.lng();
                
            


//-------------------------------------------------------------------
function showError(error)
  
  switch(error.code) 
    
    case error.PERMISSION_DENIED:
      x.innerHTML="User Denied Geolocation"
      break;
    case error.POSITION_UNAVAILABLE:
      x.innerHTML="Location Data Unavailable"
      break;
    case error.TIMEOUT:
      x.innerHTML="Request Timed Out"
      break;
    case error.UNKNOWN_ERROR:
      x.innerHTML="Unknown Error Occurred"
      break;
    
  
        </script>
    </head>
    <body onload="initialize()">
        <div id="map_canvas" style="width: 500px; height: 500px"></div>
        <input type="text" id="t1" name="t1" />
        <input type="text" id="t2" name="t2" />
    </body>
</html>

【问题讨论】:

您在代码中的哪个位置尝试在页面加载时显示标记? 【参考方案1】:

请确保您在创建标记时在图标下提到的图像文件是可访问的,即它的路径是正确的。

我将图标图像更改为以下,并且标记可见:

marker = new google.maps.Marker(
                    position: location,
                    icon:'http://google.com/mapfiles/ms/micons/red.png',
                    animation:google.maps.Animation.DROP,
                    map: map,
                    draggable: true
                );

我无法通过浏览器获取位置。 它一直给我一个错误说:

position is not defined
lat = position.coords.latitude;

为了避免这种情况,我将初始化函数中 myOptions 中的 latlon 变量更改为以固定点为中心。

var latlng = new google.maps.LatLng(19.16981,72.85434);        
var myOptions=
center:latlng,
zoom:15,
zoomControl:true,
zoomControlOptions: 
style:google.maps.ZoomControlStyle.SMALL
    ,
mapTypeId: google.maps.MapTypeId.ROADMAP
; 

您为地图拖动事件添加的侦听器会出现错误,因为它不返回 MouseEvent,因此无法获得位置。即使省略了这个监听器,代码仍然可以工作。

根据 v3 文档

https://developers.google.com/maps/documentation/javascript/reference#Map

drag None 用户拖动地图时会重复触发此事件。

希望这对您有所帮助。让我知道它是否有效。

【讨论】:

以上是关于初始化地图时未出现谷歌地图标记的主要内容,如果未能解决你的问题,请参考以下文章

带有标记的谷歌地图没有出现地图

在谷歌地图颤动中设置标记

颤振谷歌地图图像标记不会出现在中心

IOS谷歌地图标记标题不出现

谷歌地图 v3 可拖动标记

单击标记时,新按钮会自动出现在谷歌地图(Android)上?如何删除?