Lớp vẽ (Thư viện)

  1. Tổng quan
  2. Sử dụng thư viện
  3. Tuỳ chọn DrawingManager
  4. Cập nhật thành phần điều khiển Công cụ vẽ
  5. Sự kiện vẽ

Tổng quan

Lớp DrawingManager cung cấp giao diện đồ hoạ để người dùng vẽ đa giác, hình chữ nhật, đa tuyến, hình tròn và điểm đánh dấu trên bản đồ.

Sử dụng Thư viện

Bộ công cụ vẽ là một thư viện độc lập, tách biệt với mã JavaScript API Maps chính. Để sử dụng chức năng có trong thư viện này, trước tiên, bạn phải tải chức năng đó bằng tham số libraries trong URL khởi động của API Maps:

<script async
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=drawing&callback=initMap">
</script>

Sau khi thêm tham số thư viện, bạn có thể tạo đối tượng DrawingManager như sau:

var drawingManager = new google.maps.drawing.DrawingManager();
drawingManager.setMap(map);

Tuỳ chọn DrawingManager

Hàm khởi tạo DrawingManager lấy một tập hợp các tuỳ chọn xác định tập hợp các thành phần điều khiển để hiển thị, vị trí của thành phần điều khiển và trạng thái vẽ ban đầu.

  • Thuộc tính drawingMode của DrawingManager xác định trạng thái vẽ ban đầu của DrawingManager. Phương thức này chấp nhận hằng số google.maps.drawing.OverlayType. Giá trị mặc định là null, trong trường hợp này, con trỏ sẽ ở chế độ không vẽ khi DrawingManager được khởi chạy.
  • Thuộc tính drawingControl của DrawingManager xác định chế độ hiển thị của giao diện lựa chọn công cụ vẽ trên bản đồ. Phương thức này chấp nhận một giá trị boolean.
  • Bạn cũng có thể xác định vị trí của thành phần điều khiển và các loại lớp phủ cần được biểu thị trong thành phần điều khiển bằng cách sử dụng thuộc tính drawingControlOptions của DrawingManager.
    • position xác định vị trí của thành phần điều khiển bản vẽ trên bản đồ và chấp nhận hằng số google.maps.ControlPosition.
    • drawingModes là một mảng các hằng số google.maps.drawing.OverlayType và xác định các loại lớp phủ để đưa vào bộ chọn hình dạng điều khiển bản vẽ. Biểu tượng bàn tay sẽ luôn xuất hiện, cho phép người dùng tương tác với bản đồ mà không cần vẽ. Thứ tự của các công cụ trong thành phần điều khiển sẽ khớp với thứ tự khai báo các công cụ đó trong mảng.
  • Bạn có thể chỉ định một tập hợp thuộc tính mặc định cho mỗi loại lớp phủ. Tập hợp này sẽ xác định giao diện của lớp phủ khi được tạo lần đầu. Các thuộc tính này được xác định trong thuộc tính {overlay}Options của lớp phủ đó (trong đó {overlay} đại diện cho loại lớp phủ). Ví dụ: bạn có thể xác định các thuộc tính tô màu, thuộc tính nét vẽ, zIndex và khả năng nhấp của một vòng tròn bằng thuộc tính circleOptions. Nếu bất kỳ giá trị kích thước, vị trí hoặc bản đồ nào được truyền, thì các giá trị đó sẽ bị bỏ qua. Để biết thông tin đầy đủ về những thuộc tính có thể được đặt, hãy tham khảo tài liệu Tham khảo API.

Lưu ý: Để tạo một hình dạng người dùng có thể chỉnh sửa sau khi tạo, hãy đặt thuộc tính editable thành true.

TypeScript

