it-swarm.com.de

Geolocation mit hoher Genauigkeit Html5

Ich versuche, ein Gerät mithilfe des eingebetteten GPS zu lokalisieren (wie etwa der Standort der App-Freigabe). Ich habe gelesen, dass es mit EnableHighAccuracy: true möglich ist. 

Wie kann ich in diesem Code "enableHighAccuracy: true" einstellen? Ich habe es in verschiedenen Positionen versucht, aber es funktioniert nicht. 

<script type="text/javascript">
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position){
        var latitude = position.coords.latitude;
        var longitude = position.coords.longitude;
        var accuracy = position.coords.accuracy;
        var coords = new google.maps.LatLng(latitude, longitude);
        var mapOptions = {
            zoom: 15,
            center: coords,
            mapTypeControl: true,
            navigationControlOptions: {
                style: google.maps.NavigationControlStyle.SMALL
            },
            mapTypeId: google.maps.MapTypeId.ROADMAP
            };

         var capa = document.getElementById("capa");
         capa.innerHTML = "latitud: " + latitude + " longitud: " + "   aquesta es la precisio en metres  :  " + accuracy;  

            map = new google.maps.Map(
                document.getElementById("mapContainer"), mapOptions
                );
            var marker = new google.maps.Marker({
                    position: coords,
                    map: map,
                    title: "ok"
            });


        });

    }else {
        alert("Geolocation API is not supported in your browser.");
    }

</script>

Danke vielmals!

15
Francesc VE

Sie benötigen ein PositionOptions -Objekt, in dem Sie das Hochgenauigkeitsflag nach der API setzen.

Ich zitiere von hier: http://diveintohtml5.info/geolocation.html

Die Funktion getCurrentPosition () verfügt optional über ein drittes Argument, ein PositionOptions-Objekt. In einem PositionOptions-Objekt können drei Eigenschaften festgelegt werden. Alle Eigenschaften sind optional. Sie können einen oder alle oder keinen von ihnen einstellen.

POSITIONOPTIONS OBJECT

Property            Type        Default         Notes
--------------------------------------------------------------
enableHighAccuracy  Boolean     false           true might be slower
timeout             long        (no default)    in milliseconds
maximumAge          long        0               in milliseconds

Also sollte es so funktionieren:

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        var latitude = position.coords.latitude;
        var longitude = position.coords.longitude;
        var accuracy = position.coords.accuracy;
        var coords = new google.maps.LatLng(latitude, longitude);
        var mapOptions = {
            zoom: 15,
            center: coords,
            mapTypeControl: true,
            navigationControlOptions: {
                style: google.maps.NavigationControlStyle.SMALL
            },
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        var capa = document.getElementById("capa");
        capa.innerHTML = "latitude: " + latitude + ", longitude: " + ", accuracy: " + accuracy;

        map = new google.maps.Map(document.getElementById("mapContainer"), mapOptions);
        var marker = new google.maps.Marker({
            position: coords,
            map: map,
            title: "ok"
        });

    },
    function error(msg) {alert('Please enable your GPS position feature.');},
    {maximumAge:10000, timeout:5000, enableHighAccuracy: true});
} else {
    alert("Geolocation API is not supported in your browser.");
}

Bemerkt habe ich die folgenden 2 Parameter zu getCurrentPosition hinzugefügt:

  1. function error(msg){alert('Please enable your GPS position future.');}

    Diese Funktion wird aufgerufen, wenn das GPS nicht abgerufen werden konnte oder das Timeout ausgelöst wurde.

  2. {maximumAge:10000, timeout:5000, enableHighAccuracy: true});

    Dies sind die Optionen. Wir möchten keine GPS-Daten, die älter als 10 Sekunden sind (maximumAge:10000). Wir möchten nicht länger als 5 Sekunden auf eine Antwort warten (timeout:5000) und wir möchten eine hohe Genauigkeit (enableHighAccuracy: true) ermöglichen.

Siehe auch: Geolocation HTML5 enableHighAccuracy True, False oder Best Option?

24

Hier ist ein einfaches Beispiel für enableHighAccuracy: true aus dem Mozilla Developer Network .

var options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0
};

function success(pos) {
  var crd = pos.coords;

  console.log('Your current position is:');
  console.log(`Latitude : ${crd.latitude}`);
  console.log(`Longitude: ${crd.longitude}`);
  console.log(`More or less ${crd.accuracy} meters.`);
}

function error(err) {
  console.warn(`ERROR(${err.code}): ${err.message}`);
}

navigator.geolocation.getCurrentPosition(success, error, options);
0
jpllosa