Markers

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

المقدمة

يحدد محدّد موقعًا على خريطة. بشكل تلقائي، تستخدم العلامة صورة عادية. يمكن أن تعرض العلامات صورًا مخصصة، ويُشار إليها عادة باسم "الرموز". العلامات والرموز هي عناصر من النوع Marker. يمكنك ضبط رمز مخصص داخل دالة إنشاء العلامة، أو من خلال استدعاء setIcon() على العلامة. اطّلِع على المزيد من المعلومات حول تخصيص صورة العلامة.

بوجه عام، تعد العلامات نوعًا من التراكبات. للحصول على معلومات عن أنواع أخرى من التراكبات، يمكنك الاطّلاع على الرسم على الخريطة.

تم تصميم المحددات بحيث تكون تفاعلية. على سبيل المثال، تتلقّى تلقائيًا أحداث 'click'، بحيث يمكنك إضافة أداة معالجة حدث لإظهار نافذة معلومات تعرض معلومات مخصّصة. يمكنك السماح للمستخدمين بنقل محدِّد موقع على الخريطة من خلال ضبط سمة draggable للعلامة على true. لمزيد من المعلومات عن محدِّدات المواقع القابلة للسحب، راجع أدناه.

إضافة علامة

تستخدم دالة الإنشاء google.maps.Marker كائن Marker options واحدًا حرفيًا، مع تحديد الخصائص الأولية للعلامة.

الحقول التالية مهمة بشكل خاص ويتم ضبطها عادةً عند إنشاء علامة:

  • تحدّد السمة position (مطلوبة) السمة LatLng تحدّد الموقع الجغرافي الأولي للعلامة. إحدى طرق استرداد LatLng هي استخدام خدمة الترميز الجغرافي.
  • تحدّد علامة map (اختيارية) السمة Map التي يجب وضع العلامة عليها. إذا لم تحدد الخريطة عند إنشاء العلامة، فسيتم إنشاء العلامة ولكن لن يتم إرفاقها (أو عرضها على) الخريطة. يمكنك إضافة محدّد الموقع لاحقًا عن طريق استدعاء طريقة setMap() الخاصة بالعلامة.

يوضّح المثال التالي محدّدًا بسيطًا لخريطة في "أولورو" في وسط أستراليا:

TypeScript

function initMap(): void {
  const myLatLng = { lat: -25.363, lng: 131.044 };

  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 4,
      center: myLatLng,
    }
  );

  new google.maps.Marker({
    position: myLatLng,
    map,
    title: "Hello World!",
  });
}

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

JavaScript

function initMap() {
  const myLatLng = { lat: -25.363, lng: 131.044 };
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 4,
    center: myLatLng,
  });

  new google.maps.Marker({
    position: myLatLng,
    map,
    title: "Hello World!",
  });
}

window.initMap = initMap;
عرض مثال

تجربة النموذج

في المثال أعلاه، يتم وضع العلامة على الخريطة عند إنشاء العلامة باستخدام الخاصية map في خيارات العلامة. بدلاً من ذلك، يمكنك إضافة محدّد الموقع إلى الخريطة مباشرة باستخدام طريقة العلامة setMap()، كما هو موضح في المثال أدناه:

var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
var mapOptions = {
  zoom: 4,
  center: myLatlng
}
var map = new google.maps.Map(document.getElementById("map"), mapOptions);

var marker = new google.maps.Marker({
    position: myLatlng,
    title:"Hello World!"
});

// To add the marker to the map, call setMap();
marker.setMap(map);

The marker's title will appear as a tooltip.

If you do not wish to pass any Marker options in the marker's constructor, instead pass an empty object {} in the last argument of the constructor.

View example

Remove a marker

To remove a marker from the map, call the setMap() method passing null as the argument.

marker.setMap(null);

Note that the above method does not delete the marker. It removes the marker from the map. If instead you wish to delete the marker, you should remove it from the map, and then set the marker itself to null.

If you wish to manage a set of markers, you should create an array to hold the markers. Using this array, you can then call setMap() on each marker in the array in turn when you need to remove the markers. You can delete the markers by removing them from the map and then setting the array's length to 0, which removes all references to the markers.

View example

Customize a marker image

You can customize the visual appearance of markers by specifying an image file or vector-based icon to display instead of the default Google Maps pushpin icon. You can add text with a marker label, and use complex icons to define clickable regions, and set the stack order of markers.

