when I search city in search bar than another city it show marker and circle on both location previous city and current city like so. if u see picture it will tell you what i am saying. help me to imporve the code.
JavaScript
x
38
38
1
<div class="container-fluid d-flex flex-column align-items-center area">
2
<div class="search-area">
3
<input type="text" placeholder="City" id="search">
4
<button id="clickme" type="button">Search</button>
5
</div>
6
7
<div id="map"></div>
8
</div>
9
10
11
12
clickme.addEventListener("click",my=(e)=>{
13
e.preventDefault();
14
var city=search.value;
15
fetch(`https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=ac3673a8887645fc3d0493904a348e03`)
16
.then(response=> response.json())
17
.then(data=>{
18
var lat=data.coord.lat;
19
var long=data.coord.lon;
20
var udata=data.name;
21
var latlng = L.latLng(lat, long);
22
map.panTo([lat,long],13);
23
var circle = L.circle([lat, long], {
24
color: 'red',
25
fillColor: '#f03',
26
fillOpacity: 0.5,
27
radius: 1000
28
}).addTo(map);
29
var marker= L.marker(latlng).addTo(map)
30
var popup = L.popup()
31
.setLatLng(latlng)
32
.setContent(udata)
33
.openOn(map);
34
console.log(data.name);
35
36
});
37
});
38
Advertisement
Answer
You would need to clear the previous layer from the map instance. You can try creating a layer group and add the layer to/remove it from that (DOCS):
JavaScript
1
36
36
1
// Create a layer group
2
const layerGroup = L.layerGroup().addTo(map)
3
4
clickme.addEventListener("click",my=(e)=>{
5
e.preventDefault();
6
var city=search.value;
7
fetch(`https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=ac3673a8887645fc3d0493904a348e03`)
8
.then(response=> response.json())
9
.then(data=>{
10
11
// Clear the layer group
12
layerGroup.clearLayers()
13
14
var lat=data.coord.lat;
15
var long=data.coord.lon;
16
var udata=data.name;
17
var latlng = L.latLng(lat, long);
18
map.panTo([lat,long],13);
19
var circle = L.circle([lat, long], {
20
color: 'red',
21
fillColor: '#f03',
22
fillOpacity: 0.5,
23
radius: 1000
24
}).addTo(layerGroup); // Add to layerGroup instead of map
25
26
// Add marker to layerGroup instead of map
27
var marker= L.marker(latlng).addTo(layerGroup)
28
var popup = L.popup()
29
.setLatLng(latlng)
30
.setContent(udata)
31
.openOn(map);
32
console.log(data.name);
33
34
});
35
});
36