2017-09-05 154 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並且我的警報沒有彈出,啓動映射()始終不會觸發,但是爲什麼? –

相關問題