Обзор
API Карт Google предоставляет для снимков типа карты фрагменты изображения с различными коэффициентами масштабирования. Например, для большинства изображений дорожных карт доступны уровни масштабирования от 0 до 18. Разница в уровнях масштабирования снимков со спутников более значительна, потому что эти изображения не генерируются, а непосредственно фотографируются.
Поскольку снимки со спутников с высоким уровнем масштабирования не всегда доступны для удаленных точек (например, для малонаселенных местностей или открытого моря), желательно заранее знать максимальный доступный уровень масштабирования для определенного места. Объект MaxZoomService
предоставляет простой интерфейс, позволяющий узнать максимальный коэффициент масштабирования, для которого в Google Maps имеются снимки заданного местоположения.
Запросы MaxZoom
Доступ к MaxZoomService
асинхронен, поскольку Google Maps API необходимо отправить вызов внешнему серверу. По этой причине необходимо передавать метод обратного вызова, который будет выполняться по завершении запроса. Этот метод обратного вызова должен обработать результаты.
Чтобы отправить запрос к MaxZoomService
, вызовите метод getMaxZoomAtLatLng()
и передайте ему координаты LatLng
, а также функцию обратного вызова, которая будет выполнена по завершении запроса.
Ответы MaxZoom
Когда getMaxZoomAtLatLng()
выполняет функцию обратного вызова, возвращаются два параметра:
status
– содержит статусMaxZoomStatus
запроса;zoom
– содержит уровень масштабирования. Если по какой-то причине запрос службы окажется неудачным, это значение будет отсутствовать.
Код status
status может возвратить одно из указанных ниже значений.
OK
обозначает, что службе удалось получить максимальный коэффициент масштабирования для снимков со спутника.ERROR
обозначает, что запрос MaxZoom не был обработан.
В следующем примере показана карта региональной агломерации Токио. При нажатии любой точки карты показывается максимальный уровень масштабирования для этой точки. (Уровни масштабирования в районе Токио обычно составляют от 18 до 21.)
TypeScript
let map: google.maps.Map; let maxZoomService: google.maps.MaxZoomService; let infoWindow: google.maps.InfoWindow; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { zoom: 11, center: { lat: 35.6894, lng: 139.692 }, mapTypeId: "hybrid", }); infoWindow = new google.maps.InfoWindow(); maxZoomService = new google.maps.MaxZoomService(); map.addListener("click", showMaxZoom); } function showMaxZoom(e: google.maps.MapMouseEvent) { maxZoomService.getMaxZoomAtLatLng( e.latLng as google.maps.LatLng, (result: google.maps.MaxZoomResult) => { if (result.status !== "OK") { infoWindow.setContent("Error in MaxZoomService"); } else { infoWindow.setContent( "The maximum zoom at this location is: " + result.zoom ); } infoWindow.setPosition(e.latLng); infoWindow.open(map); } ); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
let map; let maxZoomService; let infoWindow; function initMap() { map = new google.maps.Map(document.getElementById("map"), { zoom: 11, center: { lat: 35.6894, lng: 139.692 }, mapTypeId: "hybrid", }); infoWindow = new google.maps.InfoWindow(); maxZoomService = new google.maps.MaxZoomService(); map.addListener("click", showMaxZoom); } function showMaxZoom(e) { maxZoomService.getMaxZoomAtLatLng(e.latLng, (result) => { if (result.status !== "OK") { infoWindow.setContent("Error in MaxZoomService"); } else { infoWindow.setContent( "The maximum zoom at this location is: " + result.zoom ); } infoWindow.setPosition(e.latLng); infoWindow.open(map); }); } window.initMap = initMap;