Geocoding Service
/**
* @license
* Copyright 2019 Google LLC. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
let map;
let marker;
let geocoder;
let responseDiv;
let response;
function initMap() {
map = new google.maps.Map(document.getElementById(«map»), {
zoom: 8,
center: { lat: -34.397, lng: 150.644 },
mapTypeControl: false,
});
geocoder = new google.maps.Geocoder();
const inputText = document.createElement(«input»);
inputText.type = «text»;
inputText.placeholder = «Enter a location»;
const submitButton = document.createElement(«input»);
submitButton.type = «button»;
submitButton.value = «Geocode»;
submitButton.classList.add(«button», «button-primary»);
const clearButton = document.createElement(«input»);
clearButton.type = «button»;
clearButton.value = «Clear»;
clearButton.classList.add(«button», «button-secondary»);
response = document.createElement(«pre»);
response.id = «response»;
response.innerText = «»;
responseDiv = document.createElement(«div»);
responseDiv.id = «response-container»;
responseDiv.appendChild(response);
const instructionsElement = document.createElement(«p»);
instructionsElement.id = «instructions»;
instructionsElement.innerHTML =
«
Instructions: Enter an address in the textbox to geocode or click on the map to reverse geocode.»;
map.controls[google.maps.ControlPosition.TOP_LEFT].push(inputText);
map.controls[google.maps.ControlPosition.TOP_LEFT].push(submitButton);
map.controls[google.maps.ControlPosition.TOP_LEFT].push(clearButton);
map.controls[google.maps.ControlPosition.LEFT_TOP].push(
instructionsElement
);
map.controls[google.maps.ControlPosition.LEFT_TOP].push(responseDiv);
marker = new google.maps.Marker({
map,
});
map.addListener(«click», (e) => {
geocode({ location: e.latLng });
});
submitButton.addEventListener(«click», () =>
geocode({ address: inputText.value })
);
clearButton.addEventListener(«click», () => {
clear();
});
clear();
}
function clear() {
marker.setMap(null);
}
function geocode(request) {
clear();
geocoder
.geocode(request)
.then((result) => {
const { results } = result;
map.setCenter(results[0].geometry.location);
marker.setPosition(results[0].geometry.location);
marker.setMap(map);
response.innerText = JSON.stringify(result, null, 2);
return results;
})
.catch((e) => {
alert(«Geocode was not successful for the following reason: » + e);
});
}
window.initMap = initMap;
/**
* @license
* Copyright 2019 Google LLC. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
/**
* Always set the map height explicitly to define the size of the div element
* that contains the map.
*/
#map {
height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
input[type=»text»] {
background-color: #fff;
border: 0;
border-radius: 2px;
box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3);
margin: 10px;
padding: 0 0.5em;
font: 400 18px Roboto, Arial, sans-serif;
overflow: hidden;
line-height: 40px;
margin-right: 0;
min-width: 25%;
}
input[type=»button»] {
background-color: #fff;
border: 0;
border-radius: 2px;
box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3);
margin: 10px;
padding: 0 0.5em;
font: 400 18px Roboto, Arial, sans-serif;
overflow: hidden;
height: 40px;
cursor: pointer;
margin-left: 5px;
}
input[type=»button»]:hover {
background: rgb(235, 235, 235);
}
input[type=»button»].button-primary {
background-color: #1a73e8;
color: white;
}
input[type=»button»].button-primary:hover {
background-color: #1765cc;
}
input[type=»button»].button-secondary {
background-color: white;
color: #1a73e8;
}
input[type=»button»].button-secondary:hover {
background-color: #d2e3fc;
}
#response-container {
background-color: #fff;
border: 0;
border-radius: 2px;
box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3);
margin: 10px;
padding: 0 0.5em;
font: 400 18px Roboto, Arial, sans-serif;
overflow: hidden;
overflow: auto;
max-height: 50%;
max-width: 90%;
background-color: rgba(255, 255, 255, 0.95);
font-size: small;
}
#instructions {
background-color: #fff;
border: 0;
border-radius: 2px;
box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3);
margin: 10px;
padding: 0 0.5em;
font: 400 18px Roboto, Arial, sans-serif;
overflow: hidden;
padding: 1rem;
font-size: medium;
}