2009-04-30 39 views
7

Sau khi thử nghiệm với cách tiếp cận phía máy khách để phân cụm số lượng lớn các điểm đánh dấu của Google, tôi quyết định không thể thực hiện dự án của mình (mạng xã hội với 28.000 người dùng).Clustering Google Markers Clustering - Python/Django

Có ví dụ về phân cụm tọa độ ở phía máy chủ hay không - tốt nhất là trong Python/Django?

Cách tôi muốn điều này hoạt động là dần dần lập chỉ mục các điểm đánh dấu dựa trên khoảng cách (bán kính) và mức thu phóng của chúng.

Nói cách khác khi người dùng mới đăng ký, người đó sẽ tự động được gán cho một 'nhóm' nhất định của các điểm đánh dấu gần nhau, do đó tăng bộ đếm 'nhóm'. Những gì đang được gửi đến máy chủ chỉ là một số lượng nhỏ của 'nhóm'. Chỉ khi mức thu phóng/tỷ lệ bản đồ là 1: 1 - người dùng thực tế được hiển thị trên bản đồ.

Bằng cách đó, phía khách hàng sẽ chỉ phải đối phó với 10-50 điểm đánh dấu theo yêu cầu/mức thu phóng.

Trả lời

-5

tôi đã viết một bài đăng blog về cách tiếp cận của tôi sử dụng Python và Django đây:

http://www.quanative.com/2010/01/01/server-side-marker-clustering-for-google-maps-with-python/

+2

Có vẻ như liên kết đã bị hỏng. Vui lòng chỉnh sửa câu trả lời của bạn để sửa liên kết hoặc xóa liên kết, cũng như tóm tắt thông tin trong liên kết. Nếu nó phá vỡ một lần nữa, câu trả lời này sẽ tiếp tục hữu ích. Liên kết –

+0

bị hỏng: ( – nivcaner

+0

Tên miền hết hạn, tôi không quan tâm đến nghệ thuật người Mỹ bản địa. – twig

0

Một cách để thực hiện điều đó là xác định lưới có kích thước đơn vị dựa trên mức thu phóng. Vì vậy, bạn thu thập tất cả các mục trong lưới bởi lat, lon đến một chữ số thập phân. Một ví dụ là 42.2x73.4. Vì vậy, một điểm tại 42.2003x73.4021 rơi vào ô lưới đó. Ô đó bị chặn bởi 42.2x73.3 và 42.2x73.5.

Nếu có một hoặc nhiều điểm trong ô lưới, bạn đặt điểm đánh dấu ở giữa lưới đó.

Bạn sau đó kết nối sự kiện zoomend và thay đổi kích thước lưới của bạn cho phù hợp và vẽ lại điểm đánh dấu.

http://code.google.com/apis/maps/documentation/reference.html#GMap2.zoomend

+0

Điều này sẽ không chậm khi toàn bộ bản đồ cần hiển thị và bạn có 30k điểm đánh dấu để tải? – Franek

2

This là một dịch vụ thanh toán có sử dụng server-side clustering, nhưng tôi không chắc chắn làm thế nào nó hoạt động. Tôi đoán rằng họ chỉ sử dụng dữ liệu của bạn để tạo các điểm đánh dấu được hiển thị ở mỗi mức thu phóng.

Cập nhật:This tutorial thể hiện chức năng phân cụm phía máy chủ cơ bản. Nó được viết bằng PHP cho API bản đồ tĩnh, nhưng bạn có thể sử dụng nó làm điểm bắt đầu.

+0

Tôi biết về dịch vụ của họ nhưng tôi muốn có toàn quyền kiểm soát mã. – Franek

+0

hướng dẫn hữu ích nhưng thuật toán có thể quá chậm đối với 28.000 điểm. clustering dựa trên một lưới là vụng về nhưng rõ ràng là nhanh hơn rất nhiều. – Tom

+0

@Tom - một thuật toán như thế này chắc chắn sẽ quá chậm ở phía máy khách, nhưng tôi nghĩ nó có thể là phía máy chủ. –

0

Bạn có thể chỉ cần thả số thập phân dựa trên mức thu phóng. bạn có muốn công việc kia?

Chỉ mục địa lý của chúng tôi dựa trên số điện thoại: http://www.rooftopsolutions.nl/article/231 (quảng cáo tự quảng cáo không biết xấu hổ).

Nếu bạn muốn chính xác hơn so với hệ thống 10-base, số morton sẽ cho phép bạn tăng mức độ zoom trên một hệ thống số 2-base, chỉ đơn giản bằng cách làm một cái gì đó như:

GROUP BY (morton XOR (-precision))

Độ chính xác càng cao, càng nhiều mục sẽ được nhóm lại.

0

Tôi đang sử dụng Django và Python để nhóm danh sách bất động sản và cho thuê và nguồn có thể được tìm thấy here.

Hy vọng điều đó sẽ hữu ích!

1

Bạn có thể muốn có một cái nhìn tại DBSCANOPTICS trang trên wikipedia, những vẻ rất thích hợp cho những nơi phân nhóm trên bản đồ. Ngoài ra còn có một trang về Cluster Analysis hiển thị tất cả các thuật toán có thể bạn có thể sử dụng, hầu hết sẽ là tầm thường để triển khai bằng ngôn ngữ bạn chọn.

Với 28k + điểm, bạn có thể muốn bỏ qua django và chỉ cần chuyển trực tiếp vào C/C++ và chắc chắn không mong đợi điều này được tính theo thời gian thực theo yêu cầu web.

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