2012-10-24 62 views
0

我有一個JavaScript郵政編碼搜索,根據輸入的內容搜索英國的3個衣櫥商店。目前,它發現3家商店罰款。店鋪定位器 - 從郵政編碼到所選商店的路線

首先,我想在輸入中輸入的郵編上放下一個標記。

其次,當三個結果出現時,它們被標記在地圖上。我想要一個名爲的鏈接,點擊後會顯示從開始到所選商店的路線。

我已經嘗試了下面的代碼,但它不起作用...但它確實從輸入和方向鏈接獲取郵編數據並在控制檯中顯示它們。我是否需要將它們轉換成長和經度才能起作用?

function calcRoute() { 
    var start = document.getElementById('address').value; 
    var end = document.getElementById('get-directions').name; 
    //console.log(start, end) 
    var request = { 
     origin:start, 
     destination:end, 
     travelMode: google.maps.DirectionsTravelMode.DRIVING 
    }; 
    directionsService.route(request, function(response, status) { 
     if (status == google.maps.DirectionsStatus.OK) { 
     directionsDisplay.setDirections(response); 
     } 
    }); 
    } 

我有我的開始標記的代碼,但是這似乎並沒有工作,要麼

function initialize() { 
    var start_marker = new google.maps.LatLng(document.getElementById('address').value); 
    directionsDisplay = new google.maps.DirectionsRenderer(); 
    var mapOptions = { 
     zoom:7, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     center: start_marker 
    } 
    marker = new google.maps.Marker({ 
      map:map, 
      draggable:false, 
      animation: google.maps.Animation.DROP, 
      position: start_marker, 
     }); 
    map = new google.maps.Map(document.getElementById('map'), mapOptions); 
    directionsDisplay.setMap(map); 
    } 

這一部分會從郵政編碼的經度/緯度數據,

this.geocode = function(address, callbackFunction) { 
    geocoder.geocode({ 'address': address}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     var result = {}; 
     result.latitude = results[0].geometry.location.lat(); 
     result.longitude = results[0].geometry.location.lng(); 
     callbackFunction(result); 
     //console.log(result); 
     //console.log("Geocoding " + geometry.location + " OK"); 
     addMarker(map, results[0].geometry.location); 
    } else { 
     alert("Geocode was not successful for the following reason: " + status); 
     callbackFunction(null); 
    } 
    }); 

addMarker的功能在這裏:

function addMarker(map, location) { 

console.log("Setting marker for (location: " + location + ")"); 
marker = new google.maps.Marker({ 
map : map, 
animation: google.maps.Animation.DROP, 
position : location 
}); 

}

任何幫助將不勝感激!

回答

0

google.maps.LatLng requires two floating point numbers as arguments的構造函數,而不是一個字符串:

var start_marker = new google.maps.LatLng(document.getElementById('address').value); 

如果你只有一個地址,您需要使用Geocoding service to retrieve coordinates for that address,如果你想顯示的地圖上的標記。

+0

非常感謝你。但由於某種原因,標記不會添加。我有地理位置數據,但它根本沒有添加到地圖中。這段代碼是否正確? 標記=新google.maps.Marker({ \t圖:圖, \t動畫:google.maps.Animation.DROP, \t位置:位置 }); –

+0

該代碼是否正確取決於「位置」是什麼。有兩件事:1.在評論中張貼的代碼很難閱讀,你應該編輯你的問題以包含它並以合理的方式進行格式化。 2.地理編碼器是異步的,如果「位置」來自地理編碼器,您是否在回調函數中使用它? – geocodezip

+0

是的位置來自Geocoder,是的,我在回調函數中使用它。當我console.log(位置)它顯示54.9861334,-1.53​​79448999999568這是我輸入到輸入的郵政編碼正確的長/緯度。是的,我現在會這樣做 –