Markers with image icons

In the most basic case, an icon can specify an image to use instead of the default Google Maps pushpin icon. To specify such an icon, set the marker's icon property to the URL of an image. The Maps JavaScript API will size the icon automatically.

TypeScript

// This example adds a marker to indicate the position of Bondi Beach in Sydney,
// Australia.
function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 4,
      center: { lat: -33, lng: 151 },
    }
  );

  const image =
    "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png";
  const beachMarker = new google.maps.Marker({
    position: { lat: -33.89, lng: 151.274 },
    map,
    icon: image,
  });
}

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

JavaScript

// This example adds a marker to indicate the position of Bondi Beach in Sydney,
// Australia.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 4,
    center: { lat: -33, lng: 151 },
  });
  const image =
    "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png";
  const beachMarker = new google.maps.Marker({
    position: { lat: -33.89, lng: 151.274 },
    map,
    icon: image,
  });
}

window.initMap = initMap;
عرض مثال

تجربة النموذج

علامات تشتمل على رموز مستندة إلى المتجهات

يمكنك استخدام مسارات متّجهات SVG المخصّصة لتحديد المظهر المرئي للعلامات. لإجراء ذلك، مرِّر الكائن Symbol الحرفيًا مع المسار المطلوب إلى خاصية العلامة icon. يمكنك تحديد مسار مخصص باستخدام تدوين مسار SVG أو استخدام أحد المسارات المحددة مسبقًا في google.maps.SymbolPath. وتكون السمة anchor مطلوبة حتى يتم عرض العلامة بشكل صحيح عندما يتغير مستوى التكبير أو التصغير. مزيد من المعلومات حول استخدام الرموز لإنشاء رموز مستندة إلى المتجهات للعلامات (والخطوط المتعددة).

TypeScript

// This example uses SVG path notation to add a vector-based symbol
// as the icon for a marker. The resulting icon is a marker-shaped
// symbol with a blue fill and no border.

function initMap(): void {
  const center = new google.maps.LatLng(-33.712451, 150.311823);
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 9,
      center: center,
    }
  );

  const svgMarker = {
    path: "M-1.547 12l6.563-6.609-1.406-1.406-5.156 5.203-2.063-2.109-1.406 1.406zM0 0q2.906 0 4.945 2.039t2.039 4.945q0 1.453-0.727 3.328t-1.758 3.516-2.039 3.070-1.711 2.273l-0.75 0.797q-0.281-0.328-0.75-0.867t-1.688-2.156-2.133-3.141-1.664-3.445-0.75-3.375q0-2.906 2.039-4.945t4.945-2.039z",
    fillColor: "blue",
    fillOpacity: 0.6,
    strokeWeight: 0,
    rotation: 0,
    scale: 2,
    anchor: new google.maps.Point(0, 20),
  };

  new google.maps.Marker({
    position: map.getCenter(),
    icon: svgMarker,
    map: map,
  });
}

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

JavaScript

// This example uses SVG path notation to add a vector-based symbol
// as the icon for a marker. The resulting icon is a marker-shaped
// symbol with a blue fill and no border.
function initMap() {
  const center = new google.maps.LatLng(-33.712451, 150.311823);
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 9,
    center: center,
  });
  const svgMarker = {
    path: "M-1.547 12l6.563-6.609-1.406-1.406-5.156 5.203-2.063-2.109-1.406 1.406zM0 0q2.906 0 4.945 2.039t2.039 4.945q0 1.453-0.727 3.328t-1.758 3.516-2.039 3.070-1.711 2.273l-0.75 0.797q-0.281-0.328-0.75-0.867t-1.688-2.156-2.133-3.141-1.664-3.445-0.75-3.375q0-2.906 2.039-4.945t4.945-2.039z",
    fillColor: "blue",
    fillOpacity: 0.6,
    strokeWeight: 0,
    rotation: 0,
    scale: 2,
    anchor: new google.maps.Point(0, 20),
  };

  new google.maps.Marker({
    position: map.getCenter(),
    icon: svgMarker,
    map: map,
  });
}

window.initMap = initMap;
عرض مثال

تجربة النموذج

تصنيفات العلامات

