Обзор
Google Maps API предоставляет для снимков типа карты фрагменты изображения с различными коэффициентами масштабирования. Например, для большинства изображений дорожных карт доступны уровни масштабирования от 0 до 18. Разница в уровнях масштабирования снимков со спутников более значительна, потому что эти изображения не генерируются, а непосредственно фотографируются.
Поскольку снимки со спутников с высоким уровнем масштабирования не всегда доступны для удаленных точек (например, для малонаселенных местностей или открытого моря), желательно заранее знать максимальный доступный уровень масштабирования для определенного места. С помощью объекта MaxZoomService
с простым интерфейсом вы можете узнать максимальный коэффициент масштабирования спутниковых снимков, которые есть в Google Maps для нужного вам места.
Запросы MaxZoom
Доступ к MaxZoomService
осуществляется асинхронно, поскольку интерфейсу Google Maps API требуется отправить вызов на внешний сервер. По этой причине необходимо передавать метод обратного вызова, который будет выполняться по завершении запроса. Этот метод обратного вызова должен обработать результаты.
Чтобы отправить запрос к MaxZoomService
, вызовите метод getMaxZoomAtLatLng()
и передайте ему координаты LatLng
, а также функцию обратного вызова, которая будет выполнена по завершении запроса.
Ответы MaxZoom
Когда getMaxZoomAtLatLng()
выполняет функцию обратного вызова, возвращаются два параметра:
status
– содержит статус запросаMaxZoomStatus
;zoom
– содержит уровень масштабирования. В случае сбоя в работе сервиса это значение будет отсутствовать.
Код 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;