2012-01-07 40 views
16

Tôi có điểm đánh dấu rải rác xung quanh bản đồ và bán kính (vòng tròn lớp phủ) trên điểm đánh dấu đánh dấu vị trí của bạn (thay đổi mỗi khi bạn di chuyển). Có cách nào tôi có thể kiểm tra xem các điểm đánh dấu khác có nằm trong vòng kết nối không?Phát hiện nếu điểm đánh dấu nằm trong lớp phủ vòng tròn trên Google Maps (Javascript API V3)

CẬP NHẬT

tôi xung quanh này bằng cách lặp qua từng điểm đánh dấu khác, và sử dụng thư viện hình học tính toán khoảng cách giữa điểm đánh dấu của bạn và đánh dấu khác và sau đó một đơn giản câu lệnh if để xem nếu nó là ít hơn 100 mét.

function checkAllChests() { 
    var Current = 0; 
    $.each(treasureArray, function() { 
     //var thisLocation = treasureArray[Current].getPosition(); 

     var distanceBetween = Math.ceil(google.maps.geometry.spherical.computeDistanceBetween(treasureArray[Current].getPosition(), marker_me.getPosition())); 
     if(distanceBetween < 100) { 
      alert('CAN OPEN THIS CHEST'); 
     } 
     Current++; 
    }); 
} 

Tôi muốn lưu ý rằng mã trên sử dụng jQuery, vì vậy nếu bạn không sử dụng jQuery, nó sẽ không hoạt động.

+0

Bạn nên đăng các giải pháp như một câu trả lời cho câu hỏi của riêng bạn – duncan

Trả lời

45

Đây là cách thêm phương thức contains vào lớp google.maps.Circle. Đầu tiên nó sử dụng hộp giới hạn để loại trừ một điểm nếu nó không nằm trong hộp giới hạn. Nếu nó nằm trong hộp giới hạn, thì nó so sánh khoảng cách từ điểm đến tâm với bán kính, và trả về true chỉ khi khoảng cách ngắn hơn bán kính.

Khi bạn thêm javascript bên dưới, bạn có thể gọi phương thức contains() trên đối tượng vòng tròn của mình.

google.maps.Circle.prototype.contains = function(latLng) { 
    return this.getBounds().contains(latLng) && google.maps.geometry.spherical.computeDistanceBetween(this.getCenter(), latLng) <= this.getRadius(); 
} 
+0

Tại sao không chỉ tính toán khoảng cách và so sánh với bán kính? – zavidovych

+0

Việc tính toán giới hạn là tính toán rẻ hơn nhiều (chỉ sử dụng <= and > =), vì vậy hãy sử dụng nó để loại trừ bất kỳ vòng kết nối nào trước khi thực hiện phép tính khoảng cách đắt hơn trên các vòng tròn gần (khoảng cách hình cầu phức tạp, khoảng cách pythagore xa hơn) vẫn còn tương đối đắt) – Mark

+0

Bạn có phương pháp tương tự cho hình chữ nhật không? –

-4
google.maps.Circle.prototype.contains = function(latLng) { 
    return this.getBounds().contains(latLng) && google.maps.geometry.spherical.computeDistanceBetween(this.getCenter(), latLng) <= this.getRadius(); 
} 
+5

1. Không chỉ đổ mã mà không giải thích. 2. Trước khi trả lời, hãy kiểm tra các câu trả lời khác. Mã này đã có mặt trong một câu trả lời khác. –

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