The following post is a portion of the Leaflet Tips and Tricks book which is free to download. To use this post in context, consider it with the others in this blog or just download the the book as a pdf / epub or mobi .
----------------------------------------------------------
----------------------------------------------------------
Adding multiple markers to our map
At some stage we will most likely want to add multiple markers to our map to pinpoint several things. While we could do this one by one following the previous example, we could also do it programmatically with an array of data.
The following is the full code to show multiple markers on a map;
<!DOCTYPE html>
<html>
<head>
<title>
Simple Leaflet Map</title>
<meta
charset=
"utf-8"
/>
<link
rel=
"stylesheet"
href=
"http://cdn.leafletjs.com/leaflet-0.7/leaflet.css"
/>
</head>
<body>
<div
id=
"map"
style=
"width: 600px; height: 400px"
></div>
<script
src=
"http://cdn.leafletjs.com/leaflet-0.7/leaflet.js"
>
</script>
<script>
var
planes
=
[
[
"7C6B07"
,
-
40.99497
,
174.50808
],
[
"7C6B38"
,
-
41.30269
,
173.63696
],
[
"7C6CA1"
,
-
41.49413
,
173.5421
],
[
"7C6CA2"
,
-
40.98585
,
174.50659
],
[
"C81D9D"
,
-
40.93163
,
173.81726
],
[
"C82009"
,
-
41.5183
,
174.78081
],
[
"C82081"
,
-
41.42079
,
173.5783
],
[
"C820AB"
,
-
42.08414
,
173.96632
],
[
"C820B6"
,
-
41.51285
,
173.53274
]
];
var
map
=
L
.
map
(
'map'
).
setView
([
-
41.3058
,
174.82082
],
8
);
mapLink
=
'<a href="http://openstreetmap.org">OpenStreetMap</a>'
;
L
.
tileLayer
(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'
,
{
attribution
:
'© '
+
mapLink
+
' Contributors'
,
maxZoom
:
18
,
}).
addTo
(
map
);
for
(
var
i
=
0
;
i
<
planes
.
length
;
i
++
)
{
marker
=
new
L
.
marker
([
planes
[
i
][
1
],
planes
[
i
][
2
]])
.
bindPopup
(
planes
[
i
][
0
])
.
addTo
(
map
);
}
</script>
</body>
</html>
The full code of a live example of a map incorporating multiple markers is available online at bl.ocks.org orGitHub. A copy can also be downloaded (in a zip file) when you download the book from Leanpub. It’s called multiple-markers.html.
There are two differences between this code and the code to add a single marker. Firstly we have declared an array (planes
) which has a range of values with each row including an identifier (the first column) and latitude and longitude values.
var
planes
=
[
[
"7C6B07"
,
-
40.99497
,
174.50808
],
[
"7C6B38"
,
-
41.30269
,
173.63696
],
[
"7C6CA1"
,
-
41.49413
,
173.5421
],
[
"7C6CA2"
,
-
40.98585
,
174.50659
],
[
"C81D9D"
,
-
40.93163
,
173.81726
],
[
"C82009"
,
-
41.5183
,
174.78081
],
[
"C82081"
,
-
41.42079
,
173.5783
],
[
"C820AB"
,
-
42.08414
,
173.96632
],
[
"C820B6"
,
-
41.51285
,
173.53274
]
];
Secondly we include a for
loop that contains our marker adding line.
for
(
var
i
=
0
;
i
<
planes
.
length
;
i
++
)
{
marker
=
new
L
.
marker
([
planes
[
i
][
1
],
planes
[
i
][
2
]])
.
bindPopup
(
planes
[
i
][
0
])
.
addTo
(
map
);
}
In the for
loop we go from 0 to the end of the planes
array (planes.length
). For each row in our array, we add a marker where the latitude corresponds to planes[i][1]
(in the planes
array at row i
and column 1 (remembering that the first column is 0)) and the longitude is planes[i][2]
. We also add a popup to our marker with the identifier (planes[i][0]
) before adding each marker to the map (.addTo(map)
).
And here’s our map complete with markers…
<!DOCTYPE html>
<html>
<head>
<title>
Simple Leaflet Map</title>
<meta
charset=
"utf-8"
/>
<link
rel=
"stylesheet"
href=
"http://cdn.leafletjs.com/leaflet-0.7/leaflet.css"
/>
</head>
<body>
<div
id=
"map"
style=
"width: 600px; height: 400px"
></div>
<script
src=
"http://cdn.leafletjs.com/leaflet-0.7/leaflet.js"
>
</script>
<script>
var
planes
=
[
[
"7C6B07"
,
-
40.99497
,
174.50808
],
[
"7C6B38"
,
-
41.30269
,
173.63696
],
[
"7C6CA1"
,
-
41.49413
,
173.5421
],
[
"7C6CA2"
,
-
40.98585
,
174.50659
],
[
"C81D9D"
,
-
40.93163
,
173.81726
],
[
"C82009"
,
-
41.5183
,
174.78081
],
[
"C82081"
,
-
41.42079
,
173.5783
],
[
"C820AB"
,
-
42.08414
,
173.96632
],
[
"C820B6"
,
-
41.51285
,
173.53274
]
];
var
map
=
L
.
map
(
'map'
).
setView
([
-
41.3058
,
174.82082
],
8
);
mapLink
=
'<a href="http://openstreetmap.org">OpenStreetMap</a>'
;
L
.
tileLayer
(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'
,
{
attribution
:
'© '
+
mapLink
+
' Contributors'
,
maxZoom
:
18
,
}).
addTo
(
map
);
for
(
var
i
=
0
;
i
<
planes
.
length
;
i
++
)
{
marker
=
new
L
.
marker
([
planes
[
i
][
1
],
planes
[
i
][
2
]])
.
bindPopup
(
planes
[
i
][
0
])
.
addTo
(
map
);
}
</script>
</body>
</html>
planes
) which has a range of values with each row including an identifier (the first column) and latitude and longitude values. var
planes
=
[
[
"7C6B07"
,
-
40.99497
,
174.50808
],
[
"7C6B38"
,
-
41.30269
,
173.63696
],
[
"7C6CA1"
,
-
41.49413
,
173.5421
],
[
"7C6CA2"
,
-
40.98585
,
174.50659
],
[
"C81D9D"
,
-
40.93163
,
173.81726
],
[
"C82009"
,
-
41.5183
,
174.78081
],
[
"C82081"
,
-
41.42079
,
173.5783
],
[
"C820AB"
,
-
42.08414
,
173.96632
],
[
"C820B6"
,
-
41.51285
,
173.53274
]
];
for
loop that contains our marker adding line. for
(
var
i
=
0
;
i
<
planes
.
length
;
i
++
)
{
marker
=
new
L
.
marker
([
planes
[
i
][
1
],
planes
[
i
][
2
]])
.
bindPopup
(
planes
[
i
][
0
])
.
addTo
(
map
);
}
for
loop we go from 0 to the end of the planes
array (planes.length
). For each row in our array, we add a marker where the latitude corresponds to planes[i][1]
(in the planes
array at row i
and column 1 (remembering that the first column is 0)) and the longitude is planes[i][2]
. We also add a popup to our marker with the identifier (planes[i][0]
) before adding each marker to the map (.addTo(map)
).Multiple markers on a map |
No comments:
Post a Comment