Cách phân cụm lớp phủ kml Google Maps


8

Tôi có vài nghìn điểm đánh dấu được lưu trữ trong tệp kmz mà tôi tải vào Google Maps (API v3).

Tôi đã nhìn xung quanh để tìm cách phân cụm dữ liệu lớp phủ, nhưng không có kết quả.
MarkerClusterer trông đẹp, nhưng dường như chỉ hoạt động với một mảng đánh dấu?

function initialize() {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(25,-20);
    var myOptions = {
        zoom: 2,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    var ctaLayer = new google.maps.KmlLayer('thedata.kmz');
    ctaLayer.setMap(map);

    //cluster
    var mcOptions = {gridSize: 50, maxZoom: 15};
    var mc = new MarkerClusterer(map, ctaLayer, mcOptions);
}

Làm cách nào tôi có thể phân cụm các điểm đánh dấu trong lớp phủ, giống như markerclusterer không?

Câu trả lời:


5

Tệp KML thực sự được đọc bởi một máy chủ Google, sau đó được phân phát trên bản đồ dưới dạng các ô hình ảnh. Vì vậy, bạn không có quyền truy cập vào các đối tượng điểm thực tế. Nếu bạn muốn thực hiện phân cụm, bạn sẽ phải tải KML theo cách khác và phân tích các điểm thành một mảng, sau đó bạn có thể sử dụng bất kỳ phân cụm phía máy khách nào bạn muốn.

Từ các tài liệu API V3 của Google Maps :

Vì các thành phần trong KmlLayer được hiển thị theo yêu cầu, lớp cho phép bạn dễ dàng quản lý kết xuất của hàng ngàn điểm đánh dấu, polylines và đa giác. Lưu ý rằng bạn không thể truy cập trực tiếp các đối tượng cấu thành này, mặc dù chúng đều cung cấp các sự kiện nhấp để trả về dữ liệu trên các đối tượng riêng lẻ đó.


1
Tôi có khoảng 3500 điểm đánh dấu trong tệp kml / kmz. Sẽ không tốn nhiều bộ nhớ để tải chúng vào một mảng javascript? Ngoài ra, tôi tưởng tượng sẽ mất khá nhiều thời gian để tải các điểm đánh dấu.
reggie

1
Có nhiều giải pháp cho cách tiếp cận phân cụm. Nói chung, các tùy chọn phía máy chủ là tốt nhất. Tuy nhiên, nếu bạn chỉ muốn đi về phía khách hàng, bạn không nhất thiết phải tải tất cả 3500 điểm mọi lúc, ví dụ: bạn chỉ có thể tải chúng cho một tỷ lệ và / hoặc mức độ cụ thể.
Anthony -GISCOE-

1
Vì vậy, một giải pháp phía máy chủ tốt là gì? Sử dụng SimpleXML để tải kml và sau đó xuất ra dưới dạng một mảng (rất lớn) trong javascript google maps?
reggie

1
Sử dụng máy chủ để thực hiện phân cụm (ví dụ: chỉ cần google cho 'phân cụm phía máy chủ google maps'). Sau đó, khách hàng sẽ thực hiện các yêu cầu chỉ lấy điểm cho các vị trí cụm chứ không phải tất cả dữ liệu.
Anthony -GISCOE-

2

Điều này là khả thi. Bạn có thể sử dụng thư viện trình phân tích cú pháp Javascript KML để bạn truy cập vào tất cả dữ liệu trong mỗi điểm đánh dấu.

Trong Maps V2, cái tốt nhất đã có ở đây:

econymous.org.uk/gmap/egeoxml.htm

Trong V3, bạn có thể sử dụng một trong 2:

code.google.com/p/geoxml3/

code.google.com/p/geoxml/

Sau khi được sử dụng, bạn có thể thực hiện những việc như lặp qua từng điểm đánh dấu KML và sử dụng javascript để nhóm các điểm ở cùng một vị trí và sử dụng JS để hiển thị các cửa sổ thông tin khác nhau cho mỗi điểm đánh dấu ở cùng một nơi.

Tôi làm điều đó trên trang web Mapper của tôi ở đây. Nhấp vào điểm đánh dấu được đánh số màu đen để xem nó hoạt động:

http://www.yourmapper.com/map/111/crime-reports/crime-in-metro-louisville-ky-since-jan-2003.htm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.