2015-09-14 14 views
12

Hiện tại tôi đang sử dụng API Google Maps v.3 để vẽ các điểm đánh dấu trên bản đồ. Tôi có tổng cộng khoảng 500 điểm đánh dấu.Đang tải các điểm đánh dấu 100-200K trên bản đồ google

Để hiển thị mục đích, tôi sử dụng markerCluster và đánh dấu nhóm bằng cách sử dụng công cụ này ở phía máy khách trong trình duyệt.

Tuy nhiên, tôi dự định mở rộng số địa điểm và giả sử nó có thể tăng lên 100K hoặc thậm chí 200K một cách nhanh chóng.

Tôi đã thực hiện một số kiểm tra căng thẳng và nhận ra rằng giải pháp hiện tại về cơ bản sẽ giết chết trình duyệt và khoảng 10-20K điểm đánh dấu.

Vì vậy, câu hỏi của tôi là cách tiếp cận tốt nhất để vẽ nhiều điểm đánh dấu (không cần bản đồ google) là gì?

Tôi đã đọc bài viết với những câu hỏi tương tự, ví dụ .:

Showing many markers in Google Maps

Best solution for too many pins on google maps

Về cơ bản người đề nghị sử dụng một số clusterer cho mục đích hiển thị, mà tôi đã sử dụng.

Hoặc sử dụng bảng tổng hợp để truy xuất dữ liệu, đây không phải là một tùy chọn vì dữ liệu phải nằm trên máy chủ của tôi. Ngoài ra tôi cho rằng chức năng hiển thị bị giới hạn với các bảng tổng hợp.

Tôi đang suy nghĩ về việc thực hiện các tình huống sau:

  • trên mỗi trang zoom/tải - gửi yêu cầu ajax với bờ cõi của các điểm trưng bày, thêm khoảng 30% trên tất cả các bên và lấy bút viết bảng, mà chỉ rơi vào vùng địa lý này. 30% được thêm vào trong trường hợp người dùng thu nhỏ, để tôi có thể hiển thị các điểm đánh dấu khác nhanh chóng và sau đó truy tìm thêm ở phần còn lại xung quanh (lãnh thổ rộng hơn)

  • Khi số điểm đánh dấu lớn hơn 50 - thì tôi lên kế hoạch áp dụng phân cụm để hiển thị mục đích. Nhưng khi markerCluster trong javascript khá chậm, cụ thể là không phải markerCluster nhưng bản thân google, vì nó vẫn áp dụng vị trí của tất cả các điểm đánh dấu, tôi định làm cụm ở phía máy chủ bằng cách chia các giới hạn của bản đồ được hiển thị trong khoảng 15 * 15 lưới và thả các điểm đánh dấu vào các ô cụ thể và sau đó về cơ bản gửi đến các cụm máy khách với số lượng điểm đánh dấu bên trong (ví dụ như cho bản đồ nhiệt). Và sau đó hiển thị các cụm làm điểm đánh dấu.

Bạn có thể đưa ra một số thông tin chi tiết về bất kỳ ai đã làm tương tự. Nó có ý nghĩa nói chung không. Hoặc là nó một cách tiếp cận ngu ngốc như yêu cầu ajax sẽ được gửi đến máy chủ trên mỗi bản đồ zoom và thay đổi và về cơ bản quá tải máy chủ với yêu cầu dự phòng?

Điều tôi muốn đạt được là trải nghiệm người dùng tốt đẹp trên các bộ dữ liệu lớn của các điểm đánh dấu (tải trong chưa đầy 2 giây).

+2

Thay vào đó, hãy mang điểm đánh dấu qua cuộc gọi ajax theo lô và vẽ chúng theo lô – sunil

+0

@sunil bạn có thể xây dựng không? Vì vậy, tải hàng loạt cho các khu vực cụ thể và vẽ chúng theo khu vực - nó sẽ là một mớ hỗn độn cho người dùng tôi nghĩ. – Volder

+0

Một cách khác để nghĩ về sơ đồ của bạn là bạn có các ô vector đa cấp trên máy chủ - giống như các ô bản đồ nhưng các "lát" này là vị trí của vị trí đánh dấu/cụm trong một khu vực. Giao diện người dùng yêu cầu "lát" như vậy theo mức thu phóng và mức độ. Các khách hàng có thể cache "gạch" như vậy và do đó có thể không cần phải tải lại với mọi zoom và pan. – headuck

Trả lời

7

Cách tiếp cận của bạn là vững chắc. Nếu có thể, bạn sẽ muốn tính toán trước các cụm và lưu trữ chúng phía máy chủ, với chiến lược cập nhật của chúng được xác định bởi tần suất thay đổi tập dữ liệu cơ bản.

Bản đồ của Google có ~ 20 mức thu phóng, tùy thuộc vào vị trí của bạn trên hành tinh.Tùy thuộc vào cách phân cụm dữ liệu của bạn, nếu bạn có tổng số 200.000 điểm đánh dấu và sẵn sàng hiển thị khoảng 500 trên bản đồ tại một thời điểm nhất định, hãy đếm tất cả các vị trí cụm và điểm đánh dấu ban đầu bạn sẽ chỉ lưu trữ khoảng 2n = 400.000 máy chủ vị trí -side với tất cả các mức thu phóng của bạn kết hợp.

có thể chiến lược cụm cập nhật:

  • Cập nhật trên tất cả các điểm đánh dấu mới được bổ sung. Có thể cho một ứng dụng đọc nhiều chỉ với vài lần viết, nếu bạn cần một mức độ cao về tính kịp thời của dữ liệu.
  • Cập nhật theo một lịch trình
  • kick ra một bản cập nhật if ((có bất kỳ dấu hiệu mới kể từ khi phân nhóm cuối cùng vượt qua & & cache cũ hơn X) || có hơn mốc mới Y kể từ khi vượt qua phân nhóm cuối cùng)

Lưu trữ các điểm đánh dấu này trong cơ sở dữ liệu hỗ trợ dữ liệu địa lý có thể mang lại lợi ích. Điều này cho phép các câu lệnh truy vấn giống SQL.

Phía máy khách, tôi sẽ xem xét tìm nạp lợi nhuận 50% ở hai bên, chứ không phải 30%. Google thu phóng quyền hạn của 2. Điều này sẽ cho phép bạn hiển thị một mức thu phóng đầy đủ.

Tiếp theo, nếu ứng dụng này sẽ sử dụng nhiều và tối ưu hóa đáng giá, tôi sẽ đăng nhập phía máy chủ khi khách hàng phóng to. Hãy cố gắng sử dụng hồ sơ của bạn để bạn có thể xác định xem người dùng có thường xuyên phóng to hay thu nhỏ không. Với số rắn (như "70% người dùng phóng to sau khi truy xuất kết quả ban đầu và 20% thu nhỏ"), bạn có thể xác định xem có nên tải trước lớp dữ liệu được thu phóng tiếp theo cho người dùng của mình hay không, để có được giao diện người dùng đáp ứng.

Các vấn đề liên quan