2011-07-26 47 views
6

Có cách nào để có được phân cụm đánh dấu (tức là makerclusterer) để làm việc với một lớp Fusion Table? Dường như bạn phải gán điểm đánh dấu cho markerclusterer nhưng khi sử dụng một lớp bảng tổng hợp, Google xử lý các dấu/infowindows? Vẫn đang cố gắng tìm ra cái bàn hợp nhất này.Đánh dấu Clustering - Fusion Table Layer - Google Maps v3

Về cơ bản tìm kiếm một cách để cụm lượng lớn các dấu hiệu được cung cấp thông qua một Fusion Bảng

Trả lời

0

Bàn Fusion cho phép bạn xem hàng nghìn điểm cùng một lúc bằng cách sử dụng hiển thị bên máy chủ (từ máy chủ Google). Marker Clusterer giải quyết vấn đề bằng cách xây dựng một nhóm các cụm từ các điểm gần nhất (từ trình duyệt của khách hàng). Tôi sẽ không nhất thiết phải sử dụng chúng cả hai cùng một lúc, nhưng nó có thể làm việc cho trường hợp sử dụng của bạn tùy thuộc vào bạn.

Bạn có thể đọc thêm thông tin về cách họ làm việc ở đây:

http://code.google.com/apis/maps/articles/toomanymarkers.html

Nếu bạn thực sự muốn quá bạn có thể sử dụng API Fusion Bàn để nuôi các dữ liệu từ bảng Fusion để Marker Clusterer.

Hy vọng điều này sẽ hữu ích.

1

Tôi không nghĩ rằng bạn sẽ nhận được nó làm việc với một bảng nhiệt hạch. IMO bảng tổng hợp là thiếu sự hỗ trợ cho một chỉ số không gian. Một si giúp giảm độ phức tạp 2d đến độ phức tạp 1d. Nó sử dụng trong rất nhiều ứng dụng như heatmaps, treemaps, tìm kiếm mã bưu điện, ứng dụng bản đồ. Bạn muốn tìm kiếm blog của chỉ số không gian đường cong không gian của hilbert.

5

Lớp bảng kết hợp hiển thị hình ảnh png bổ sung cho mỗi ô xếp chồng lên trên cùng của ô bản đồ, chứa các điểm dữ liệu cho ô đó, đây là phần hiển thị phía máy chủ. Vì vậy, đó là nhiều điểm dữ liệu trên mỗi ô có chứa điểm dữ liệu.

MapsIt.png map tile with data points already positioned on the layer

Tạo dấu riêng của bạn từ dữ liệu, đó là cần thiết cho MarkerClusterer, không che phủ một hình ảnh mỗi gạch, nó tạo ra một Marker cá nhân trên bản đồ cho mỗi điểm dữ liệu và lớp một hình ảnh ma vào cái đó.

Marker Sprite image used for each data point

Dựa trên điều này, nó không phải là có thể sử dụng MarkerClusterer và FusionTablesLayer.

+0

Ran qua bài đăng này nghiên cứu này cho bản thân mình. Nghĩ rằng tôi để lại một bình luận rằng có, có thể theo Nhóm Google Fusion Tables. [https://groups.google.com/d/msg/fusion-bảng-người dùng-nhóm/eW-der8-diM/UnaqHkpgeDcJ] – danagerous

+0

@danagerous Có một sự khác biệt lớn giữa việc thực hiện nó trên FusionTablesLayer và sử dụng dữ liệu từ Fusion Table như bài viết mà bạn đã đề cập đến. Có thể làm điều đó bằng cách sử dụng dữ liệu từ Fusion Table, vẫn không thể thực hiện nó bằng FusionTablesLayer được trả về phía máy chủ. Họ sẽ phải tạo một Lớp các mục được nhóm ở mỗi mức thu phóng ở phía máy chủ. – Freddy

+0

@danagerous liên kết của bạn dường như bị hỏng. Bạn có người thay thế không? – tentaclenorm

5

Đây là mã của riêng tôi. Tôi đã thử kỹ thuật trong liên kết trước nhưng nó không hiệu quả với tôi. Vì vậy, đây là cách tôi đã làm nó.

Đầu tiên tôi truy vấn bảng fusion với truy vấn api biểu đồ thường xuyên

function initialize() { 
    mapMain = new google.maps.Map(document.getElementById('map-canvas'), { 
     center: new google.maps.LatLng(37.4, -100.1), 
     zoom: 3, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 
    mc = new MarkerClusterer(mapMain); 
    var queryText = encodeURIComponent("select wikipedia_article, xy from "+tableid); 
    var query = new google.visualization.Query("https://www.google.com/fusiontables/gvizdata?tq="+queryText); 
    query.send(handleQueryResponse); 
} 

dấu Tiếp theo, trong handleQueryResponse của tôi, tôi tự động tạo ra và thêm nó vào Mapclusterer

function handleQueryResponse(response){ 
    dataTable = response.getDataTable(); 

    for(var i=0; i< dataTable.getNumberOfRows();i++){   
     var hrefval = dataTable.getValue(i,0).toString(); 

     var arr = dataTable.getValue(i,1).toString().split(" ");    
     var latlng = new google.maps.LatLng(arr[0], arr[1]); 

     var marker = new google.maps.Marker({ 
      position: latlng, 
      map:mapMain 
     }); 
     fn = markerClick(i, marker); 
     google.maps.event.addListener(marker,'click', fn);   
     markers.push(marker); 
    } 
    mc.addMarkers(markers); 
} 

Trong trường hợp này, bản đồ chính, mảng đánh dấu (mc trong mã bên dưới) là các biến toàn cầu. Bạn có thể xem ví dụ làm việc đầy đủ here.

+2

Bạn có thể tóm tắt những gì họ đã thực hiện trên trang web đó để câu trả lời của bạn không phải tuân theo thối liên kết? – user7116

+0

Điều này thật thú vị, tôi muốn làm tương tự với các dấu KML được nạp trong FusionTableLayer. Bạn có ví dụ nào không? –

+0

Tôi đã làm điều này thời gian dài trở lại, đã không thực hiện bất kỳ bản đồ google dựa trên công việc kể từ đó. – Ayush

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