علامة العلامة هي حرف أو رقم يظهر داخل العلامة. تعرض صورة العلامة في هذا القسم علامة محدّد عليها الحرف "B". يمكنك تحديد تصنيف محدّد كعلامة كسلسلة أو كائن MarkerLabel يتضمن سلسلة وخصائص تصنيفات أخرى.

عند إنشاء علامة، يمكنك تحديد السمة label في الكائن MarkerOptions. بدلاً من ذلك، يمكنك استدعاء الدالة setLabel() في الكائن Marker لضبط التصنيف على علامة موجودة.

يعرض المثال التالي محددات ذات علامات عند نقر المستخدم على الخريطة:

TypeScript

// In the following example, markers appear when the user clicks on the map.
// Each marker is labeled with a single alphabetical character.
const labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let labelIndex = 0;

function initMap(): void {
  const bangalore = { lat: 12.97, lng: 77.59 };
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 12,
      center: bangalore,
    }
  );

  // This event listener calls addMarker() when the map is clicked.
  google.maps.event.addListener(map, "click", (event) => {
    addMarker(event.latLng, map);
  });

  // Add a marker at the center of the map.
  addMarker(bangalore, map);
}

// Adds a marker to the map.
function addMarker(location: google.maps.LatLngLiteral, map: google.maps.Map) {
  // Add the marker at the clicked location, and add the next-available label
  // from the array of alphabetical characters.
  new google.maps.Marker({
    position: location,
    label: labels[labelIndex++ % labels.length],
    map: map,
  });
}

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

JavaScript

// In the following example, markers appear when the user clicks on the map.
// Each marker is labeled with a single alphabetical character.
const labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let labelIndex = 0;

function initMap() {
  const bangalore = { lat: 12.97, lng: 77.59 };
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 12,
    center: bangalore,
  });

  // This event listener calls addMarker() when the map is clicked.
  google.maps.event.addListener(map, "click", (event) => {
    addMarker(event.latLng, map);
  });
  // Add a marker at the center of the map.
  addMarker(bangalore, map);
}

// Adds a marker to the map.
function addMarker(location, map) {
  // Add the marker at the clicked location, and add the next-available label
  // from the array of alphabetical characters.
  new google.maps.Marker({
    position: location,
    label: labels[labelIndex++ % labels.length],
    map: map,
  });
}

window.initMap = initMap;
عرض مثال

تجربة النموذج

الرموز المعقّدة

يمكنك تحديد أشكال معقّدة للإشارة إلى المناطق القابلة للنقر، وتحديد الشكل الذي يجب أن تظهر به الرموز مقارنةً بالتراكبات الأخرى ("ترتيب تسلسل استدعاء الدوال البرمجية"). ويجب أن تعين الرموز المحددة بهذه الطريقة سمات icon على كائن من النوع Icon.

تحدّد كائنات Icon الصورة. وتحدّد أيضًا السمة size للرمز، ورمز origin للرمز (إذا كانت الصورة التي تريدها جزءًا من صورة أكبر في الصورة المتحركة مثلاً)، والنقطة anchor التي يجب أن تقع فيها نقطة اتصال الرمز (استنادًا إلى المصدر).

إذا كنت تستخدم تصنيفًا مع علامة مخصّصة، يمكنك وضع التصنيف باستخدام السمة labelOrigin في الكائن Icon.

TypeScript

// The following example creates complex markers to indicate beaches near
// Sydney, NSW, Australia. Note that the anchor is set to (0,32) to correspond
// to the base of the flagpole.

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 10,
      center: { lat: -33.9, lng: 151.2 },
    }
  );

  setMarkers(map);
}

// Data for the markers consisting of a name, a LatLng and a zIndex for the
// order in which these markers should display on top of each other.
const beaches: [string, number, number, number][] = [
  ["Bondi Beach", -33.890542, 151.274856, 4],
  ["Coogee Beach", -33.923036, 151.259052, 5],
  ["Cronulla Beach", -34.028249, 151.157507, 3],
  ["Manly Beach", -33.80010128657071, 151.28747820854187, 2],
  ["Maroubra Beach", -33.950198, 151.259302, 1],
];

