I am trying to integrate this Place Form into this AutoFill address form . But I could not do both work. Currently, it works only with the full form of the address, downloads maps, but does not automatically indicate the entered location. Please help me with this. I am new to javascript. This is the fiddle I'm working on: http://jsfiddle.net/qrAGU/ . I will be very grateful for your help.
JS:
var placeSearch, autocomplete;
var componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
country: 'long_name',
postal_code: 'short_name'
};
function initialize() {
var mapOptions = {
center: new google.maps.LatLng(-33.8688, 151.2195),
zoom: 13
};
var map = new google.maps.Map(document.getElementById('map-canvas'),
mapOptions);
var input = (
document.getElementById('autocomplete'));
autocomplete = new google.maps.places.Autocomplete(
input,
{
types: ['geocode']
}
);
google.maps.event.addListener(autocomplete, 'place_changed', function() {
fillInAddress();
infowindow.close();
marker.setVisible(false);
autocomplete.bindTo('bounds', map);
var place = autocomplete.getPlace();
if (!place.geometry) {
return;
}
});
if (place.geometry.viewport) {
map.fitBounds(place.geometry.viewport);
} else {
map.setCenter(place.geometry.location);
map.setZoom(17);
}
marker.setIcon(({
url: place.icon,
size: new google.maps.Size(71, 71),
origin: new google.maps.Point(0, 0),
anchor: new google.maps.Point(17, 34),
scaledSize: new google.maps.Size(35, 35)
}));
marker.setPosition(place.geometry.location);
marker.setVisible(true);
var address = '';
if (place.address_components) {
address = [
(place.address_components[0] && place.address_components[0].short_name || ''),
(place.address_components[1] && place.address_components[1].short_name || ''),
(place.address_components[2] && place.address_components[2].short_name || '')
].join(' ');
}
infowindow.setContent('<div><strong>' + place.name + '</strong><br>' + address);
infowindow.open(map, marker);
function setupClickListener(id, types) {
var radioButton = document.getElementById(id);
google.maps.event.addDomListener(radioButton, 'click', function() {
autocomplete.setTypes(types);
});
}
}
google.maps.event.addDomListener(window, 'load', initialize);
function fillInAddress() {
var place = autocomplete.getPlace();
for (var component in componentForm) {
document.getElementById(component).value = '';
document.getElementById(component).disabled = false;
}
for (var i = 0; i < place.address_components.length; i++) {
var addressType = place.address_components[i].types[0];
if (componentForm[addressType]) {
var val = place.address_components[i][componentForm[addressType]];
document.getElementById(addressType).value = val;
}
}
}
function geolocate() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var geolocation = new google.maps.LatLng(
position.coords.latitude, position.coords.longitude);
autocomplete.setBounds(new google.maps.LatLngBounds(geolocation,
geolocation));
});
}
}
HTML
<div id="locationField">
<input id="autocomplete" placeholder="Enter your address" onFocus="geolocate()" type="text" class="controls"></input>
</div>
<table id="address">
<tr>
<td class="label">Street address</td>
<td class="slimField">
<input class="field" id="street_number" disabled="true"></input>
</td>
<td class="wideField" colspan="2">
<input class="field" id="route" disabled="true"></input>
</td>
</tr>
<tr>
<td class="label">City</td>
<td class="wideField" colspan="3">
<input class="field" id="locality" disabled="true"></input>
</td>
</tr>
<tr>
<td class="label">Zip code</td>
<td class="wideField">
<input class="field" id="postal_code" disabled="true"></input>
</td>
</tr>
<tr>
<td class="label">Country</td>
<td class="wideField" colspan="3">
<input class="field" id="country" disabled="true"></input>
</td>
</tr>
</table>
<div id="map-canvas"></div>
source
share