خدمة الصور التي تتيح التكبير إلى أقصى حد

  1. الصور بأقصى مستوى تكبير
  2. طلبات MaxZoom
  3. ردود MaxZoom

نظرة عامة

توفّر واجهة برمجة التطبيقات Google Maps API مربّعات الخريطة على مستويات تكبير مختلفة لصور نوع الخريطة. على سبيل المثال، تتوفّر معظم صور خريطة الطريق من مستويات التكبير من 0 إلى 18. تختلف صور القمر الصناعي بشكل أكبر لأنّ هذه الصور لا يتم إنشاؤها، بل يتم التقاطها مباشرةً.

بما أنّ صور القمر الصناعي لا تتوفّر دائمًا بمستويات تكبير عالية للمواقع الجغرافية البعيدة، مثل المناطق ذات الكثافة السكانية المنخفضة أو مناطق المحيطات المفتوحة، قد تحتاج إلى معرفة أعلى مستوى تكبير للصور في موقع جغرافي معيّن مسبقًا. يوفّر الكائن MaxZoomService واجهة بسيطة لاكتشاف الحد الأقصى لمستوى التكبير في موقع جغرافي معيّن تتوفّر له صور من القمر الصناعي في "خرائط Google".

طلبات MaxZoom

يتم الوصول إلى MaxZoomService بشكل غير متزامن، لأنّ واجهة برمجة تطبيقات "خرائط Google" تحتاج إلى إجراء طلب إلى خادم خارجي. لهذا السبب، عليك تمرير طريقة رد اتصال لتنفيذها عند اكتمال الطلب. يجب أن تعالج طريقة ردّ الاتصال هذه النتيجة.

لبدء طلب إلى 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;
الاطّلاع على مثال