إمالة وتدوير

اختيار النظام الأساسي: نظام التشغيل Android iOS JavaScript

عرض النموذج

نظرة عامة

يمكنك ضبط الإمالة والتدوير (العنوان) على الخريطة المتّجهة من خلال تضمين السمتَين heading وtilt عند إعداد الخريطة من خلال طلب الطريقتين setTilt وsetHeading على الخريطة. ما يلي: مثال بعض الأزرار إلى الخريطة والتي تعرض ضبط الإمالة آليًا وعنوانها بزيادات بمقدار 20 درجة.

TypeScript

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      center: {
        lat: 37.7893719,
        lng: -122.3942,
      },
      zoom: 16,
      heading: 320,
      tilt: 47.5,
      mapId: "90f87356969d889c",
    }
  );

  const buttons: [string, string, number, google.maps.ControlPosition][] = [
    ["Rotate Left", "rotate", 20, google.maps.ControlPosition.LEFT_CENTER],
    ["Rotate Right", "rotate", -20, google.maps.ControlPosition.RIGHT_CENTER],
    ["Tilt Down", "tilt", 20, google.maps.ControlPosition.TOP_CENTER],
    ["Tilt Up", "tilt", -20, google.maps.ControlPosition.BOTTOM_CENTER],
  ];

  buttons.forEach(([text, mode, amount, position]) => {
    const controlDiv = document.createElement("div");
    const controlUI = document.createElement("button");

    controlUI.classList.add("ui-button");
    controlUI.innerText = `${text}`;
    controlUI.addEventListener("click", () => {
      adjustMap(mode, amount);
    });
    controlDiv.appendChild(controlUI);
    map.controls[position].push(controlDiv);
  });

  const adjustMap = function (mode: string, amount: number) {
    switch (mode) {
      case "tilt":
        map.setTilt(map.getTilt()! + amount);
        break;
      case "rotate":
        map.setHeading(map.getHeading()! + amount);
        break;
      default:
        break;
    }
  };
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    center: {
      lat: 37.7893719,
      lng: -122.3942,
    },
    zoom: 16,
    heading: 320,
    tilt: 47.5,
    mapId: "90f87356969d889c",
  });
  const buttons = [
    ["Rotate Left", "rotate", 20, google.maps.ControlPosition.LEFT_CENTER],
    ["Rotate Right", "rotate", -20, google.maps.ControlPosition.RIGHT_CENTER],
    ["Tilt Down", "tilt", 20, google.maps.ControlPosition.TOP_CENTER],
    ["Tilt Up", "tilt", -20, google.maps.ControlPosition.BOTTOM_CENTER],
  ];

  buttons.forEach(([text, mode, amount, position]) => {
    const controlDiv = document.createElement("div");
    const controlUI = document.createElement("button");

    controlUI.classList.add("ui-button");
    controlUI.innerText = `${text}`;
    controlUI.addEventListener("click", () => {
      adjustMap(mode, amount);
    });
    controlDiv.appendChild(controlUI);
    map.controls[position].push(controlDiv);
  });

  const adjustMap = function (mode, amount) {
    switch (mode) {
      case "tilt":
        map.setTilt(map.getTilt() + amount);
        break;
      case "rotate":
        map.setHeading(map.getHeading() + amount);
        break;
      default:
        break;
    }
  };
}

window.initMap = initMap;

CSS

/* 
 * Always set the map height explicitly to define the size of the div element
 * that contains the map. 
 */
#map {
  height: 100%;
}

/* 
 * Optional: Makes the sample page fill the window. 
 */
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

.ui-button {
  background-color: #fff;
  border: 0;
  border-radius: 2px;
  box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3);
  margin: 10px;
  padding: 0 0.5em;
  font: 400 18px Roboto, Arial, sans-serif;
  overflow: hidden;
  height: 40px;
  cursor: pointer;
}
.ui-button:hover {
  background: rgb(235, 235, 235);
}

HTML