function setMarkers(map: google.maps.Map) {
  // Adds markers to the map.

  // Marker sizes are expressed as a Size of X,Y where the origin of the image
  // (0,0) is located in the top left of the image.

  // Origins, anchor positions and coordinates of the marker increase in the X
  // direction to the right and in the Y direction down.
  const image = {
    url: "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png",
    // This marker is 20 pixels wide by 32 pixels high.
    size: new google.maps.Size(20, 32),
    // The origin for this image is (0, 0).
    origin: new google.maps.Point(0, 0),
    // The anchor for this image is the base of the flagpole at (0, 32).
    anchor: new google.maps.Point(0, 32),
  };
  // Shapes define the clickable region of the icon. The type defines an HTML
  // <area> element 'poly' which traces out a polygon as a series of X,Y points.
  // The final coordinate closes the poly by connecting to the first coordinate.
  const shape = {
    coords: [1, 1, 1, 20, 18, 20, 18, 1],
    type: "poly",
  };

  for (let i = 0; i < beaches.length; i++) {
    const beach = beaches[i];

    new google.maps.Marker({
      position: { lat: beach[1], lng: beach[2] },
      map,
      icon: image,
      shape: shape,
      title: beach[0],
      zIndex: beach[3],
    });
  }
}

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

JavaScript

// The following example creates complex markers to indicate beaches near
// Sydney, NSW, Australia. Note that the anchor is set to (0,32) to correspond
// to the base of the flagpole.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 10,
    center: { lat: -33.9, lng: 151.2 },
  });

  setMarkers(map);
}

// Data for the markers consisting of a name, a LatLng and a zIndex for the
// order in which these markers should display on top of each other.
const beaches = [
  ["Bondi Beach", -33.890542, 151.274856, 4],
  ["Coogee Beach", -33.923036, 151.259052, 5],
  ["Cronulla Beach", -34.028249, 151.157507, 3],
  ["Manly Beach", -33.80010128657071, 151.28747820854187, 2],
  ["Maroubra Beach", -33.950198, 151.259302, 1],
];

function setMarkers(map) {
  // Adds markers to the map.
  // Marker sizes are expressed as a Size of X,Y where the origin of the image
  // (0,0) is located in the top left of the image.
  // Origins, anchor positions and coordinates of the marker increase in the X
  // direction to the right and in the Y direction down.
  const image = {
    url: "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png",
    // This marker is 20 pixels wide by 32 pixels high.
    size: new google.maps.Size(20, 32),
    // The origin for this image is (0, 0).
    origin: new google.maps.Point(0, 0),
    // The anchor for this image is the base of the flagpole at (0, 32).
    anchor: new google.maps.Point(0, 32),
  };
  // Shapes define the clickable region of the icon. The type defines an HTML
  // <area> element 'poly' which traces out a polygon as a series of X,Y points.
  // The final coordinate closes the poly by connecting to the first coordinate.
  const shape = {
    coords: [1, 1, 1, 20, 18, 20, 18, 1],
    type: "poly",
  };

  for (let i = 0; i < beaches.length; i++) {
    const beach = beaches[i];

    new google.maps.Marker({
      position: { lat: beach[1], lng: beach[2] },
      map,
      icon: image,
      shape: shape,
      title: beach[0],
      zIndex: beach[3],
    });
  }
}

window.initMap = initMap;
عرض مثال

تجربة النموذج

تحويل MarkerImage من العناصر إلى النوع Icon

تم تحديد الرموز المعقدة ككائنات MarkerImage حتى الإصدار 3.10 من واجهة برمجة تطبيقات JavaScript للخرائط. تمت إضافة الكائن Icon الحرفي في الإصدار 3.10، ويحل محل MarkerImage من الإصدار 3.11 والإصدارات الأحدث. تسمح القيم الحرفية للكائن Icon بالعناصر نفسها المتوفّرة في السمة MarkerImage، ما يسمح لك بتحويل السمة MarkerImage إلى Icon بسهولة عن طريق إزالة دالة الإنشاء والتفاف المعلمات السابقة في معلمات {} وإضافة أسماء كل معلّمة. مثلاً:

var image = new google.maps.MarkerImage(
    place.icon,
    new google.maps.Size(71, 71),
    new google.maps.Point(0, 0),
    new google.maps.Point(17, 34),
    new google.maps.Size(25, 25));

becomes

var image = {
  url: place.icon,
  size: new google.maps.Size(71, 71),
  origin: new google.maps.Point(0, 0),
  anchor: new google.maps.Point(17, 34),
  scaledSize: new google.maps.Size(25, 25)
};

