patternjavascriptMinor
Multiple Google Maps using V3 API
Viewed 0 times
googlemapsusingmultipleapi
Problem
I have several Google Maps on one page and each has its own set of Lat/Lng co-ordinates. As a result I have added in the JavaScript options for each one individually as follows:
The HTML is:
This just feels like a really long-winded way of doing things seeing as everything has a similar identifier - is there a better way of doing this?
function initialize() {
var myLatlng1 = new google.maps.LatLng(49.18589, -2.19917);
var myLatlng2 = new google.maps.LatLng(101.1986, -50.2445);
var myLatlng3 = new google.maps.LatLng(29.125285,-82.048823);
var mapOptions1 = {
zoom: 17,
center: myLatlng1
};
var mapOptions2 = {
zoom: 17,
center: myLatlng2
};
var mapOptions3 = {
zoom: 17,
center: myLatlng3
};
location_1 = new google.maps.Map(document.getElementById('map-canvas1'), mapOptions1);
location_2 = new google.maps.Map(document.getElementById('map-canvas2'), mapOptions2);
location_3 = new google.maps.Map(document.getElementById('map-canvas3'), mapOptions3);
marker1 = new google.maps.Marker({
position: myLatlng1,
map: location_1
});
marker2 = new google.maps.Marker({
position: myLatlng2,
map: location_2
});
marker3 = new google.maps.Marker({
position: myLatlng3,
map: location_3
});
}The HTML is:
This just feels like a really long-winded way of doing things seeing as everything has a similar identifier - is there a better way of doing this?
Solution
Have you considered an array?
You can then create multiple objects, having each object the values per point.
Like this:
Here's what I did:
Notice that I have this
I'm not accessing the
Also, since
Using an array, you also don't need to re-re-re-repeat everytime you need to add a point: just add a new element inside the array
I hope you can understand everything and hope it is clear enough for you. And hope it really helps you.
You can then create multiple objects, having each object the values per point.
Like this:
var coords = [
{lat: 49.18589, lng: -2.19917, zoom: 17},
{lat: 101.1986, lng: -50.2445, zoom: 17},
{lat: 29.125285, lng: -82.048823, zoom: 17}
];
var markers = [];
var maps = [];
function initialize() {
for(var i = 0, length = coords.length; i < length; i++)
{
var point = coords[i];
var latlng = new google.maps.LatLng(point.lat, point.lng);
maps[i] = new google.maps.Map(document.getElementById('map-canvas' + (i + 1)), {
zoom: point.zoom,
center: latlng
});
markers[i] = new google.maps.Marker({
position: latlng,
map: maps[i]
});
}
}Here's what I did:
- Created a few variables at the top, with needed information.
- Created a loop to go through all the elements
- Reduced the number of local variable to the bare minimum
- Removed global variables being declared inside the function
Notice that I have this
for loop:for(var i = 0, length = coords.length; i < length; i++)I'm not accessing the
length property directly because it may decrease performance. Accessing a local variable is always faster than a property in an array/object.Also, since
i starts in 0 and your elements' id starts in 1, I had to add 1 to i, to match the right element.Using an array, you also don't need to re-re-re-repeat everytime you need to add a point: just add a new element inside the array
coords.I hope you can understand everything and hope it is clear enough for you. And hope it really helps you.
Code Snippets
var coords = [
{lat: 49.18589, lng: -2.19917, zoom: 17},
{lat: 101.1986, lng: -50.2445, zoom: 17},
{lat: 29.125285, lng: -82.048823, zoom: 17}
];
var markers = [];
var maps = [];
function initialize() {
for(var i = 0, length = coords.length; i < length; i++)
{
var point = coords[i];
var latlng = new google.maps.LatLng(point.lat, point.lng);
maps[i] = new google.maps.Map(document.getElementById('map-canvas' + (i + 1)), {
zoom: point.zoom,
center: latlng
});
markers[i] = new google.maps.Marker({
position: latlng,
map: maps[i]
});
}
}for(var i = 0, length = coords.length; i < length; i++)Context
StackExchange Code Review Q#98451, answer score: 4
Revisions (0)
No revisions yet.