نشانگرها (میراث)

پلتفرم را انتخاب کنید: Android iOS JavaScript

مقدمه

یک نشانگر مکان را روی نقشه مشخص می کند. به طور پیش فرض، یک نشانگر از یک تصویر استاندارد استفاده می کند. نشانگرها می توانند تصاویر سفارشی را نمایش دهند که در این صورت معمولاً به آنها "آیکون" می گویند. نشانگرها و نمادها اشیایی از نوع Marker هستند. می توانید یک نماد سفارشی را در سازنده نشانگر یا با فراخوانی setIcon() روی نشانگر تنظیم کنید. درباره سفارشی کردن تصویر نشانگر بیشتر ببینید.

به طور کلی، نشانگرها نوعی پوشش هستند. برای اطلاعات در مورد انواع دیگر همپوشانی، به طراحی روی نقشه مراجعه کنید.

نشانگرها طوری طراحی شده اند که تعاملی باشند. برای مثال، به‌طور پیش‌فرض رویدادهای 'click' را دریافت می‌کنند، بنابراین می‌توانید یک شنونده رویداد اضافه کنید تا یک پنجره اطلاعات نمایش داده شود. می توانید با تنظیم ویژگی draggable نشانگر روی true به کاربران اجازه دهید یک نشانگر را روی نقشه جابجا کنند. برای اطلاعات بیشتر درباره نشانگرهای قابل کشیدن، به زیر مراجعه کنید.

یک نشانگر اضافه کنید

سازنده google.maps.Marker یک شیء Marker options را به صورت تحت اللفظی می گیرد و ویژگی های اولیه نشانگر را مشخص می کند.

فیلدهای زیر به ویژه مهم هستند و معمولاً هنگام ساخت یک نشانگر تنظیم می شوند:

  • position (الزامی) یک LatLng را مشخص می کند که مکان اولیه نشانگر را مشخص می کند. یکی از راه های بازیابی LatLng استفاده از سرویس Geocoding است.
  • map (اختیاری) Map مشخص می کند که نشانگر روی آن قرار گیرد. اگر نقشه را در ساخت نشانگر مشخص نکنید، نشانگر ایجاد می شود اما به نقشه متصل نیست (یا روی آن نمایش داده نمی شود). می‌توانید بعداً با فراخوانی متد setMap() نشانگر را اضافه کنید.

مثال زیر یک نشانگر ساده به یک نقشه در Uluru، در مرکز استرالیا اضافه می کند:

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;

جاوا اسکریپت

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;
مشاهده نمونه

Sample را امتحان کنید

در مثال بالا، نشانگر در هنگام ساخت نشانگر با استفاده از ویژگی 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);

title نشانگر به عنوان یک راهنمای ابزار ظاهر می شود.

اگر نمی‌خواهید هیچ یک از Marker options در سازنده نشانگر ارسال کنید، در عوض یک شی خالی {} را در آخرین آرگومان سازنده ارسال کنید.

مشاهده نمونه

یک نشانگر را بردارید

برای حذف یک نشانگر از نقشه، متد setMap() که null به عنوان آرگومان ارسال می کند، فراخوانی کنید.

marker.setMap(null);

توجه داشته باشید که روش بالا نشانگر را حذف نمی کند. نشانگر را از روی نقشه حذف می کند. اگر در عوض می‌خواهید نشانگر را حذف کنید، باید آن را از نقشه حذف کنید و سپس خود نشانگر را روی null قرار دهید.

اگر می خواهید مجموعه ای از نشانگرها را مدیریت کنید، باید یک آرایه برای نگه داشتن نشانگرها ایجاد کنید. با استفاده از این آرایه، می‌توانید در صورت نیاز به حذف نشانگرها، در هر نشانگر آرایه، setMap() به نوبه خود فراخوانی کنید. می توانید نشانگرها را با حذف آنها از نقشه و سپس تنظیم length آرایه روی 0 حذف کنید، که تمام ارجاعات به نشانگرها را حذف می کند.

مشاهده نمونه

یک تصویر نشانگر را سفارشی کنید

می‌توانید ظاهر بصری نشانگرها را با تعیین یک فایل تصویری یا نماد مبتنی بر وکتور برای نمایش به‌جای نماد پیش‌فرض Google Maps سفارشی کنید. می توانید متنی را با برچسب نشانگر اضافه کنید و از نمادهای پیچیده برای تعریف مناطق قابل کلیک استفاده کنید و ترتیب پشته نشانگرها را تنظیم کنید.

