Populate the longitude and latitude using google maps API

前端 未结 1 1158
有刺的猬
有刺的猬 2021-01-24 13:51

I have the following html and javascript. The javascript populates location details from the google maps api to the html form fields. The idea is someone to enter their original

相关标签:
1条回答
  • 2021-01-24 14:02

    You don't have any code to populate the latitude and longitude fields. Add this to fillInAddress:

    document.getElementById('latitude'+unique).value = place.geometry.location.lat();
    document.getElementById('longitude'+unique).value = place.geometry.location.lng();
    

    complete function:

    function fillInAddress(autocomplete, unique) {
      // Get the place details from the autocomplete object.
      var place = autocomplete.getPlace();
    
      for (var component in componentForm) {
        if (!!document.getElementById(component + unique)) {
          document.getElementById(component + unique).value = '';
          document.getElementById(component + unique).disabled = false;
        }
      }
    
      // Get each component of the address from the place details
      // and fill the corresponding field on the form.
      for (var i = 0; i < place.address_components.length; i++) {
        var addressType = place.address_components[i].types[0];
        if (componentForm[addressType] && document.getElementById(addressType + unique)) {
          var val = place.address_components[i][componentForm[addressType]];
          document.getElementById(addressType + unique).value = val;
        }
      }
      document.getElementById('latitude'+unique).value = place.geometry.location.lat();
      document.getElementById('longitude'+unique).value = place.geometry.location.lng();
    }
    

    proof of concept fiddle

    code snippet:

    // This example displays an address form, using the autocomplete feature
    // of the Google Places API to help users fill in the information.
    
    var placeSearch, autocomplete, autocomplete2;
    var componentForm = {
      street_number: 'short_name',
      route: 'long_name',
      locality: 'long_name',
      administrative_area_level_1: 'short_name',
      country: 'long_name',
      postal_code: 'short_name'
    };
    
    function initAutocomplete() {
      // Create the autocomplete object, restricting the search to geographical
      // location types.
      autocomplete = new google.maps.places.Autocomplete(
        /** @type {!HTMLInputElement} */
        (document.getElementById('autocomplete')), {
          types: ['geocode']
        });
    
      // When the user selects an address from the dropdown, populate the address
      // fields in the form.
      autocomplete.addListener('place_changed', function() {
        fillInAddress(autocomplete, "");
      });
    
      autocomplete2 = new google.maps.places.Autocomplete(
        /** @type {!HTMLInputElement} */
        (document.getElementById('autocomplete2')), {
          types: ['geocode']
        });
      autocomplete2.addListener('place_changed', function() {
        fillInAddress(autocomplete2, "2");
      });
    
    }
    
    function fillInAddress(autocomplete, unique) {
      // Get the place details from the autocomplete object.
      var place = autocomplete.getPlace();
    
      for (var component in componentForm) {
        if (!!document.getElementById(component + unique)) {
          document.getElementById(component + unique).value = '';
          document.getElementById(component + unique).disabled = false;
        }
      }
    
      // Get each component of the address from the place details
      // and fill the corresponding field on the form.
      for (var i = 0; i < place.address_components.length; i++) {
        var addressType = place.address_components[i].types[0];
        if (componentForm[addressType] && document.getElementById(addressType + unique)) {
          var val = place.address_components[i][componentForm[addressType]];
          document.getElementById(addressType + unique).value = val;
        }
      }
      document.getElementById('latitude' + unique).value = place.geometry.location.lat();
      document.getElementById('longitude' + unique).value = place.geometry.location.lng();
    
    }
    google.maps.event.addDomListener(window, "load", initAutocomplete);
    
    function geolocate() {
        if (navigator.geolocation) {
          navigator.geolocation.getCurrentPosition(function(position) {
            var geolocation = {
              lat: position.coords.latitude,
              lng: position.coords.longitude
            };
            var circle = new google.maps.Circle({
              center: geolocation,
              radius: position.coords.accuracy
            });
            autocomplete.setBounds(circle.getBounds());
          });
        }
      }
      // [END region_geolocation]
    <script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script>
    <div id="locationField">
      <input id="autocomplete" placeholder="Start typing your address" onFocus="geolocate()" type="text" />
    </div>
    <div id="addressone">
      <input type="text" id="street_number" name="street_number" />
      <input type="text" id="route" name="street_name" />
      <input type="text" id="locality" name="town_city" />
      <input type="text" id="administrative_area_level_1" name="administrative_area_level_1" />
      <input type="text" id="postal_code" name="postcode" />
      <input type="text" id="country" name="country" />
      <input type="text" id="longitude" name="longitude" />
      <input type="text" id="latitude" name="latitude" />
    
    </div>
    <div id="locationField2">
      <input id="autocomplete2" placeholder="Start typing your address" onFocus="geolocate()" type="text" />
    </div>
    <div id="addresstwo">
      <input type="text" id="street_number2" name="street_number2" />
      <input type="text" id="route2" name="street_name2" />
      <input type="text" id="locality2" name="town_city2" />
      <input type="text" id="administrative_area_level_12" name="administrative_area_level_12" />
      <input type="text" id="postal_code2" name="postcode2" />
      <input type="text" id="country2" name="country2" />
      <input type="text" id="longitude2" name="longitude2" />
      <input type="text" id="latitude2" name="latitude2" />
    </div>

    0 讨论(0)
提交回复
热议问题