2017-09-05 152 views
-1

我有谷歌地图工作正常时,可以检测到位置,但如果它不能,地图永远不会显示。我想要做的是,如果无法检测到位置,请将lat和lng变量设置为函数locError中的那个。如何做到这一点?谷歌地图,如果没有位置设置标记到默认位置

这里是我的代码:

function initializeMap() { 
    map = new google.maps.Map(document.getElementById('map_canvas'), { 
     zoom: 19, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 
    directionsDisplay.setMap(map); 
    directionsDisplay.setPanel(document.getElementById('test')); 
} 
var pinColor = "6495ED"; 
var pinImage = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|" + pinColor, 
    new google.maps.Size(21, 34), 
    new google.maps.Point(0, 0), 
    new google.maps.Point(10, 34)); 
var pinShadow = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_shadow", 
    new google.maps.Size(40, 37), 
    new google.maps.Point(0, 0), 
    new google.maps.Point(12, 35)); 

function locError(error) { 
    // the current position could not be located 
    lat = 53.5409298; 
    lng = -2.11136590000001; 
    initializeMap(); 
    setCurrentPosition(position); 
} 

function setCurrentPosition(position) { 
    if (position.coords.latitude) { 
     lat = position.coords.latitude; 
     lng = position.coords.longitude; 
    } else { 
     lat = 53.5409298; 
     lng = -2.11136590000001; 
    } 
    var accuracy = position.coords.accuracy; 
    currentPositionMarker = new google.maps.Marker({ 
     map: map, 
     position: new google.maps.LatLng(
      lat, 
      lng 
     ), 
     title: "Current Position", 
     icon: pinImage, 
     shadow: pinShadow, 
     animation: google.maps.Animation.DROP 
    }); 
    map.panTo(new google.maps.LatLng(
     lat, 
     lng 
    )); 
    circle = new google.maps.Circle({ 
     map: map, 
     radius: accuracy, 
           strokeColor: '#E62C56', 
           strokeOpacity: 0.8, 
           strokeWeight: 2, 
           fillColor: '#6495ED', 
           fillOpacity: 0.10 
    }); 

    circle.bindTo('center', currentPositionMarker, 'position') 
    algolia_search(position); 
} 

function displayAndWatch(position) { 
    // set current position 
    setCurrentPosition(position); 
    // watch position 
    watchCurrentPosition(position); 
} 

function watchCurrentPosition(position) { 
    var positionTimer = navigator.geolocation.watchPosition(
     function (position) { 
      setMarkerPosition(
       currentPositionMarker, 
       position, 
      ) 
     }); 
} 

function setMarkerPosition(marker, position) { 
    circle.setRadius(position.coords.accuracy); 
    marker.setPosition(
     new google.maps.LatLng(
      lat, 
      lng) 
    ); 
    algolia_search(position); 
} 

function initLocationProcedure() { 
    initializeMap(); 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(displayAndWatch, locError); 
    } else { 
     displayAndWatch(); 
     locError(); 
    } 
} 

function clearOverlays() { 
    for (var i = 0; i < markers.length; i++) { 
     markers[i].setMap(null); 
    } 
    markers.length = 0; 
} 
$(document).ready(function() { 
    initLocationProcedure(); 
}); 

是什么原因造成并不是在所有的位置时是关闭的加载地图的问题?我如何仍然可以加载地图并将其绑定到经纬度设置错误功能,当地点没有找到时触发

+0

我得到张贴代码JavaScript错误:'未捕获的ReferenceError:directionsDisplay不defined'。请提供一个证明你的问题的[mcve]。 – geocodezip

回答

1

我认为您需要尝试这样做,如果在您的循环中没有位置或其他地方。

function initializeMap() { 
      map = new google.maps.Map(document.getElementById('map'), { 
      zoom: 19, 
      center: new google.maps.LatLng(53.5409298,-2.11136590000001), 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
      }); 

      var lat = 53.5409298; 
      var lng = -2.11136590000001; 
      var title = "Test" +" "+"Set"; 
      var latLng = new google.maps.LatLng(lat,lng); 
      var marker = new google.maps.Marker({ 
       zoom: 12, 
       position: latLng, 
       map: map, 
       title: title 
       }); 

     } 

我观察到的一件事是,你没有给你的地图的中心位置,因此可能会产生错误。

center: new google.maps.LatLng(53.5409298,-2.11136590000001), 

感谢

+0

仍然无法正常工作,我尝试了两种解决方案 –

+0

它只是灰屏,使用当前代码 –

+0

如果位置是offer并且我的警报没有弹出,启动映射()始终不会触发,但是为什么? –

相关问题