Reputation: 67
I'm trying to get visitor's location and then display their location using a map.
I tried passing lat and long values to variables a and b and then using that to display a map.
<p> You are visiting me from:
<button onclick="getLocation()">Click Here</button>
</p>
<p id="geoLoc"></p>
<script>
var x = document.getElementById("geoLoc");
var a = 0;
var b = 0;
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
}
function showPosition(position) {
a = position.coords.latitude;
b = position.coords.longitude;
x.innerHTML = "Latitude: " + a +
"<br>Longitude: " + b;
}
function initMap() {
// The location of visitor
var uluru = {lat: a, lng: b};
// The map, centered at visitor
var map = new google.maps.Map(
document.getElementById('map'), {zoom: 4, center: uluru});
// The marker, positioned at visitor
var marker = new google.maps.Marker({position: uluru, map: map});
}
</script>
<h3> Map of Your Location</h3>
<div id = "map"></div>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
</script>
</div>
expected: see the map with marker on the location passed by latitude and longitude
actual: nothing
Upvotes: 1
Views: 392
Reputation: 803
A more general answer would be GeoLocation and Display Map. Mix as you go along - w3schools is a sure place for beginners.
Upvotes: 0
Reputation: 11
You need to define a height to the div that contains the map for it to display, adding style="height: 500px"
to the attributes did the trick.
The map is also being initialised when you load the page, which will display a marker at (0,0). The position of the marker will need to be set after you have received the geolocation information from the visitor. The map and marker variables need to be defined outside of the function scope and then you can set the marker in your showPosition
function.
<p> You are visiting me from:
<button onclick="getLocation()">Click Here</button>
</p>
<p id="geoLoc"></p>
<script>
var x = document.getElementById("geoLoc");
var a = 0;
var b = 0;
// Map variables with global scope
var map;
var marker;
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
}
function showPosition(position) {
a = position.coords.latitude;
b = position.coords.longitude;
x.innerHTML = "Latitude: " + a +
"<br>Longitude: " + b;
// Position of the visitor
var uluru = {lat: a, lng: b};
// The marker, positioned at visitor
marker = new google.maps.Marker({position: uluru, map: map});
// Center the map on the new marker position
map.setCenter(marker.getPosition());
}
function initMap() {
// The map, centered to 0,0
map = new google.maps.Map(
document.getElementById('map'), {zoom: 4 , center: {lat: 0, lng: 0}});
}
</script>
<h3> Map of Your Location</h3>
<!-- Set div height for the map -->
<div id = "map" style="height: 500px;"></div>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
</script>
</div>
Upvotes: 1