8

API v3 を使用して Google マップをセットアップしました。マップには、インフォボックスが添付された多数のマーカーがあります。ユーザーが住所を入力できるように地図の外に検索ボックスを設定し、距離に基づいて最も近いマーカーを返すことを検討しています (半径検索など)。

API ドキュメントから、Places サービスを使用する必要があると思います。誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

23

API で半径検索を行うには、Geometry Library google.maps.geometry.spherical.computeDistanceBetweenメソッドを使用して、各マーカーと住所からジオコーディングされた結果との間の距離を計算します。その距離が要求された半径よりも小さい場合はマーカーを表示し、そうでない場合は非表示にします。

コードは次のことを前提としています。

  1. gmarkers と呼ばれる google.maps.Markers の配列
  2. map と呼ばれる google.maps.Map オブジェクト

    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);
        }
      });
    }
    

于 2013-08-21T18:55:44.780 に答える