نشانگرها با نمادهای تصویر

در ابتدایی‌ترین حالت، یک نماد می‌تواند تصویری را برای استفاده به‌جای نماد پیش‌فرض فشار سنج Google Maps مشخص کند. برای تعیین چنین نمادی، ویژگی icon نشانگر را روی URL یک تصویر تنظیم کنید. Maps JavaScript API نماد را به صورت خودکار اندازه می‌کند.

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;

جاوا اسکریپت

// 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;
مشاهده نمونه

Sample را امتحان کنید

نشانگرهایی با نمادهای مبتنی بر برداری

می توانید از مسیرهای برداری سفارشی 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;

جاوا اسکریپت

// 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;
مشاهده نمونه

Sample را امتحان کنید

برچسب های نشانگر

برچسب نشانگر حرف یا عددی است که در داخل نشانگر ظاهر می شود. تصویر نشانگر در این بخش یک برچسب نشانگر با حرف "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;

جاوا اسکریپت

// 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;
مشاهده نمونه

Sample را امتحان کنید

نمادهای پیچیده

شما می توانید اشکال پیچیده را برای نشان دادن مناطقی که قابل کلیک هستند مشخص کنید، و مشخص کنید که چگونه نمادها باید نسبت به دیگر همپوشانی ها ظاهر شوند ("ترتیب پشته" آنها). نمادهایی که به این روش مشخص شده اند باید ویژگی های icon خود را روی یک شی از نوع Icon تنظیم کنند.

اشیاء Icon یک تصویر را تعریف می کنند. آنها همچنین size نماد، origin نماد را تعیین می کنند (اگر تصویری که می خواهید بخشی از یک تصویر بزرگتر در یک sprite باشد، برای مثال)، و 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;

جاوا اسکریپت

// 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;
مشاهده نمونه

Sample را امتحان کنید

تبدیل اشیاء MarkerImage به تایپ Icon

تا قبل از نسخه 3.10 Maps JavaScript API، نمادهای پیچیده به عنوان اشیاء MarkerImage تعریف می شدند. شیء 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));

تبدیل می شود

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)
};

بهینه سازی نشانگرها

بهینه سازی عملکرد را با ارائه بسیاری از نشانگرها به عنوان یک عنصر ثابت افزایش می دهد. این در مواردی که به تعداد زیادی نشانگر نیاز است مفید است. به طور پیش فرض، Maps JavaScript API تصمیم می گیرد که آیا یک نشانگر بهینه شود یا خیر. هنگامی که تعداد زیادی نشانگر وجود دارد، Maps JavaScript API سعی می کند نشانگرها را با بهینه سازی ارائه کند. همه نشانگرها را نمی توان بهینه کرد. در برخی شرایط، Maps JavaScript API ممکن است نیاز به ارائه نشانگرها بدون بهینه سازی داشته باشد. رندر بهینه شده برای GIF یا PNG متحرک یا زمانی که هر نشانگر باید به عنوان یک عنصر DOM جداگانه ارائه شود غیرفعال کنید. مثال زیر ایجاد یک نشانگر بهینه شده را نشان می دهد:

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;

جاوا اسکریپت

// 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;
مشاهده نمونه

Sample را امتحان کنید

یک نشانگر را متحرک کنید

شما می توانید نشانگرها را متحرک کنید تا در شرایط مختلف حرکتی پویا از خود نشان دهند. برای تعیین نحوه متحرک شدن نشانگر، از ویژگی 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;

جاوا اسکریپت

// 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;
مشاهده نمونه

Sample را امتحان کنید

اگر نشانگرهای زیادی دارید، ممکن است نخواهید آنها را به یکباره روی نقشه رها کنید. می‌توانید از 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!"
});

سفارشی سازی نشانگر بیشتر

برای یک نشانگر کاملاً سفارشی، به مثال پنجره بازشو سفارشی شده مراجعه کنید.

برای گسترش بیشتر کلاس نشانگر، خوشه بندی و مدیریت نشانگر، و سفارشی سازی همپوشانی، به کتابخانه های منبع باز مراجعه کنید.