2011-03-20 1 views
4

저는 Google지도를 처음 사용합니다. 지도에서 마커를 해당 좌표로 이동하기 위해 좌표 입력을 사용자 입력으로 돌리려고합니다. 예를 들어 사용자가 50.75, 74.1을 입력하면 마커는 해당 좌표로 이동합니다. 불행히도, 나는 그것을 작동시키지 못했습니다. 여기 내 함수는 다음과 같습니다Google Maps API v3 : 사용자 입력 좌표를 latlng로 바꾸시겠습니까?

<input type="text" id= "Markerloc" value="Paste your coordinates" /> 
<input type="button" onclick="moveMarker()" value="Update Marker"> 

편집 :

function moveMarker() { 
    var Markerloc = document.getElementById("Markerloc").value; 
    var newLatlng = new google.maps.LatLng(Markerloc); 
    marker.setPosition(newLatLng) 
} 

여기 내 HTML 코드의 나는 그것을 고칠 거라고 생각하지만, 어떻게 든, 그것은 여전히 ​​작동하지 않습니다. 당신은 이렇게 초기화 기능의 범위 내에서 변수 마커를 가지고 있기 때문에

가 작동하지 않는 이유 :

여기
<script type="text/javascript"> 
var map; 
var zoomLevel; 

function initialize(){ 
var myLatlng = new google.maps.LatLng(40.65, -74); 
var myOptions = { 
zoom: 2, 
center: myLatlng, 
mapTypeId: google.maps.MapTypeId.ROADMAP, 
} 


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

var marker = new google.maps.Marker({ 
position: myLatlng, 
map: map, 
draggable: true 
}); 

// Update current position info. 
updateMarkerPosition(myLatlng); 

// Add dragging event listeners. 
google.maps.event.addListener(marker, 'dragstart', function() { 
updateMarkerAddress('Dragging...'); 
}); 

google.maps.event.addListener (map, 'zoom_changed', function() { 
updateZoomLevel(map.getZoom()); 
}); 

google.maps.event.addListener(marker, 'drag', function() { 
updateMarkerStatus('Dragging...'); 
updateMarkerPosition(marker.getPosition()); 
}); 

google.maps.event.addListener(marker, 'dragend', function() { 
updateMarkerStatus('Drag ended'); 
geocodePosition(marker.getPosition()); 
}); 
}; 

var geocoder = new google.maps.Geocoder(); 

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

function updateZoomLevel(zoomLevel){ 
document.getElementById('zoomLevel').innerHTML = zoomLevel; 

} 

function updateMarkerStatus(str) { 
document.getElementById('markerStatus').innerHTML = str; 
} 

function updateMarkerPosition(myLatlng) { 
document.getElementById('info').innerHTML = [ 
myLatlng.lat(), 
myLatlng.lng() 
].join(', '); 
} 

function updateMarkerAddress(str) { 
    document.getElementById('address').innerHTML = str; 
} 

function moveMarker() { 
    var lat = parseFloat(document.getElementById('markerLat').value); 
    var lng = parseFloat(document.getElementById('markerLng').value); 
    var newLatLng = new google.maps.LatLng(lat, lng); 
    marker.setPosition(newLatLng) 
} 


google.maps.event.addDomListener(window, 'load', initialize); 

</script> 
</head> 
<body> 

    <div id="map_canvas" style="width: 29%; height: 50%; float: left; position: relative; background-color: rgb(229, 227, 223); overflow: hidden;"></div> 
     <b>Zoom level: </b><div id="zoomLevel"> Scroll mousewheel</div> 
    </div> 
    <input type='text' id='markerLat' value='Target Latitude' /> 
    <input type='text' id='markerLng' value='Target Longitude' /> 
    <input type="button" onclick="moveMarker()" value="Move Marker"> 
</body> 
</html> 

답변

4

JSFiddle Demo:

UPDATE입니다 : 여기

내 코드입니다 , moveMarker는 var marker에 액세스 할 수 없습니다. 그래서, 전방으로 나가서 마커를 모든 기능의 외부에 선언하여 마커를 전역 범위로 이동 시키면 moveMarker가 마커의 위치를 ​​액세스하고 이동할 수 있습니다. 이렇게하면 초기화 기능 내부에 마커에 대한 var 선언을 삭제해야합니다.

marker = new google.maps.Marker({ 
    position: myLatlng, 
    map: map, 
    draggable: true 
}); 

수정 된 코드는 마커의 위치 만 이동하지만 마커를 기반으로지도의 중심은 지정하지 않습니다. 지도를 중앙에 배치하려면 map.setCenter();으로 전화해야합니다.

숫자를 별도로 구문 분석하고 parseFloat()을 사용하여 번호를 입력하도록 설정해야합니다. google.maps.LatLng()은 Lat 및 Lng에 대해 두 개의 Number 매개 변수를 사용합니다. 이렇게하는 더 좋은 방법은 두 개의 텍스트 필드를 만드는 것입니다. 위도에 대한

<input type='text' id='markerLat' value='' /> 
<input type='text' id='markerLng' value='' /> 

한 다른 LNG에 대한, 그리고

var lat = parseFloat(document.getElementById('markerLat').value); 

와 값을 가져 오지
var lng = parseFloat(document.getElementById('markerLng').value); 
만들고

var newLatLng = new google.maps.LatLng(lat, lng); 
marker.setPosition(newLatLng); 
를 수행하여 마커를 설정할 수 있습니다