How can I pass this code snippet to localstorage?

2
<script>

   navigator.geolocation.getCurrentPosition(function(position) {
      document.cookie = "mylat="+position.coords.latitude;
      document.cookie = "mylng="+position.coords.longitude;

})


var mylat = Number("<?php print_r($_COOKIE['mylat']); ?>");
var mylong = Number("<?php print_r($_COOKIE['mylng']); ?>");


var myLatLng = {lat: mylat , lng: mylong};
    
asked by anonymous 31.03.2017 / 14:03

1 answer

0

You should realize code in javascript is asynchronous and that mainly the type of geolocation request you are making from the user's location uses a callback, so

function(position) {
    document.cookie = "mylat="+position.coords.latitude;
    document.cookie = "mylng="+position.coords.longitude;
}

Running after

var mylat = Number("<?php print_r($_COOKIE['mylat']); ?>");
var mylong = Number("<?php print_r($_COOKIE['mylng']); ?>");

So, you're probably getting a position only on the second run on. In addition to overwriting the variable document.cookie with only the longitude.

To use localStorage you can use

navigator.geolocation.getCurrentPosition(function(position) {
  // esta função é executada apenas depois de conseguir a localização
  // o que pode acontecer depois do script fora desta função

  var coords = position.coords; // apenas para encurtar
  localStorage.setItem("mylat", coords.latitude); // gravar lat
  localStorage.setItem("mylng", coords.longitude); // gravar lng
  // mudar centro do mapa
  map.setCenter({lat: position.coords, lng: position.coords});
})

// posição padrão em caso de não existir última posição gravada
var defaultLocation = {lat: -9.919302, lng: -50.486085};


var mylat = localStorage.getItem("mylat")
if (mylat === null) { // em caso de não existir lat gravada
  mylat = defaultLocation.lng; // use a lat da localização padrão
}

var mylng = localStorage.getItem("mylng");
if (mylng === null) { // em caso de não existir lng gravada
  mylng = defaultLocation.lng; // use a lng da localização padrão
}

var myLatLng = {lat: mylat , lng: mylng};

// Assumindo que você está usando um mapa da Google Maps Javascript API em map:
map.setCenter(myLatLng);
    
31.03.2017 / 14:51