2016-04-07 17 views
-1

Bir konum dizisine dayalı olarak bir google haritasında işaretçileri görüntülemek için aşağıdaki koda sahibim, ancak posta kodları ve Lat/long'ların bir karışımım var, coğrafi kodlayıcıyı posta kodlarını lat/longs'a dönüştürün, ancak bir işaretçi kullanmaya çalıştığımda bunları kullanamazsınız. Herhangi bir yardım içinGoogle haritaları - ister lat ister uzun isterse posta kodu

teşekkürler!

var geocoder; 
var map; 
var pos; 
var geoLat; 
var geoLong; 
var markers = []; 
var bounds = new google.maps.LatLngBounds(); 
var locations = [ 
    [null, 'London Eye, London', 51.503454,-0.119562, 4] 
    ,[null, 'Palace of Westminster, London', 51.499633,-0.124755] 
    ,[null, 'The London Dungeon', 'SE1 7PB', , 2] //Value with Postcode 
]; 

function isNumber(o) { return ! isNaN (o-0) && o !== null && o !== "" && o !== false; } 

function init() { 
    geocoder = new google.maps.Geocoder(); 
    var num_markers = locations.length; 

    map = new google.maps.Map(document.getElementById('map_canvas'), { 
    zoom: 10, 
    center: new google.maps.LatLng(locations[0][2], locations[0][3]), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 

    for (var i = 0; i < num_markers; i++) { 
    if (isNumber (locations[i][2]) && isNumber (locations[i][3])){ 
     geoLat = locations[i][2] 
     geoLng = locations[i][3] 
     alert(typeof(geoLat) +' '+typeof(geoLng)) //generates a correct number number response 
    }else{ 
     geocoder.geocode({ 'address': locations[i][2]}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      geoLat = results[0].geometry.location.lat() 
      geoLng = results[0].geometry.location.lng() 
      alert(typeof(geoLat) +' '+typeof(geoLng)) //generates a correct number number response 
     } 
     }); 
    } 

    pos = new google.maps.LatLng(geoLat, geoLng); // Doesn't get value if a geocodes postcode added in 
    bounds.extend(pos); 
    map.fitBounds(bounds); 

    markers[i] = new google.maps.Marker({ 
     position: pos, 
     map: map, 
     id: i, 
     title: locations[i][1] 
    }); 
    } 
} 

    google.maps.event.addDomListener(window, 'load', init); 
+0

Sen gerekiyor geocoder geri çağrısı tetiklendiğinde konumu ayarlayın - bu hemen olmaz. – Piskvor

+0

Teşekkürler @Piskvor - bunu nasıl yaparım? Ne zaman ateş ediyor ... – Spufferoo

cevap

3

Coğrafi Konum isteği API isteği isn't henüz bitmiş ederken komut üzerinden çalışan anlamına gelir, bir zaman uyumsuz çağrı vardır. Bu nedenle iki seçeneğiniz var.

geri arama işlevi

if (status == google.maps.GeocoderStatus.OK) { } 

doğrudan işaretleyici tanımla Ya fiil yazın. setMarker() işlevi gibi ve geri aramada arayın. Genelde

function setMarker(lat, lng){} 

aynı zamanda gibi, coğrafi kodlama isteği bir işlev yapmak için iyi bir uygulamadır:

doGeocode: function (address, postal_code, callback) { 
    console.log("TEST: " + address.toString()); 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 
     'address': address, 
     'componentRestrictions': { 
      'postalCode': postal_code, 
      'country': 'de' 
     } 
    }, function (results, status) { 
     if (status === google.maps.GeocoderStatus.OK) { 
      console.log(results); 
      callback(results); 
     } else { 
      //Error handling 
      alert('Geocode was not successful for the following reason: ' + status); 
     } 
    }); 

bunu aramak istiyorsanız şimdi sadece

doGeocode (adress, postal_code, function (response){ 

//do your stuff 
)}; 
+0

Teşekkürler @IntercoolerTurbo - harika çalıştı. Sadece genel bir soru olsa da, bir uyarıda gösterilecek bir değer varsa, o zaman neden bu noktadan sonra kod için kullanılabilir olmasın anlamıyorum? – Spufferoo

İlgili konular