【问题标题】:HTML5 geolocation watchposition is reloading full map not only positionHTML5 地理位置监视位置正在重新加载完整地图,而不仅仅是位置
【发布时间】:2014-10-17 14:57:58
【问题描述】:

我有一个代码,但问题是 watchposition() 正在重新加载完整的地图,不仅是位置,我想要的是当我缩放时,即使位置发生变化,它只会将标记更改为该位置

<p id="demo">Click the button to get your position:</p>

<button onclick="getLocation()">Try It</button>

<div id="mapholder"></div>

<script src="http://maps.google.com/maps/api/js?sensor=false"></script>

<script>
var x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
    navigator.geolocation.watchPosition(showPosition,showError);
} else { 
    x.innerHTML = "Geolocation is not supported by this browser.";}
}

 function showPosition(position) {
 lat = position.coords.latitude;
 lon = position.coords.longitude;
  latlon = new google.maps.LatLng(lat, lon)
 mapholder = document.getElementById('mapholder')
 mapholder.style.height='250px';
 mapholder.style.width='500px';

 var myOptions={
 center:latlon,zoom:14,
 mapTypeId:google.maps.MapTypeId.ROADMAP,
mapTypeControl:false,
navigationControlOptions:{style:google.maps.NavigationControlStyle.SMALL}
}

var map = new google.maps.Map(document.getElementById("mapholder"),myOptions);
var marker = new google.maps.Marker({position:latlon,map:map,title:"You are here!"});
 }

 function showError(error) {
switch(error.code) {
    case error.PERMISSION_DENIED:
        x.innerHTML = "User denied the request for Geolocation."
        break;
    case error.POSITION_UNAVAILABLE:
        x.innerHTML = "Location information is unavailable."
        break;
    case error.TIMEOUT:
        x.innerHTML = "The request to get user location timed out."
        break;
    case error.UNKNOWN_ERROR:
        x.innerHTML = "An unknown error occurred."
        break;
      }
     }
     </script>
    </body>
      </html>

【问题讨论】:

    标签: javascript html google-maps geolocation


    【解决方案1】:

    那是因为您正在重新加载地图。你应该改变中心。

    所以你应该修改你的代码以具有 2 个功能:

    1- 初始化地图。

         function initialize(position) {
           lat = position.coords.latitude;
           lon = position.coords.longitude;
           latlon = new google.maps.LatLng(lat, lon)
           mapholder = document.getElementById('mapholder')
           mapholder.style.height='250px';
           mapholder.style.width='500px';
    
           var myOptions={
            center:latlon,zoom:14,
            mapTypeId:google.maps.MapTypeId.ROADMAP,
            mapTypeControl:false,
            navigationControlOptions:{style:google.maps.NavigationControlStyle.SMALL}
         }
    
         var map = new google.maps.Map(document.getElementById("mapholder"),myOptions);
         var marker = new google.maps.Marker({position:latlon,map:map,title:"You are here!"});
    }
    

    2- 改变焦点。

     function showPosition(position) {
    
      map.setCenter(position);
    
     }
    

    【讨论】:

    • 完成!我把这两个功能分开了。您的代码中存在一些小错误,您应该自行修复。例如,在 initialize() 中,你得到一个 LatLng,你提取坐标,然后制作另一个 LatLng。
    • 最后一部分没看懂,请解释一下
    • 是的,你得到了函数“位置”变量。这是 LatLng 变量。然后你得到'lat'和'lon',然后构造其他变量。而是这样做: function showPosition(position) { lat = position.coords.latitude; lon = position.coords.longitude; latlon = new google.maps.LatLng(lat, lon)' 可以直接使用 'position' 变量。
    猜你喜欢
    • 2013-04-19
    • 2011-03-30
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多