Как "нажать на метку AddListener" с помощью GeoXML3
У меня есть карта Google с метками из файла.kmz и событие "AddListener" для отображения настраиваемой информации о метках при нажатии метки: http://bus.w.pw/DefaultIconAddListener.html:
<script src=https://Maps.GoogleAPIs.com/maps/api/js?v=3.exp&sensor=false></script>
<script>
function I() {
M = new google.maps.Map(document.getElementById('D'), {
center: new google.maps.LatLng(43.31,-0.36),
zoom: 14
})
L = new google.maps.KmlLayer({url: 'http://Bus.w.pw/TA.kmz', suppressInfoWindows: true})
L.setMap(M)
google.maps.event.addListener(L, 'click', function(E) {
W = new google.maps.InfoWindow({content: 'Customization' + E.featureData.description, position: new google.maps.LatLng(E.latLng.lat(),E.latLng.lng())})
W.open(M)
})
}
google.maps.event.addDomListener(window, 'load', I)
</script>
<div id=D style='width:90%;height:90%'>
Но я хотел, чтобы метки имели собственный значок вместо значка Google по умолчанию.
Чтобы получить этот результат, я использую GeoXML3: http://bus.w.pw/CustomIconWithGeoXML.html:
<script src=https://Maps.GoogleAPIs.com/maps/api/js?v=3.exp&sensor=false></script>
<script src=GeoXML3.js></script>
<script src=ZipFile.complete.js></script>
<script>
function I() {
M = new google.maps.Map(document.getElementById('D'), {
center: new google.maps.LatLng(43.31,-0.36),
zoom: 14
})
P = new geoXML3.parser({map:M, markerOptions: {icon:'R.png'}, afterParse: S})
P.parse('http://Bus.w.pw/TA.kmz')
}
function S() {
P.showDocument(P.docs[0])
}
google.maps.event.addDomListener(window, 'load', I)
</script>
<div id=D style='width:90%;height:90%'>
Теперь мой вопрос:
Как иметь при этом:
пользовательский значок для меток
и событие "AddListener", чтобы отобразить настроенное InfoWindow, которое зависит от метки, по которой щелкнули
?
1 ответ
Решение
- вернуть маркер из вашей функции createMarker
- используйте действительный HTML
- подавить существующие информационные окна и включить глобальное информационное окно (если вы не хотите иметь возможность открывать несколько информационных окон одновременно, я не делаю).
- Вы можете больше настраивать маркер, центрировать его по географическому положению, по умолчанию API v3 размещает нижний центр изображения в этом месте.
установите видимость ваших меток на "1" в KML:
<visibility>1</visibility>
Код:
<html>
<head>
<title>Custom CreateMarker</title>
<script src=https://maps.googleapis.com/maps/api/js?v=3&sensor=false></script>
<script type="text/javascript" src="http://geoxml3.googlecode.com/svn/branches/kmz/ZipFile.complete.js"></script>
<script type="text/javascript" src="http://geoxml3.googlecode.com/svn/branches/kmz/geoxml3.js"></script>
<script type="text/javascript" src="http://geoxml3.googlecode.com/svn/trunk/ProjectedOverlay.js"></script>
<script type="text/javascript">
var infowindow = new google.maps.InfoWindow();
var M = null;
var P = null;
function I() {
M = new google.maps.Map(document.getElementById('D'), {
center: new google.maps.LatLng(43.31,-0.36),
zoom: 14
});
P = new geoXML3.parser({map:M, markerOptions: {icon:{url:'http://bus.w.pw/R.png',size:new google.maps.Size(9,9),anchor:new google.maps.Point(5,5)}}, afterParse: S, createMarke\
r: CM, suppressInfoWindows: true});
P.parse('SO_20140226_bus_w_pw_TA.kml');
}
function S() {
P.showDocument(P.docs[0]);
}
function CM(placemark) {
var marker = P.createMarker(placemark);
google.maps.event.addListener(marker, 'click', function(E) {
infowindow.setContent('Description : ' + placemark.description+"<br>"+'Latitude & longitude : ' + E.latLng );
infowindow.setPosition(marker.getPosition());
infowindow.open(M /* ,marker */);
})
return marker;
}
google.maps.event.addDomListener(window, 'load', I)
</script>
</head>
<body>
<div id="D" style="width:600px;height:500px">
</body>
</html>