<html>
  <head>
    <title>Tilt and Rotation</title>

    <link rel="stylesheet" type="text/css" href="./style.css" />
    <script type="module" src="./index.js"></script>
  </head>
  <body>
    <div id="map"></div>

    <!-- 
      The `defer` attribute causes the script to execute after the full HTML
      document has been parsed. For non-blocking uses, avoiding race conditions,
      and consistent behavior across browsers, consider loading using Promises. See
      https://developers.google.com/maps/documentation/javascript/load-maps-js-api
      for more information.
      -->
    <script
      src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=weekly"
      defer
    ></script>
  </body>
</html>

تجربة "عيّنة"

استخدام إيماءات الماوس ولوحة المفاتيح

في حال تفعيل تفاعلات المستخدم مع الإمالة والتدوير (العنوان) آليًا أو في Google Cloud Console)، يمكن للمستخدمين ضبط الإمالة والتدوير باستخدام الماوس ولوحة المفاتيح:

  • باستخدام الماوس، اضغط مع الاستمرار على مفتاح Shift، ثم انقر على الماوس واسحبه لأعلى ولأسفل لضبط الإمالة، لليمين واليسار لضبط العنوان.
  • باستخدام لوحة المفاتيح، اضغط مع الاستمرار على مفتاح Shift، ثم استخدِم مفتاحَي السهمين المتّجهين للأعلى وللأسفل مفاتيح الأسهم لضبط الإمالة، ومفتاحا الأسهم لليمين واليسار لضبطها .

ضبط الإمالة والعنوان آليًا

يمكنك استخدام الطريقتين setTilt() وsetHeading() لضبط الإمالة آليًا. والعنوان على خريطة متجه. الاتجاه هو الاتجاه الذي تواجهه الكاميرا درجات في اتجاه عقارب الساعة تبدأ في اتجاه الشمال، لذا سيعمل map.setHeading(90) على تدوير الخريطة بحيث يكون الشرق باتجاه الأعلى. ويتم قياس زاوية الإمالة من سمت الرأس، يتنظر map.setTilt(0) مباشرةً إلى الأسفل، بينما سيؤدي map.setTilt(45) إلى في عرض مائل.

  • يمكنك طلب الرقم setTilt() لضبط زاوية إمالة الخريطة. استخدِم "getTilt()" للحصول على قيمة الإمالة الحالية.
  • يمكنك الاتصال بـ "setHeading()" لتحديد عنوان الخريطة. استخدِم getHeading() للحصول على قيمة العنوان الحالي.

لتغيير مركز الخريطة مع الحفاظ على الإمالة والعنوان، استخدم map.setCenter() أو map.panBy()

لاحظ أن نطاق الزوايا التي يمكن استخدامها يختلف مع التكبير الحالي المستوى. سيتم تثبيت القيم خارج هذا النطاق على القيمة المسموح بها حاليًا. النطاق.

يمكنك أيضًا استخدام طريقة moveCamera لتغيير العنوان آليًا، الإمالة والتوسيط والتكبير/التصغير. مزيد من المعلومات

التأثير على الطرق الأخرى

عند تطبيق الإمالة أو التدوير على الخريطة، فإن سلوك واجهة برمجة تطبيقات JavaScript الأخرى للخرائط إحدى الطرق:

  • تعرض الدالة map.getBounds() دائمًا أصغر مربّع حدود يتضمن المنطقة المرئية وعند تطبيق الإمالة، قد تُمثل الحدود التي تم إرجاعها منطقة أكبر من المنطقة المرئية لإطار عرض الخريطة.
  • سيعيد map.fitBounds() ضبط الإمالة والاتجاه إلى صفر قبل ملاءمة .
  • سيعيد map.panToBounds() ضبط الإمالة والاتجاه إلى صفر قبل تدوير .
  • تقبل الدالة map.setTilt() أي قيمة، ولكنها تحدّ من الحد الأقصى للإمالة استنادًا إلى مستوى تكبير/تصغير الخريطة الحالي.
  • تقبل الدالة map.setHeading() أي قيمة، ويتم تعديلها لتلائم النطاق [0، 360].