Google map ссылка на метку
Кто нибудь знает, возможно ли указать ссылку на метку на карте гугл.
Допустим на карте 3 метки над картой находятся 3 ссылки на метки при клике на которые карта центрируется на данной метке... Не могу найти.... Пример ![]() Вот пример карты http://learn.javascript.ru/play/yve8ub |
вешай обработчики на каждую ссылку и вызывай апи методы карты - центрирование на метке, пример
var centerpoint = new google.maps.LatLng(coords.lat, coords.lng); map.setCenter(centerpoint); |
Google map центрирование
psfdek,
<!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> <meta charset="utf-8"> <title>Region code biasing (US)</title> <style> html, body, #map-canvas { height: 100%; margin: 0px; padding: 0px } div ~ a{ display: inline-block; cursor: pointer; margin: 0 15px; background: #FFCC99 ; padding: 4px 8px; } div ~ a:hover{ background: #CCCCCC } </style> <script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script> <script> var geocoder; var map; var query = new Array( 'Челябинск, ул. Кирова, д. 149', 'Челябинск, ул. Кирова, д. 86', 'Челябинск, ул. Кирова, д. 112'); function initialize() { geocoder = new google.maps.Geocoder(); var mapOptions = { zoom: 15 } map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); codeAddress(); } function codeAddress() { var count=0; for (var i = 0; i < query.length; i++) { var address = query[count]; geocoder.geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { var a = document.createElement('a'); a.appendChild(document.createTextNode(results[0].address_components[1].short_name+', '+results[0].address_components[0].short_name)); a.onclick = function() { map.setZoom(17); map.setCenter(results[0].geometry.location); } document.body.appendChild(a); map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } else { alert('Geocode was not successful for the following reason: ' + status); } }); count++; } } google.maps.event.addDomListener(window, 'load', initialize); </script> </head> <body> <div id="map-canvas" style="width: 600px; height: 400px"></div> </body> </html> |
Благодарю Вас: nice_try и рони.
Рони в Вашем примере теги а создаются в цикле, а как обратиться извне цикла. Т.е ссылка уже была создана (не в цикле). |
psfdek,
вместо создания ссылки найдите ссылку с нужным текстом или иным идентификатором - строки 45-46, строка 52 соотвественно ненужна |
|
psfdek,
потому что http://javascript.ru/basic/closure#p...-ispolzovaniya |
:blink: не понял. Там то они все получают одно и тоже, а у меня только последний получает.
|
psfdek,
<!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> <meta charset="utf-8"> <title>Region code biasing (US)</title> <style> html, body, #map-canvas { height: 100%; margin: 0px; padding: 0px } div ~ a{ display: inline-block; cursor: pointer; margin: 0 15px; background: #FFCC99 ; padding: 4px 8px; } div ~ a:hover{ background: #CCCCCC } </style> <script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script> <script> var geocoder; var map; var query = new Array('Челябинск, ул. Кирова, д. 149', 'Челябинск, ул. Кирова, д. 86', 'Челябинск, ул. Кирова, д. 112'); var idArr = new Array('mp0','mp1','mp2'); function initialize() { geocoder = new google.maps.Geocoder(); var mapOptions = { zoom: 15 } map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); codeAddress(); } function codeAddress() { for (var i = 0; i < query.length; i++) { var address = query[i]; geocoder.geocode({ 'address': address }, function(k) { return function(results, status) { if (status == google.maps.GeocoderStatus.OK) { var a = document.getElementById(idArr[k]); a.onclick = function() { map.setZoom(17); map.setCenter(results[0].geometry.location); } map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } else { alert('Geocode was not successful for the following reason: ' + status); } } }(i) ); } } google.maps.event.addDomListener(window, 'load', initialize); </script> </head> <body> <div id="map-canvas" style="width: 600px; height: 400px"></div> <a href="#" id="mp0">ссылка 1</a> <a href="#" id="mp1">ссылка 2</a> <a href="#" id="mp2">ссылка 3</a> </body> </html> |
Цитата:
|
Спасибо большое за рабочий пример, но я что то пока не пойму.
Буду разбирать рабочий и не рабочий примеры и читать по той ссылке. http://javascript.ru/basic/closure#p...-ispolzovaniya |
Google Map API + external links
Добрый вечер, рони ! Курил Ваш код как мог! Вроде и понятно, но у меня подобная проблема..
Есть карта, поставил живой поиск, в нем генерятся ссылки с id=1 , id=2 и т.п по массиву из xml Хотелось бы попросить помощи у вас, как можно применить Ваш код на моей практике? function load() { var map = new google.maps.Map(document.getElementById("map"), { center: {lat: 47.6145, lng: -122.3418}, zoom: 10, mapTypeId: 'roadmap', disableDefaultUI: 'true' }); //Вот тут начинается самое интересное, тут парсим значения из xml downloadUrl("system/phpsqlajax_genxml.php", function(data) { var xml = data.responseXML; var markerss = []; //полкчаем значения var markers = xml.documentElement.getElementsByTagName("marker"); //в цикле для каждой итерации по количеству записей получаем //соответствующие значения for (var i = 0; i < markers.length; i++) { var name = markers[i].getAttribute("name"); var address = markers[i].getAttribute("address"); var type_mark= markers[i].getAttribute("type_mark"); var point = new google.maps.LatLng( parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))); //получаем значение, почему то с new array тут не получилось var idArr = markers[i].getAttribute("id"); //собственно я не знаю куда прицепить эту конструкцию var a = document.getElementById(idArr[i]); a.onclick = function() { map.setZoom(17); map.setCenter(lat,lng); } //Дальше уже не интересно, потому что дальше уже работа с картой и окнами в балунах |
olezha,
не особо понимаю ваш код, строка 25 получение массива??? или строка 28 не нуждается в индексе? var a = document.getElementById(idArr[i]); |
рони,
я не шибко силен в js по этому могу скинуть весь код карты и Вы поможете мне адаптировать Вашу наработку. Теоретически мы в цикле получаем айдишник в строке 25 а потом уже вешаем событие.. хотя если не работает, значит это в корне не так, посему прилагаю полный js код Буду безмерно благодарен Вам, если вы мне поможете!) //<![CDATA[ var customIcons = { restaurant: {icon: '../assets/img/map/pointer_blue.png'}, bar: {icon: '../assets/img/map/pointer_favourited.png'}}; var options = {imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'}; var icon_balun='../assets/img/map/pointer_green.png'; function load() { var map = new google.maps.Map(document.getElementById("map"), { center: {lat: 47.6145, lng: -122.3418}, zoom: 10, mapTypeId: 'roadmap', disableDefaultUI: 'true' }); var infoWindow = new google.maps.InfoWindow; // --------------------- // ---------------------Try HTML5 geolocation. // --------------------- navigator.geolocation.getCurrentPosition(function(position) { var pos = { lat: position.coords.latitude, lng: position.coords.longitude }; map.setCenter(pos); }); // --------------------- //--------------------end of geolocation // --------------------- // Change this depending on the name of your PHP file downloadUrl("system/phpsqlajax_genxml.php", function(data) { var xml = data.responseXML; var markerss = []; var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var name = markers[i].getAttribute("name"); var address = markers[i].getAttribute("address"); var type_mark= markers[i].getAttribute("type_mark"); var point = new google.maps.LatLng( parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))); //custom infowindow creating here var html = "<img scr=" + icon_balun +"><b>" + name + "</b> <br/>" + address + "<form><button>follow</button></form>"; var icon = customIcons[type_mark] || {}; var marker = new google.maps.Marker({ map: map, position: point, icon: icon.icon}); markerss.push(marker); bindInfoWindow(marker, map, infoWindow, html); } var markerCluster = new MarkerClusterer(map, markerss,options); }); } function bindInfoWindow(marker, map, infoWindow, html) { google.maps.event.addListener(marker, 'click', function() { infoWindow.setContent(html); infoWindow.open(map, marker); }); } function downloadUrl(url, callback) { var request = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest; request.onreadystatechange = function() { if (request.readyState == 4) { request.onreadystatechange = doNothing; callback(request, request.status); } }; request.open('GET', url, true); request.send(null); } function doNothing() {} //]]> |
olezha,
не могу помочь ... нет мыслей |
Часовой пояс GMT +3, время: 13:17. |