5

Tôi đã thiết lập Google Map bằng API v3. Bản đồ có một số điểm đánh dấu với hộp thông tin được đính kèm. Tôi đang tìm cách thiết lập một hộp tìm kiếm bên ngoài bản đồ để người dùng nhập địa chỉ và sau đó có các điểm đánh dấu gần nhất được trả về dựa trên khoảng cách xa (chẳng hạn như tìm kiếm bán kính).API Google Maps - Tìm kiếm bán kính cho các điểm đánh dấu bằng cách sử dụng Địa điểm?

Từ tài liệu API Tôi nghĩ rằng tôi cần sử dụng dịch vụ Địa điểm. ai đó có thể chỉ cho tôi phương hướng đúng không?

+0

Bạn chỉ cần sử dụng API địa điểm nếu bạn đang tìm kiếm kết quả từ e Địa điểm API. Nếu bạn đang tìm cách trả lại các điểm đánh dấu của riêng mình, bạn cần triển khai bằng cách sử dụng API Google Maps v3. – geocodezip

+0

Mã hiện tại của bạn trông như thế nào? – geocodezip

Trả lời

14

Để thực hiện tìm kiếm bán kính với API, hãy sử dụng phương pháp Geometry Librarygoogle.maps.geometry.spherical.computeDistanceBetween để tính khoảng cách giữa mỗi điểm đánh dấu và kết quả mã hóa địa lý từ địa chỉ. Nếu khoảng cách đó nhỏ hơn bán kính được yêu cầu, hãy hiển thị điểm đánh dấu, hãy ẩn nó đi.

đang giả định:

  1. mảng của google.maps.Markers gọi gmarkers đối tượng
  2. google.maps.Map gọi là bản đồ

    function codeAddress() { 
        var address = document.getElementById('address').value; 
        var radius = parseInt(document.getElementById('radius').value, 10)*1000; 
        geocoder.geocode({ 'address': address}, function(results, status) { 
        if (status == google.maps.GeocoderStatus.OK) { 
         map.setCenter(results[0].geometry.location); 
         var marker = new google.maps.Marker({ 
         map: map, 
         position: results[0].geometry.location 
         }); 
         if (circle) circle.setMap(null); 
         circle = new google.maps.Circle({center:marker.getPosition(), 
                radius: radius, 
                fillOpacity: 0.35, 
                fillColor: "#FF0000", 
                map: map}); 
         var bounds = new google.maps.LatLngBounds(); 
         for (var i=0; i<gmarkers.length;i++) { 
         if (google.maps.geometry.spherical.computeDistanceBetween(gmarkers[i].getPosition(),marker.getPosition()) < radius) { 
          bounds.extend(gmarkers[i].getPosition()) 
          gmarkers[i].setMap(map); 
         } else { 
          gmarkers[i].setMap(null); 
         } 
         } 
         map.fitBounds(bounds); 
    
        } else { 
         alert('Geocode was not successful for the following reason: ' + status); 
        } 
        }); 
    } 
    

example

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