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, время: 19:29. |