简体   繁体   中英

Google Maps JS API v3 - Simple Multiple Marker with Geolocation

Google Maps JS API v3 - Simple Multiple Marker with Geolocation
Thanks, but I manage with the code below. Fell free to improve it!
1 Part - clean variables

var LocationCenter = null;
var map = null;
var approxCircle = null;
var pinCircle = null;
var marker = null;

2 Part - define locations in Variable

var locations = [ 
  ['Bondi Beach', -33.890542, 151.274856, 4], 
  ['Coogee Beach', -33.923036, 151.259052, 5], 
  ['Cronulla Beach', -34.028249, 151.157507, 3], 
  ['Manly Beach', -33.80010128657071, 151.28747820854187, 2], 
  ['Maroubra Beach', -33.950198, 151.259302, 1] 
];  

3 Part - initialize function

function Newinitialize(lat,lng) {
    LocationCenter = new google.maps.LatLng(lat,lng);
    var myOptions = {
        zoom: 14,
        center: LocationCenter,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
map = new google.maps.Map(document.getElementById("map_canvasRoast"), myOptions);

marker = new google.maps.Marker({
    position: LocationCenter,
    map: map,
    animation: google.maps.Animation.DROP
    });

approxCircle = {
  strokeColor: "#008595",
  strokeOpacity: 0.8,
  strokeWeight: 2,
  fillColor: "#008595",
  fillOpacity: 0.25,
  map: map,
  center: LocationCenter,
  radius: 50,
  clickable : false 
};

pinCircle = new google.maps.Circle(approxCircle);
var infowindow = new google.maps.InfoWindow();
var marker, i; 

4 Part - set locations

for (i = 0; i < locations.length; i++) {   
  marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
    map: map 
  }); 

  google.maps.event.addListener(marker, 'click', (function(marker, i) { 
    return function() { 
      infowindow.setContent(locations[i][0]); 
      infowindow.open(map, marker); 
    } 
  })(marker, i)); 
}   

};

$('.goMap').live('click', function() {
    if(navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position){
        Newinitialize(position.coords.latitude,position.coords.longitude);
    });
    }else{
        Newinitialize(52.636161,-1.133065);
    }
});

Done, now I load the page and the geolocation is working fine.

Setup the Google Map inside the showPosition function, something like:

var map;
function showPosition(position) {
  var latlon=position.coords.latitude+","+position.coords.longitude;

  x.innerHTML="Latitude: " + position.coords.latitude + "<br>Longitude: " + position.coords.longitude;    

  map = new google.maps.Map(document.getElementById('map'), { 
    zoom: 10, 
    center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
  });
}

This way the coordinates will be available before you initialize Google Maps. Otherwise you could update the map coordinates within your showPosition function (I'm not sure of the exact code to do that).

Here's how you would re-center the map to the user's current location:

function showPosition(position)
{
  map.setCenter(new google.maps.LatLng(positions.coords.latitude,
      position.coords.longitude));
}

This would allow you to create the map before receiving the user location.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM