2017-01-17 2 views
0

Я пытаюсь изменить существующий радиус круга в API Google Maps. Я использую jquery-location-picker, но здесь это легкий фрагмент того, что я пытаюсь сделать:Изменить Google Maps Радиус API

$('#map').locationpicker({ 
      location: { 
       latitude: initLat, 
       longitude: initLon 
      }, 
      radius: initRadius, 
      zoom: initZoom, 
      inputBinding: { 
       latitudeInput: $('#map-lat'), 
       longitudeInput: $('#map-lon'), 
       locationNameInput: $('#map-address'), 
       radiusInput: $('#map-radius') 
      }, 
      onchanged: function (currentLocation, radius, isMarkerDropped) { 
       var mapContext = $('#map').locationpicker('map'); 
       mapContext.marker.setVisible(true); 
       mapContext.map.setZoom(13); 

       //CHANGE RADIUS HERE 
       mapContext.circle.setRadius(###); 

      }, 
      enableAutocomplete: true, 
      addressFormat: 'street_address', 
      autocompleteOptions: { 
       componentRestrictions: { country: 'us' } 
      } 
     }); 

Все остальное в OnChanged событие работает правильно, и я попытался различные вещи нашли here без успеха.

+0

Что такое "###"? Это строка или число? Любой интересный вывод в консоли javascript? – geocodezip

+0

"###" - это число в метрах. Консоль читает: «Uncaught TypeError: невозможно прочитать свойство« setRadius »неопределенного» – MuffinMan

+0

Как я уже отмечал в своем ответе, нет свойства 'circle'' mapContext' – geocodezip

ответ

0

Обнаружено временное решение, не уверен, что оно правильно, но оно работает. Это просто заставляет событие изменения, как если бы пользователь вручную вводил новый радиус, но только если маркер был сброшен или введен новый адрес.

Location: 
<input type="text" id="map-address" style="width: 200px" /> 
Radius: 
<input type="text" id="map-radius" />mi 
<input type="hidden" id="map-lat" /> 
<input type="hidden" id="map-lon" /> 
<div id="map" style="width: 500px; height: 400px;" /> 
<script> 
    var iteration = 0; 
    var initLat = 37.963922; 
    var initLon = -95.966002; 
    var initZoom = 3; 
    var initRadius = 0; 

    $('#map').locationpicker({ 
     location: { 
      latitude: initLat, 
      longitude: initLon 
     }, 
     radius: initRadius, 
     zoom: initZoom, 
     inputBinding: { 
      latitudeInput: $('#map-lat'), 
      longitudeInput: $('#map-lon'), 
      locationNameInput: $('#map-address'), 
      radiusInput: $('#map-radius') 
     }, 
     onchanged: function (currentLocation, radius, isMarkerDropped) { 
      var mapContext = $('#map').locationpicker('map'); 
      mapContext.marker.setVisible(true); 
      mapContext.map.setZoom(13); 

      $("#map-address").change(function(){ 
       iteration = 0; 
      }); 

      if (iteration < 1 && radius > 1) { 
       radius = 1; 
       var map_rad = document.getElementById("map-radius"); 
       map_rad.value = radius; 
       map_rad.dispatchEvent(new Event('change')); 
       iteration++; 
      } 
     }, 
     enableAutocomplete: true, 
     addressFormat: 'street_address', 
     autocompleteOptions: { 
      componentRestrictions: { country: 'us' } 
     } 
    }); 
</script> 

Особая благодарность Miscreant's modern solution.

0

Глядя на source code, похоже, что для доступа к кругу (в текущее время) нет внешнего доступа. Изменение значения связанного с ним ввода изменяет радиус. Код является открытым исходным кодом, поэтому вы можете его изменить, чтобы разрешить прямой доступ к объекту google.maps.Circle.

Смежные вопросы