2011-08-14 5 views
0

먼저 도움을 주셔서 감사합니다. 노력해 주셔서 감사합니다.Google지도 JavaScript 문제

나는 구글지도 API 문제, 자바 스크립트 버전 나는 다음과 같은 코드

$('.adr').ready(function(){  

    initialize(); 

}) 

function initialize() { 

    var myLatlng = codeAddress(); 

    var myOptions = { 
     zoom: 14, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.SATELLITE 
    }; 

    var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions); 

    } 

function codeAddress() 
{ 
    var geocoder = new google.maps.Geocoder(); 

    var address; 
    var street = cropAdr($(".street-address").text()); 
    var city = cropAdr($(".locality").text()); 
    var state = cropAdr($(".region").text()); 
    var zip = cropAdr($(".zip").text()); 

    address = street + ", " + city + ", " + state + ", " + zip;  

    geocoder.geocode({'address': address}, function(results, status) 
    { 

     if (status == google.maps.GeocoderStatus.OK) 
     { 
     var latlng = results[0].geometry.location; 
     return latlng; 
     } 
     else 
     { 
     alert("Geocode was not successful for the following reason: " + status);   
     return null; 
     } 

    }); 
} 



function cropAdr(args) 
{ 
    var index = args.indexOf(":"); 
    var value = args.substr(index+1); 

    return value; 
} 

을 쓴 그러나이 작동하지 않습니다 3.

있습니다.

"results [0] .geometry.location"반환 값과 그 완벽한 값을 확인 했으므로 주소 조작이 작동합니다. "results [0] .geometry.location"은 google.maps.Latlng 객체입니다. 그러나 문자열로 좌표를 제거한 다음 새 google.maps.Latlng 객체를 만들고 주사위를 만들지 않았습니다.

아직 수동으로 해당 문자열을 복사하여 "var myLatlng = new google.maps.Latlng (복사 한 문자열 붙여 넣기!)"에 값을 붙여 넣으면 모든 것이 작동합니다!

나는이 스크립트의 다른 부분을 볼 수 없습니다 (Jquery와 Javascritpt의 혼란에 사과드립니다).

답변

1

Google지도 API 지오 코더는 주소가 지오 코딩되었지만 비동기 적으로 호출 될 수있는 함수를 허용합니다. 즉, 나머지 코드가 이미 실행 된 후입니다. codeAddress에서

당신은 지오 코더 호출이 줄을 함수에 전달합니다

geocoder.geocode({'address': address}, function(results, status) 

당신은 다음 시도하고 지오 코더에 전달 된 함수에서 위도 경도를 반환하지만은 반환과 동일하지 않습니다 codeAddress의 값입니다. 이 함수 내부에서 리턴 한 값은 지오 코더 오브젝트로 전달되며, 지오 코더 오브젝트는 무시할 것입니다.

latLng로 지오 코드를 전달하는 함수가 필요합니다.

return latLng; 

로 :

map.setCenter(latLng); 

을 그리고 결과가 사용할 수있게되면지도는 지오 코딩 된 주소에 자신을 중심으로해야한다 예를 들어, 교체하십시오.

(이렇게하려면지도 객체를 전역으로 설정하거나 codeAddress에서 사용할 수있게해야합니다. 코드 상단에 "var map;"을 추가하고 그 앞에 "var"를 추가하는 것이 좋습니다. 지도 초기화 사용)

+0

나는 당신이 제안한 것을 시도했다. Var지도 넣기; 화면 상단의 initialize() 내의 "var map"에서 제거, "return latlng"을 "map.setCenter (latlng);"로 변경합니다. 원본 "Center : myLatlng"을 미리 정의 된 Latlng 개체 (0,0)와 null로 변경했습니다. codeAddress()라고도합니다. 지도가 초기화 된 후에도 시도해 보았습니다. 하지만 아무것도 작동하지 않습니다 ... –

+0

나는 그것을 해결했습니다! 당신은 정확했습니다. 그러나지도 중심 원점을 시작할 때, Latlng을 놓았습니다.이 LatLng에 JS 오류가 발생했습니다 ... 도움을 주셔서 감사합니다. –