2009-07-17 75 views
23

Có cách nào để chụp hình ảnh của Bản đồ Google không? Tôi không thể sử dụng bản đồ tĩnh vì tôi có các đường polycines của riêng mình trên bản đồ và tôi muốn chúng trong "ảnh chụp màn hình". Về cơ bản tôi muốn người dùng điều hướng bản đồ, thêm một số đường polylines và khi nhấp vào Lưu, tôi sẽ lưu các đường, tọa độ, thu phóng, nhưng tôi cũng muốn có hình ảnh để hiển thị dưới dạng hình thu nhỏ trong danh sách .Hình ảnh Google Maps?

Tks trước.

+4

Tôi vừa phát hiện ra rằng bản đồ tĩnh cũng có thể vẽ các đường kẻ. Các điểm được gửi qua URL. Ví dụ. ? http: //maps.google.com/staticmap trung tâm = 52.09259895866942,4.310945570468903 & zoom = 17 & size = 300x200 & maptype = vệ tinh & key = 12345 & format = jpg & path = rgba: 0xff0000ff, trọng lượng: 5 | 52.09254128161833,4.309733211994171 | 52.092371545864,4.309856593608856 | 52.092503379515605,4.31052178144455 | 52.092661579383304,4.310438632965088 Điều này vẫn không phải là giải pháp bởi vì nếu tôi có 50 điểm để được vẽ thành các dòng, tôi sẽ nhận được một URL rất lớn sẽ không được chấp nhận. Bất kỳ ý tưởng nào khác? – Dante

+0

50 điểm trên bản đồ tĩnh không phải là rất nhiều. Bạn có 8K để chơi với trên URL đó, do đó, đi hạt! –

+0

đây là [snashotcontrol 2.0] (http://code.google.com/p/snapshotcontrol/) – Timeless

Trả lời

17

Masashi Katsumata đã đưa ra một Snapshot Control mà phải mất một bản chụp của Google Maps với một con đường trên đó và tạo ra một hình ảnh từ nó.

+1

Tôi nghĩ đây là giải pháp "chính thức" đối với vấn đề. – Kensai

+0

Mặc dù nó cho phép anh ta xuất khẩu đa giác một cách dễ dàng, nó vẫn đang sử dụng api bản đồ tĩnh. Nếu bạn muốn bản đồ khi bạn vẽ nó, hãy lưu canvas cũng là một phương thức hợp lệ (xem câu trả lời của tôi) – Arkiliknam

2

Bạn có thể sử dụng ThinkGeo Map Suite. Họ hỗ trợ render hình ảnh từ các dịch vụ của Google, Yahoo hay MS Bản đồ, trong khi bạn có thể vẽ đường nhiều bạn, vv trên bản đồ mà ...

Làm việc với họ Map Suite V3 là một miếng bánh

+1

Gonna nhìn vào nó. Tks cho tip. Dịch vụ – Dante

0

Can not làm điều đó với các API bản đồ, như đã đề cập ở trên, nhưng Yahoo cung cấp một và nó là khá đau để sử dụng.

Yahoo: Map Image API

+0

bị xóa ngày 13 tháng 9 năm 2011 –

8

Sử dụng Google Maps Content ngoài Dịch vụ là một sự vi phạm của Google Maps API Điều khoản sử dụng, vì vậy mặc dù kỹ thuật tồn tại để tạo các bức ảnh chụp, Google không cho phép bạn làm như vậy. Để đạt được chức năng dự định của mình một cách hợp pháp, bạn cần phải sử dụng bản đồ tĩnh (có thể với nội dung bị giảm, đặc biệt nếu người dùng đang sử dụng MSIE có độ dài URL tối đa là khá nhỏ) hoặc Google Maps thực sự nhỏ.

Tôi dường như không có đặc quyền để thêm hoặc chỉnh sửa nhận xét cho câu hỏi, vì vậy tôi sẽ đề cập ở đây rằng giới hạn URL trong ít nhất một số phiên bản MSIE tương thích với Maps là 2083 ký tự, chứ không phải 8k trong hầu hết các trình duyệt khác.

+0

Tks for the alert;) – Dante

+0

Không thực sự là vấn đề, nếu người dùng đang sử dụng bản đồ Google thực để tạo ảnh chụp màn hình ngay từ đầu. – NickG

+0

Bạn sẽ nhận được lỗi 400 từ máy chủ Google nếu URL vượt quá giới hạn kích thước URL ký tự 2048 của họ. Việc bạn sử dụng trình duyệt nào không quan trọng. – Codezilla

3

Nếu bạn muốn lưu nhiều hơn google API tĩnh cho phép (chẳng hạn như lớp phủ tùy chỉnh được vẽ lên nó quá phức tạp/lớn để đi qua chuỗi truy vấn), bạn có thể xuất vùng chứa bản đồ vào canvas bằng cách sử dụng cái gì đó như html2Canvas (http://html2canvas.hertzen.com/), sau đó chuyển đổi nó thành một URL dữ liệu và làm với nó như bạn muốn.

function saveMapToDataUrl() { 

    var element = $("#mapDiv"); 

    html2canvas(element, { 
     useCORS: true, 
     onrendered: function(canvas) { 
      var dataUrl= canvas.toDataURL("image/png"); 

      // DO SOMETHING WITH THE DATAURL 
      // Eg. write it to the page 
      document.write('<img src="' + dataUrl + '"/>'); 
     } 
    }); 
} 

Tôi tin rằng bạn cần đặt tùy chọn useCORS thành true để cho phép chức năng tải xuống hình ảnh từ google.

Nhược điểm của phương pháp này là nó có thể giúp bạn với khoảng một megabyte dữ liệu đang ngồi trên trang của bạn.

Tôi đã cố gắng sử dụng phương pháp này để xuất bản đồ sang hình ảnh để tải xuống, nhưng đã gặp sự cố về cách tải hình ảnh này cho người trong trang viên đẹp. Bạn có thể sử dụng một siêu liên kết có thuộc tính href được đặt thành dataUrl mà bạn đã tạo, nhưng tên tệp không thể được đặt trừ khi bạn sử dụng các thuộc tính HTML như download = "filename.png", đã gây ra sự cố trên các trình duyệt khác nhau đối với tôi. Cách tiếp cận khác là đăng dataUrl lên máy chủ để máy chủ đưa ra món ăn cần thiết, nhưng việc tải lên một hình ảnh lớn chỉ để tải xuống lại có vẻ như là một cách lạ để xử lý việc này.

+0

Cảm ơn bạn đã sử dụng tùy chọn useCORS, sử dụng cùng một html2canvas lib nhưng hình ảnh bản đồ không đến đúng, với tùy chọn useCORS nó đang đến như dự định – shivgre