클릭 한 Google지도 마커를 식별하는 방법이 있습니까?
-
21-08-2019 - |
문제
Follwoing 코드는 JSON 객체를 통해 루프를 통해 Google지도에 마커를 배치합니다. 잘 작동합니다.
function displayMarkers(data){
for(var i = 0; i < data.Lat.length; i++){
var point = new GLatLng(data.Lat[i],data.Lng[i]);
marker = new GMarker(point);
map.addOverlay(marker);
// here's the problem
GEvent.addListener(marker, "click", function(){
alert(data.Name[i]);
});
}
}
문제는 모든 마커가 항상 "i"의 마지막 값으로 응답한다는 것입니다. 데이터 객체에서 올바른 정보를 얻기 위해 클릭 한 마커를 식별하는 방법을 알아 내려고 노력하고 있습니다.
나는 마커 위치를 기반으로 루프 할 수있는 마커 배열을 만드는 것에 대해 생각하고 있지만, 그것은 나에게는 실제로 비효율적입니다.
항상 그렇듯이 모든 도움이 감사합니다.
해결책
그만큼 지도의 이벤트를 클릭하십시오 세 가지 다른 요소를 통과합니다.
GEvent.addListener(map, "click", function(overlay, latlng, overlaylatlng) {
// overlay = GOverlay or null
// latlng = GLatLng
// overlaylatlng = GLatLng or null
});
사용자가 오버레이를 클릭하지 않으면 '오버레이'및 '오버레이 라일트'가 널이됩니다.
업데이트: Goverlay를 꺼내려면 리스너를지도에 추가해야합니다 (마커가 아님). 그만큼 Gmarker의 이벤트를 클릭하십시오 glatlng 만 반환합니다.
다른 팁
지도는 ONTAP 이벤트를 지원하며 선택한 마커의 인덱스를 전달합니다. 이것 예시:
위의 솔루션은 마커의 좌표 만 반환하여 내 문제를 해결하지 못하는 것 같습니다. 아마도 내가 뭔가 잘못하고있을 것입니다.
그러나 내가 해결 한 방식은 단순히 이와 같은 마커에 속성을 추가하는 것이 었습니다.
function createMarker(latlng,name) {
var marker = new GMarker(latlng);
// HERE WE GO
marker.value = name;
GEvent.addListener(marker,"click", function() {
addToList(this.value);
});
return marker;
}
업데이트 : Aboves는 한 가지 방법으로 해결하지만, 더 쉬운 방법은 주석에 언급 된대로 이벤트를지도에 첨부하는 것입니다.
GEvent.addListener(map, "click", function(marker, point){
alert(marker);
});
파이처럼 간단합니다.
GEvent.addListener(marker, "click", function(o){
alert(o);
});
제휴하지 않습니다 StackOverflow