Как я могу настроить кнопки масштабирования google maps api (v3 javascript) на свое собственное изображение.
Пользовательские кнопки Google Maps API V3 Zoom
Ответ 1
Я опаздываю на вечеринку, но вот мои два цента.
У вас есть в основном два варианта:
Вариант 1: Вы сами создаете элементы управления, используя HTML/CSS, которые затем можете поместить на карту в правильное положение, используя абсолютную позицию или аналогичные средства. Несмотря на то, что это работает в производстве, мне это не нравится, потому что ваш HTML/CSS для элемента не загружается одновременно с отображением карты. Также вы отделяете свой код HTML/CSS для элементов управления, поэтому сложнее повторно использовать одну и ту же карту на разных страницах. например "Я забыл добавить элементы управления?"
Вариант 2: Вы создаете настраиваемый элемент управления, который выглядит и воспринимает контроллеры масштабирования, которые вам нравятся. Ниже приведен код об этом на практике.
Короче говоря, вам нужно сначала отключить обычные контроллеры пользовательского интерфейса, вызвав:
var mapOptions = {
zoom: 12,
center: chicago,
/* Disabling default UI widgets */
disableDefaultUI: true // <-- see this line
}
И тогда вы просто создаете контроллер и используете его.
HTML:
...
<div id="map-canvas"></div>
...
CSS
html, body, #map-canvas {
height: 100%;
margin: 0px;
padding: 0px;
}
JavaScript:
var map;
var chicago = new google.maps.LatLng(41.850033, -87.6500523);
/**
* The ZoomControl adds +/- button for the map
*
*/
function ZoomControl(controlDiv, map) {
// Creating divs & styles for custom zoom control
controlDiv.style.padding = '5px';
// Set CSS for the control wrapper
var controlWrapper = document.createElement('div');
controlWrapper.style.backgroundColor = 'white';
controlWrapper.style.borderStyle = 'solid';
controlWrapper.style.borderColor = 'gray';
controlWrapper.style.borderWidth = '1px';
controlWrapper.style.cursor = 'pointer';
controlWrapper.style.textAlign = 'center';
controlWrapper.style.width = '32px';
controlWrapper.style.height = '64px';
controlDiv.appendChild(controlWrapper);
// Set CSS for the zoomIn
var zoomInButton = document.createElement('div');
zoomInButton.style.width = '32px';
zoomInButton.style.height = '32px';
/* Change this to be the .png image you want to use */
zoomInButton.style.backgroundImage = 'url("http://placehold.it/32/00ff00")';
controlWrapper.appendChild(zoomInButton);
// Set CSS for the zoomOut
var zoomOutButton = document.createElement('div');
zoomOutButton.style.width = '32px';
zoomOutButton.style.height = '32px';
/* Change this to be the .png image you want to use */
zoomOutButton.style.backgroundImage = 'url("http://placehold.it/32/0000ff")';
controlWrapper.appendChild(zoomOutButton);
// Setup the click event listener - zoomIn
google.maps.event.addDomListener(zoomInButton, 'click', function() {
map.setZoom(map.getZoom() + 1);
});
// Setup the click event listener - zoomOut
google.maps.event.addDomListener(zoomOutButton, 'click', function() {
map.setZoom(map.getZoom() - 1);
});
}
function initialize() {
var mapDiv = document.getElementById('map-canvas');
var mapOptions = {
zoom: 12,
center: chicago,
/* Disabling default UI widgets */
disableDefaultUI: true
}
map = new google.maps.Map(mapDiv, mapOptions);
// Create the DIV to hold the control and call the ZoomControl() constructor
// passing in this DIV.
var zoomControlDiv = document.createElement('div');
var zoomControl = new ZoomControl(zoomControlDiv, map);
zoomControlDiv.index = 1;
map.controls[google.maps.ControlPosition.TOP_LEFT].push(zoomControlDiv);
}
initialize();
Примечание. Этот код не содержит каких-либо причудливых значков и т.п., просто заполнителей. Поэтому вам может потребоваться настроить его в соответствии с вашими потребностями. Кроме того, не забудьте добавить стандартные теги HTML5 и script включить для Google Maps api v3 javascript. Я добавил только <div id="map-canvas"></div>
, потому что потребность в отдыхе тела довольно очевидна.
Чтобы увидеть его в прямом эфире: Вот пример jsfiddle
Приветствия.
Ответ 2
После поиска часов я нашел решение Просто убедитесь, что вы заменили свой API-идентификатор! Наслаждайтесь!
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map-canvas { height: 60%; width:60%; margin:20px auto; border:1px solid; padding-left:100px; }
</style>
<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js?key=YOUR-MAP_API-ID&sensor=false®ion=AU">
</script>
<script type="text/javascript">
function HomeControl(controlDiv, map) {
google.maps.event.addDomListener(zoomout, 'click', function() {
var currentZoomLevel = map.getZoom();
if(currentZoomLevel != 0){
map.setZoom(currentZoomLevel - 1);}
});
google.maps.event.addDomListener(zoomin, 'click', function() {
var currentZoomLevel = map.getZoom();
if(currentZoomLevel != 21){
map.setZoom(currentZoomLevel + 1);}
});
}
var map;
var markersArray = [];
function initialize() {
var mapDiv = document.getElementById('map-canvas');
var myLatlng = new google.maps.LatLng(-33.90224, 151.20215);
var mapOptions = {
zoom: 15,
center: myLatlng,
Marker: true,
panControl: false,
zoomControl: false,
streetViewControl: false,
overviewMapControl: false,
mapTypeControl: false,
mapTypeControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(mapDiv, mapOptions);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title:"Hello World!"
});
// Create the DIV to hold the control and
// call the HomeControl() constructor passing
// in this DIV.
var homeControlDiv = document.createElement('div');
var homeControl = new HomeControl(homeControlDiv, map);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map-canvas"></div>
<div id="zoomout" style="border:1px solid; width:150px; cursor:pointer; margin-bottom:20px;">ZOOM ME OUT</div>
<div id="zoomin" style="border:1px solid; width:150px; cursor:pointer; ">ZOOM ME IN</div>
</body>
</html>
Ответ 3
Я сделал это по-своему:
#map-container .gm-style > .gmnoprint > .gmnoprint { background: url(/images/map-zoom-controls.png) no-repeat center center !important; width: 42px !important; height: 68px !important; }
#map-container .gm-style > .gmnoprint > .gmnoprint > div > img { display: none !important; }
#map-container .gm-style > .gmnoprint > .gmnoprint div[title="Zoom in"] { top: 2px !important; left: 2px !important; width: 38px !important; height: 31px !important; }
#map-container .gm-style > .gmnoprint > .gmnoprint div[title="Zoom out"] { top: 35px !important; left: 2px !important; width: 38px !important; height: 30px !important; }
Это для изображения, которое имеет: ширина: 42 пикселей; высота: 68px;
Сделайте свои собственные настройки.
Внимание
Это применимо только в том случае, если вы используете английскую версию из-за атрибутов заголовка.
Ответ 4
Это невозможно. Вы можете немного изменить их внешний вид, используя набор предопределенных параметров параметров, или вы можете реализовать свой собственный элемент управления картой, который обеспечивает те же функции, что и управление масштабированием. Для получения дополнительной информации см. эту страницу.
ОБНОВЛЕНО: исправлена связь. Спасибо за отзыв!