Optimize markers

Optimization enhances performance by rendering many markers as a single static element. This is useful in cases where a large number of markers is required. By default, the Maps JavaScript API will decide whether a marker will be optimized. When there is a large number of markers, the Maps JavaScript API will attempt to render markers with optimization. Not all Markers can be optimized; in some situations, the Maps JavaScript API may need to render Markers without optimization. Disable optimized rendering for animated GIFs or PNGs, or when each marker must be rendered as a separate DOM element. The following example shows creating an optimized marker:

var marker = new google.maps.Marker({
    position: myLatlng,
    title:"Hello World!",
    optimized: true 
});

إتاحة إمكانية الوصول إلى محدِّد موقع

يمكنك إتاحة إمكانية الوصول إلى محدِّد الموقع عن طريق إضافة حدث أداة معالجة النقرات، وإعداد optimized على false. تؤدي أداة معالجة النقرات إلى تضمين علامات دلالية على الزر، والتي يمكن الوصول إليها باستخدام التنقل عبر لوحة المفاتيح وبرامج قراءة الشاشة وما إلى ذلك. استخدِم الخيار title لتقديم نص يمكن الوصول إليه لعلامة.

في المثال التالي، تحظى العلامة الأولى بالتركيز عند الضغط على علامة التبويب، ويمكنك بعد ذلك استخدام مفاتيح الأسهم للتنقل بين العلامات. اضغط على مفتاح التبويب (Tab) مرة أخرى لمواصلة التنقّل عبر بقية عناصر التحكّم في الخريطة. إذا كانت العلامة تحتوي على نافذة معلومات، يمكنك فتحها بالنقر على العلامة، أو عن طريق الضغط على مفتاح Enter أو شريط المسافة عند اختيار العلامة. عند إغلاق نافذة المعلومات، سيعود التركيز إلى العلامة المرتبطة.

TypeScript

// The following example creates five accessible and
// focusable markers.

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 12,
      center: { lat: 34.84555, lng: -111.8035 },
    }
  );

  // Set LatLng and title text for the markers. The first marker (Boynton Pass)
  // receives the initial focus when tab is pressed. Use arrow keys to
  // move between markers; press tab again to cycle through the map controls.
  const tourStops: [google.maps.LatLngLiteral, string][] = [
    [{ lat: 34.8791806, lng: -111.8265049 }, "Boynton Pass"],
    [{ lat: 34.8559195, lng: -111.7988186 }, "Airport Mesa"],
    [{ lat: 34.832149, lng: -111.7695277 }, "Chapel of the Holy Cross"],
    [{ lat: 34.823736, lng: -111.8001857 }, "Red Rock Crossing"],
    [{ lat: 34.800326, lng: -111.7665047 }, "Bell Rock"],
  ];

  // Create an info window to share between markers.
  const infoWindow = new google.maps.InfoWindow();

  // Create the markers.
  tourStops.forEach(([position, title], i) => {
    const marker = new google.maps.Marker({
      position,
      map,
      title: `${i + 1}. ${title}`,
      label: `${i + 1}`,
      optimized: false,
    });

    // Add a click listener for each marker, and set up the info window.
    marker.addListener("click", () => {
      infoWindow.close();
      infoWindow.setContent(marker.getTitle());
      infoWindow.open(marker.getMap(), marker);
    });
  });
}

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

JavaScript

// The following example creates five accessible and
// focusable markers.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 12,
    center: { lat: 34.84555, lng: -111.8035 },
  });
  // Set LatLng and title text for the markers. The first marker (Boynton Pass)
  // receives the initial focus when tab is pressed. Use arrow keys to
  // move between markers; press tab again to cycle through the map controls.
  const tourStops = [
    [{ lat: 34.8791806, lng: -111.8265049 }, "Boynton Pass"],
    [{ lat: 34.8559195, lng: -111.7988186 }, "Airport Mesa"],
    [{ lat: 34.832149, lng: -111.7695277 }, "Chapel of the Holy Cross"],
    [{ lat: 34.823736, lng: -111.8001857 }, "Red Rock Crossing"],
    [{ lat: 34.800326, lng: -111.7665047 }, "Bell Rock"],
  ];
  // Create an info window to share between markers.
  const infoWindow = new google.maps.InfoWindow();

  // Create the markers.
  tourStops.forEach(([position, title], i) => {
    const marker = new google.maps.Marker({
      position,
      map,
      title: `${i + 1}. ${title}`,
      label: `${i + 1}`,
      optimized: false,
    });

    // Add a click listener for each marker, and set up the info window.
    marker.addListener("click", () => {
      infoWindow.close();
      infoWindow.setContent(marker.getTitle());
      infoWindow.open(marker.getMap(), marker);
    });
  });
}

