-2

여기에 전체 코드를 넣습니다. 위치 주소를 확인하려고합니다. 내 스크립트는 여전히 지오 코딩 된 주소가있는 마커 하나를 만들어야합니다 (콘솔 변수 kktina에서).Google 지오 코드가 늦었습니다 (여전히 한 걸음 뒤로)

하지만 불행히도 모든 것이 괜찮은 것은 아닙니다. 스크립트는 여전히 이전 위치를 확인하기 때문에 (또는 이전 좌표 인 dunno를 사용하기 때문에). 어쩌면 코드에 오류가있을 수 있지만 더 이상이 작업을 수행 할 수 없습니다.

도움을 요청하는 경우 감사합니다.

<!DOCTYPE html> 
<html> 
<head> 
    <title>Google Maps JavaScript API v3 Example: Map Simple</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> 
    <meta charset="utf-8"> 
    <style> 
    html, body, #map_canvas { 
    margin: 0; 
    padding: 0; 
    height: 100%; 
    } 
    </style> 
    <link rel="stylesheet" type="text/css" href="style.css"> 
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places,geometry"></script> 
    <script src="http://code.jquery.com/jquery-1.7.min.js" type="text/javascript"></script> 
    <script> 
    var map,marker; 
    var geocoder = new google.maps.Geocoder(); 
    var markers = []; 
    var img,icon,type; 
    var prenos,pos,address = "5",point; 


     function clearMarkersFromArray() { 
    if (markers.length>0){ 
     markers[0].setMap(null); 
     markers.shift(markers[0]); 
    } 
    } 

    function geocodePosition(pos) { 
    geocoder.geocode({ 
     latLng: pos 
    }, function(responses) { 
     if (responses && responses.length > 0) { 
     address = responses[0].formatted_address; 
     } else { 
     address = 'Cannot determine address at this location.'; 
     } 
    }); 
    return address; 
    } 

    function initialize() { 

    var mapOptions = { 
     zoom: 7, 
     center: new google.maps.LatLng(49,19), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions), 

    google.maps.event.addListener(map, 'click', function(response) { 
     clearMarkersFromArray(); 
     point = new google.maps.LatLng(response.latLng.$a,response.latLng.ab); 
     var kktina = geocodePosition(point); 
     console.log(kktina); 
     var marker = new google.maps.Marker({ 
     position: point, 
     draggable: true 
     }); 
     markers.push(marker) 
     marker.setMap(map); 
}); 
} 
google.maps.event.addDomListener(window, 'load', initialize); 
</script> 
</head> 
<body> 
    <div id="map_canvas" style="height:400px;width:700px;"></div> 
</body> 
</html> 

답변

1

당신은이 작업을 수행 할 수 없습니다가 반환 될 때

function geocodePosition(pos) { 
    geocoder.geocode({ 
     latLng: pos 
    }, function(responses) { 
     if (responses && responses.length > 0) { 
     address = responses[0].formatted_address; 
     } else { 
     address = 'Cannot determine address at this location.'; 
     } 
    }); 
    return address; 
    } 

지오 코더가 비동기, 주소의 값은 정의되지 않습니다.

는 이런 일이 (테스트하지) 대신 콜백 함수 내에서 반환 된 데이터를 사용

var kktina = null; 
function geocodePosition(pos) { 
    geocoder.geocode({ 
    latLng: pos 
    }, function(responses) { 
    if (responses && responses.length > 0) { 
     kktina = responses[0].formatted_address; 
    } else { 
     kktina = 'Cannot determine address at this location.'; 
    } 
    console.log(kktina); 
    var marker = new google.maps.Marker({ 
     position: point, 
     draggable: true 
    }); 
    markers.push(marker) 
    marker.setMap(map); 
    }); 
}  
+0

당신은 이것에 옳다. 데이터는 응답 안에 있어야합니다. 하지만 당신이 작성한/안쪽 마커와 작동하지 않습니다 (그리고 나는 또한 작동하지 않는 InfoWindow가 있습니다 ..) :(나는 가져오고 싶습니다 - 함수 밖에서 kktina 저장 – user1666761

+0

그렇지 않다면 내가 말했듯이, 나는 테스트하지 않았다. 그것은 kktina를 전역 변수에 저장한다. 당신이 게시 한 코드에는 InfoWindow가 없다. 그러므로이 문장은 "나는 거기에 모든 코드를 넣었다. ." 부정확하다. – geocodezip

관련 문제