How to add a Leaflet map with address autocomplete field
The code sample show how to add a map with address search to a website, including CMS websites like Wordpress
by Geoapify
HTML
<script src="https://unpkg.com/@geoapify/[email protected]/dist/index.min.js"></script>
<link rel="stylesheet" href="https://unpkg.com/@geoapify/[email protected]/styles/minimal.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.css">
<div id="map"></div>
<div class="autocomplete-panel">
<div id="autocomplete" class="autocomplete-container"></div>
</div>
CSS
.autocomplete-panel {
position: absolute;
top: 10px;
left: 10px;
width: 400px;
z-index: 1000;
}
.autocomplete-container {
position: relative;
}
html,
body,
#map {
width: 100%;
height: 100%;
margin: 0;
}
JavaScript
// The API Key provided is restricted to JSFiddle website
// Get your own API Key on https://myprojects.geoapify.com
const myAPIKey = "6dc7fb95a3b246cfa0f3bcef5ce9ed9a";
// The Leaflet map Object
const map = L.map('map', {zoomControl: false}).setView([38.908838755401035, -77.02346458179596], 12);
// Retina displays require different mat tiles quality
const isRetina = L.Browser.retina;
const baseUrl = "https://maps.geoapify.com/v1/tile/osm-bright/{z}/{x}/{y}.png?apiKey={apiKey}";
const retinaUrl = "https://maps.geoapify.com/v1/tile/osm-bright/{z}/{x}/{y}@2x.png?apiKey={apiKey}";
// Add map tiles layer. Set 20 as the maximal zoom and provide map data attribution.
L.tileLayer(isRetina ? retinaUrl : baseUrl, {
attribution: 'Powered by <a href="https://www.geoapify.com/" target="_blank">Geoapify</a> | <a href="https://openmaptiles.org/" rel="nofollow" target="_blank">© OpenMapTiles</a> <a href="https://www.openstreetmap.org/copyright" rel="nofollow" target="_blank">© OpenStreetMap</a> contributors',
apiKey: myAPIKey,
maxZoom: 20,
id: 'osm-bright'
}).addTo(map);
// add a zoom control to bottom-right corner
L.control.zoom({
position: 'bottomright'
}).addTo(map);
// check the available autocomplete options on the https://www.npmjs.com/package/@geoapify/geocoder-autocomplete
const autocompleteInput = new autocomplete.GeocoderAutocomplete(
document.getElementById("autocomplete"),
myAPIKey,
{ /* Geocoder options */ });
// generate an marker icon with https://apidocs.geoapify.com/playground/icon
const markerIcon = L.icon({
iconUrl: `https://api.geoapify.com/v1/icon/?type=awesome&color=%232ea2ff&size=large&scaleFactor=2&apiKey=${myAPIKey}`,
iconSize: [38, 56], // size of the icon
iconAnchor: [19, 51], // point of the icon which will correspond to marker's location
popupAnchor: [0, -60] // point from which the popup should open relative to the iconAnchor
});
let...