window.initMap = initMap;
عرض مثال

تجربة النموذج

تحريك العلامة

يمكنك تحريك العلامات حتى تعرض حركة ديناميكية في ظروف مختلفة. لتحديد الطريقة التي يتم بها تحريك محدِّد، استخدِم الخاصية animation للعلامة من النوع google.maps.Animation. في ما يلي قيم Animation المسموح بها:

  • تشير علامة DROP إلى أنه يجب إفلات العلامة من أعلى الخريطة إلى موقعها النهائي عند وضعها لأول مرة على الخريطة. سيتوقف تشغيل الصورة المتحركة بعد توقف العلامة وعودة animation إلى null. ويتم عادةً تحديد هذا النوع من الصور المتحركة أثناء إنشاء Marker.
  • تشير علامة BOUNCE إلى أنه يجب ارتداد العلامة في مكانها. ويستمر ارتداد علامة الارتداد إلى أن يتم ضبط سمة animation بشكل صريح على null.

يمكنك بدء حركة على محدِّد موقع موجود باستدعاء setAnimation() على الكائن Marker.

TypeScript

// The following example creates a marker in Stockholm, Sweden using a DROP
// animation. Clicking on the marker will toggle the animation between a BOUNCE
// animation and no animation.

let marker: google.maps.Marker;

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 13,
      center: { lat: 59.325, lng: 18.07 },
    }
  );

  marker = new google.maps.Marker({
    map,
    draggable: true,
    animation: google.maps.Animation.DROP,
    position: { lat: 59.327, lng: 18.067 },
  });
  marker.addListener("click", toggleBounce);
}

function toggleBounce() {
  if (marker.getAnimation() !== null) {
    marker.setAnimation(null);
  } else {
    marker.setAnimation(google.maps.Animation.BOUNCE);
  }
}

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

JavaScript

// The following example creates a marker in Stockholm, Sweden using a DROP
// animation. Clicking on the marker will toggle the animation between a BOUNCE
// animation and no animation.
let marker;

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 13,
    center: { lat: 59.325, lng: 18.07 },
  });

  marker = new google.maps.Marker({
    map,
    draggable: true,
    animation: google.maps.Animation.DROP,
    position: { lat: 59.327, lng: 18.067 },
  });
  marker.addListener("click", toggleBounce);
}

function toggleBounce() {
  if (marker.getAnimation() !== null) {
    marker.setAnimation(null);
  } else {
    marker.setAnimation(google.maps.Animation.BOUNCE);
  }
}

window.initMap = initMap;
عرض مثال

تجربة النموذج

إذا كان لديك العديد من المحددات، فقد لا ترغب في إسقاطها على الخريطة في وقت واحد. يمكنك استخدام setTimeout() لتوزيع الحركات على العلامات الخاصة بك باستخدام نمط مشابه للنمط التالي:

function drop() {
  for (var i =0; i < markerArray.length; i++) {
    setTimeout(function() {
      addMarkerMethod();
    }, i * 200);
  }
}

عرض مثال

جعل أداة السحب قابلة للسحب

للسماح للمستخدمين بسحب محدّد موقع إلى موقع مختلف على الخريطة، اضبط draggable على true في خيارات العلامة.

var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
var mapOptions = {
  zoom: 4,
  center: myLatlng
}
var map = new google.maps.Map(document.getElementById("map"), mapOptions);

// Place a draggable marker on the map
var marker = new google.maps.Marker({
    position: myLatlng,
    map: map,
    draggable:true,
    title:"Drag me!"
});

المزيد من تخصيص العلامات

للحصول على علامة محدّدة تمامًا، يمكنك الاطّلاع على مثال للنافذة المنبثقة المخصّصة.

للحصول على مزيد من الإضافات لفئة العلامة وتجميع العلامات وإدارتها وتخصيص التراكب، اطّلِع على مكتبات البرامج مفتوحة المصدر.