// This example requires the Drawing library. Include the libraries=drawing
// parameter when you first load the API. For example:
// <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=drawing">

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

  const drawingManager = new google.maps.drawing.DrawingManager({
    drawingMode: google.maps.drawing.OverlayType.MARKER,
    drawingControl: true,
    drawingControlOptions: {
      position: google.maps.ControlPosition.TOP_CENTER,
      drawingModes: [
        google.maps.drawing.OverlayType.MARKER,
        google.maps.drawing.OverlayType.CIRCLE,
        google.maps.drawing.OverlayType.POLYGON,
        google.maps.drawing.OverlayType.POLYLINE,
        google.maps.drawing.OverlayType.RECTANGLE,
      ],
    },
    markerOptions: {
      icon: "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png",
    },
    circleOptions: {
      fillColor: "#ffff00",
      fillOpacity: 1,
      strokeWeight: 5,
      clickable: false,
      editable: true,
      zIndex: 1,
    },
  });

  drawingManager.setMap(map);
}

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

JavaScript

// This example requires the Drawing library. Include the libraries=drawing
// parameter when you first load the API. For example:
// <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=drawing">
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    center: { lat: -34.397, lng: 150.644 },
    zoom: 8,
  });
  const drawingManager = new google.maps.drawing.DrawingManager({
    drawingMode: google.maps.drawing.OverlayType.MARKER,
    drawingControl: true,
    drawingControlOptions: {
      position: google.maps.ControlPosition.TOP_CENTER,
      drawingModes: [
        google.maps.drawing.OverlayType.MARKER,
        google.maps.drawing.OverlayType.CIRCLE,
        google.maps.drawing.OverlayType.POLYGON,
        google.maps.drawing.OverlayType.POLYLINE,
        google.maps.drawing.OverlayType.RECTANGLE,
      ],
    },
    markerOptions: {
      icon: "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png",
    },
    circleOptions: {
      fillColor: "#ffff00",
      fillOpacity: 1,
      strokeWeight: 5,
      clickable: false,
      editable: true,
      zIndex: 1,
    },
  });

  drawingManager.setMap(map);
}

window.initMap = initMap;
Xem ví dụ

Thử mẫu

Cập nhật thành phần điều khiển Công cụ vẽ

Sau khi tạo đối tượng DrawingManager, bạn có thể cập nhật đối tượng đó bằng cách gọi setOptions() và truyền các giá trị mới.

drawingManager.setOptions({
  drawingControlOptions: {
    position: google.maps.ControlPosition.BOTTOM_LEFT,
    drawingModes: ['marker']
  }
});

Cách ẩn hoặc hiện chế độ điều khiển công cụ vẽ:

// To hide:
drawingManager.setOptions({
  drawingControl: false
});

// To show:
drawingManager.setOptions({
  drawingControl: true
});

Cách xoá chế độ điều khiển công cụ vẽ khỏi đối tượng map:

drawingManager.setMap(null);

Việc ẩn thành phần điều khiển bản vẽ sẽ khiến thành phần điều khiển công cụ vẽ không hiển thị, nhưng tất cả chức năng của lớp DrawingManager vẫn hoạt động. Bằng cách này, bạn có thể triển khai chế độ kiểm soát của riêng mình nếu muốn. Việc xoá DrawingManager khỏi đối tượng map sẽ vô hiệu hoá mọi chức năng vẽ; bạn phải đính kèm lại đối tượng này vào bản đồ bằng drawingManager.setMap(map) hoặc tạo một đối tượng DrawingManager mới nếu muốn khôi phục các tính năng vẽ.

Sự kiện vẽ

Khi một lớp phủ hình dạng được tạo, hai sự kiện sẽ được kích hoạt:

  • Sự kiện {overlay}complete (trong đó {overlay} đại diện cho loại lớp phủ, chẳng hạn như circlecomplete, polygoncomplete, v.v.). Tham chiếu đến lớp phủ được truyền dưới dạng đối số.
  • Sự kiện overlaycomplete. Một đối tượng cố định, chứa OverlayType và tham chiếu đến lớp phủ, được truyền dưới dạng đối số.
google.maps.event.addListener(drawingManager, 'circlecomplete', function(circle) {
  var radius = circle.getRadius();
});

google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) {
  if (event.type == 'circle') {
    var radius = event.overlay.getRadius();
  }
});

Xin lưu ý rằng các sự kiện google.maps.Map, chẳng hạn như clickmousemove, sẽ bị tắt trong khi vẽ trên bản đồ.