#javascript #google-maps #google-maps-api-3
#javascript #google-карты #google-maps-api-3
Вопрос:
У меня есть карта Google с сотнями маркеров. Я бы хотел, чтобы карта была сосредоточена на местоположении пользователя — желательно с помощью нажатия кнопки. В настоящее время он центрируется при загрузке страницы, но с одной проблемой — он удаляет все маркеры, когда он центрируется по местоположению. Я предполагаю, что это из-за того, как я вызываю скрипт. Идентификатор контейнера карты — ‘map4’.
Как я могу заставить этот скрипт работать без очистки существующих маркеров? Любая помощь будет принята с благодарностью.
<script>
var map; // Google map object
// Initialize and display a google map
function Init()
{
// HTML5/W3C Geolocation
if ( navigator.geolocation )
navigator.geolocation.getCurrentPosition( UserLocation );
// Default to Sherman Oaks
else
ShowLocation( 38.8951, -77.0367, "Sherman Oaks, CA" );
}
// Callback function for asynchronous call to HTML5 geolocation
function UserLocation( position )
{
ShowLocation( position.coords.latitude, position.coords.longitude, "This is your Location" );
}
// Display a map centered at the specified coordinate with a marker and InfoWindow.
function ShowLocation( lat, lng, title )
{
// Create a Google coordinate object for where to center the map
var latlng = new google.maps.LatLng( lat, lng );
// Map options for how to display the Google map
var mapOptions = { zoom: 12, center: latlng };
// Show the Google map in the div with the attribute id 'map-canvas'.
map = new google.maps.Map(document.getElementById('map4'), mapOptions);
// Place a Google Marker at the same location as the map center
// When you hover over the marker, it will display the title
var marker = new google.maps.Marker( {
position: latlng,
map: map,
title: title
});
// Create an InfoWindow for the marker
var contentString = "<b>" title "</b>"; // HTML text to display in the InfoWindow
var infowindow = new google.maps.InfoWindow( { content: contentString } );
// Set event to display the InfoWindow anchored to the marker when the marker is clicked.
google.maps.event.addListener( marker, 'click', function() { infowindow.open( map, marker ); });
}
// Call the method 'Init()' to display the google map when the web page is displayed ( load event )
google.maps.event.addDomListener( window, 'load', Init );
</script>
Ответ №1:
Если я вас правильно понимаю, кажется, вы уже создали карту, заполненную маркерами, А ЗАТЕМ хотите центрировать ТУ ЖЕ САМУЮ карту. Если это так, ваша ShowLocation()
функция должна быть изменена. Причина в том, что эта строка
map = new google.maps.Map(document.getElementById('map4'), mapOptions);
создает новый новый экземпляр map (заменяя любую существующую карту в этом контейнере, если предоставленный контейнер map тот же).
Итак, ваша проблема в том, что вы создаете и центрируете новую карту, а не просто центрируете старую.
Просто измените функцию центрирования для работы с существующей картой:
function ShowLocation( lat, lng, title , map)
{
// Create a Google coordinate object for where to center the map
var latlng = new google.maps.LatLng( lat, lng);
//Working with existing map instead of creating a new one
map.setCenter(latlng);
map.setZoom(12);
// Place a Google Marker at the same location as the map center
// When you hover over the marker, it will display the title
var marker = new google.maps.Marker( {
position: latlng,
map: map,
title: title
});
// Create an InfoWindow for the marker
var contentString = "<b>" title "</b>"; // HTML text to display in the InfoWindow
var infowindow = new google.maps.InfoWindow( { content: contentString } );
// Set event to display the InfoWindow anchored to the marker when the marker is clicked.
google.maps.event.addListener( marker, 'click', function() { infowindow.open( map, marker ); });
}
И при вызове ShowLocation
функции 4-м параметром будет google.maps.Map
объект, который вы создали при добавлении маркеров. Вы не можете ссылаться на карту, только зная, что она содержит элементы id
, вам нужна ссылка на нее.
Комментарии:
1. Ваши предположения верны! У меня есть существующая карта, и я хочу автоматически центрировать ее по местоположению пользователя — или предпочтительнее одним нажатием кнопки.
2. Так что просто найдите где-нибудь в своем коде, где вы создаете исходную карту, к которой затем добавляете маркеры, что-то вроде:
map = new google.maps.Map(document.getElementById('map4')..
(но не в вашейShowLocation
функции). И затем вы должны использовать тот жеmap
самый объект с моей предоставленнойShowLocation
функцией3. Я попробовал код, но теперь он не центрируется на карте и не показывает местоположение пользователя. Это не создает новую карту — так что это плюс. Возможно, я неправильно называю карту. Идентификатор должен быть «map4», но я не уверен, куда вводить эту информацию.
4. Я настраиваю ссылку на обновленный код. Дайте мне знать, если вы хотите увидеть полный код с маркерами. jsfiddle.net/pioneerdesign7/34qtobd9 /…
5. Мне нужно увидеть часть кода, которая создает исходную карту и добавляет маркеры. Карта
id
нам не поможет, вам нужно добраться до переменной, которая указывает на исходную карту. Попробуйте найти все строки кода, содержащиеnew google.maps.Map