2012-06-27 40 views
7

Tôi có bản đồ có các điểm đánh dấu khác nhau và tôi cần có thể vẽ hình chữ nhật trên bản đồ và chọn các điểm đánh dấu nằm trong giới hạn hình chữ nhật.kiểm tra xem điểm đánh dấu bản đồ có nằm trong giới hạn đã chọn

Cho đến nay tôi đã tìm được một số thông tin tuyệt vời ở đây: How to get markers inside an area selected by mouse drag?

tôi đã thực hiện các plugin keymapzoom ok. như vậy

$('#dispatcher').gmap3({action:'get'}).enableKeyDragZoom({ 
     boxStyle: { 
      border: "dashed black", 
      //backgroundColor: "red", 
      opacity: 0.5 
     }, 
     paneStyle: { 
      backgroundColor: "gray", 
      opacity: 0.2 
     } 
    }); 
var dz = $('#dispatcher').gmap3({action:'get'}).getDragZoomObject(); 
google.maps.event.addListener(dz, 'dragend', function (bnds) { 
    alert(bnds); 
}); 

này mang lại cho tôi những điều sau ((lat, dài), (lat, dài)) định dạng từ alert (bnds);

Tôi cần biết làm thế nào bây giờ tôi có thể kiểm tra xem có bất kỳ điểm đánh dấu nào nằm trong phạm vi này không?

Tôi đã có một đối tượng lưu trữ các điểm đánh dấu vì một lý do khác. như:

markers[name] = {}; 
    markers[name].lat = lati; 
    markers[name].lng = longi; 

có thể hữu ích?

Tôi không hiểu cách sử dụng GLatLngBounds và containsLatLng (latlng: GLatLng) như được đề xuất.

Trả lời

3

Box/Rectangle Draw Selection in Google Maps

Đây là giải pháp của tôi ..

 google.maps.event.addListener(dz, 'dragend', function(e) { //important listener   
     for(var i = 0; i < markers.length; i++){ // looping through my Markers Collection  
     if(e.contains(markers[i].position)) 
      console.log("Marker"+ i +" - matched"); 
     }   
    }); 
10

Câu hỏi của bạn được gắn thẻ với phiên bản v3 của API Maps, vì vậy tôi cho rằng bạn đang sử dụng phiên bản đó (bạn nên sử dụng phiên bản v2). Lưu ý rằng một số lớp và phương thức được đặt tên khác với câu hỏi của bạn.

Giới hạn được thể hiện bằng lớp LatLngBounds. Bạn có thể thực hiện phương thức contains trên một cá thể của lớp đó để xác định xem một điểm nằm trong giới hạn đó hay không.

Nếu bạn có một đối tượng với tất cả các dấu hiệu, bạn có thể vòng qua chúng và kiểm tra từng điểm đánh dấu, ví dụ:

var bounds = new google.maps.LatLngBounds(sw, ne); 
for (var a in markers) { 
    if (bounds.contains(new google.maps.LatLng(markers[a].lat, markers[a].lng)) { 
     // marker is within bounds 
    } 
} 

Trên một mặt lưu ý, tôi sẽ lưu trữ các đối tượng LatLng trong các dấu hiệu phản đối khi tạo ra chúng. Bằng cách đó bạn không cần phải tạo chúng bất cứ nơi nào bạn cần.

+0

có v3 api của nó. cảm ơn bạn đã trả lời Peter. vì vậy tôi có thể sử dụng var bounds = new google.maps.LatLngBounds (bnds); ? –

+0

Nhà xây dựng có 2 đối số: phía tây nam và đông bắc. Chỉ cần nhấp vào liên kết tôi đã cung cấp. –

+0

tôi thấy, vì vậy làm thế nào tôi có thể nhận được các đối số sw và ne từ đầu ra bnds của tôi? –

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