4

EDIT: RESOLU. Corrigez le code sous le code du problème.Récupérer des lieux à proximité de google places et ajouter des marqueurs sur google map à partir des résultats

J'ai du mal à faire fonctionner mon code. Ce que je veux faire est d'utiliser la géolocalisation pour déterminer l'emplacement des utilisateurs. Je veux ensuite faire une recherche pour trouver quelque chose à partir d'une chaîne (dans ce cas, "Systembolaget", dans un rayon de 2000, et montrer les résultats sur une carte google.Je reçois mon propre emplacement sur la carte, mais je suis avoir grand mal à obtenir les résultats lieux.

Qu'est-ce que je fais mal? Je n'ai pas beaucoup d'expérience de javascript, donc toute l'aide est une bonne aide.

Si vous vous interrogez sur le script cordova, il est nécessaire que je fais une application PhoneGap.

<!DOCTYPE html> 
<meta charset="UTF-8"> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<script src="cordova-1.6.0.js"></script> 
<style type="text/css"> 
    html { height: 100% } 
    body { height: 100%; margin: 0; padding: 0 } 
    #map_canvas { height: 100% } 
</style> 
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=MYAPIKEY&sensor=true"></script> 
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false"></script> 
<script type="text/javascript"> 
// Determine support for Geolocation and get location or give error 
if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(displayPosition, errorFunction); 
} else { 
    alert('It seems like Geolocation, which is required for this page, is not enabled in your browser. Please use a browser which supports it.'); 
} 

// Success callback function 
function displayPosition(pos) { 
    var mylat = pos.coords.latitude; 
    var mylong = pos.coords.longitude; 
    //Load Google Map 
    var latlng = new google.maps.LatLng(mylat, mylong); 
    var myOptions = { 
    zoom: 16, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 

var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

// Places 
var request = { 
    location: latlng, 
    radius: '2000', 
    name: ['Systembolaget'] 
}; 

var service = new google.maps.places.PlacesService(map); 
service.search(request, callback); 

function callback(results, status) 
{ 
    if (status == google.maps.places.PlacesServiceStatus.OK) 
    { 
     for (var i = 0; i < results.length; i++) 
     { 
      var place = results[i]; 
      var loc = place.geometry.location; 
      var marker = new google.maps.Marker 
      ({ 
       position: new google.maps.LatLng(loc.Pa,loc.Qa) 
      }); 
      marker.setMap(map); 
     } 
    } 
} 

var marker = new google.maps.Marker({ 
    position: latlng, 
    map: map, 
    title:"You are here" 
}); 
} 

// Error callback function 
function errorFunction(pos) { 
    alert('It seems like your browser or phone has blocked our access to viewing your location. Please enable this before trying again.'); 
} 
</script> 
</head> 
<body> 
     <div id="map_canvas"></div> 
</body> 

RESOLU! CODE CORRECT

<!DOCTYPE html> 
<meta charset="UTF-8"> 
<html> 
<head> 
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" /> 

<title name="title"></title> 

<link rel="stylesheet" type="text/css" href="style.css"> 
<script src="cordova-1.6.0.js"></script> 

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false"></script> 
<script type="text/javascript"> 

// Determine support for Geolocation and get location or give error 
if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(displayPosition, errorFunction); 
} else { 
    alert('It seems like Geolocation, which is required for this page, is not enabled in your browser. Please use a browser which supports it.'); 
} 

// Success callback function 
function displayPosition(pos) { 
    var mylat = pos.coords.latitude; 
    var mylong = pos.coords.longitude; 
    //Load Google Map 
    var latlng = new google.maps.LatLng(mylat, mylong); 
    var myOptions = { 
    zoom: 16, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.HYBRID 
}; 

var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

// Places 
var request = { 
    location: latlng, 
    radius: '20000', 
    name: ['whatever'] 
}; 

var service = new google.maps.places.PlacesService(map); 
service.search(request, callback); 

function callback(results, status) 
{ 
    if (status == google.maps.places.PlacesServiceStatus.OK) { 
     for (var i = 0; i < results.length; i++) { 
      var place = results[i]; 
      createMarker(results[i]); 
      } 
     } 
    } 

    function createMarker(place) { 
     var placeLoc = place.geometry.location; 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: place.geometry.location 
     }); 
     } 

var marker = new google.maps.Marker({ 
    position: latlng, 
    map: map, 
    title:"You're here" 
}); 


} 

// Error callback function 
function errorFunction(pos) { 
    alert('It seems like your browser or phone has blocked our access to viewing your location. Please enable this before trying again.'); 
} 
</script> 
</head> 
<body> 
    <div id="map_canvas"></div> 
</body> 

Répondre

2

Il est difficile de vous donner une aide spécifique, parce que vous ne l'avez pas vraiment décrit exactement comment vous échouez. Mais une chose que je remarque tout de suite est que vous semblez essayer de charger le script google.maps deux fois, avec différentes informations sensor dans chaque. Dans votre première balise de script google.maps, vous incluez le texte littéral MYAPIKEY qui doit être incorrect. Si vous aviez une vraie clé dans une variable, je me attends quelque chose comme:

src="http://maps.googleapis.com/maps/api/js?key=" + MYAPIKEY + "&sensor=true" 

Et puis dans votre deuxième balise de script vous apparaissez pour charger correctement la bibliothèque endroits, mais votre balise de capteur est défini comme: sensor-false. Votre deuxième balise de script me semble plus correcte, donc je suggère de supprimer la première balise de script pour commencer. À partir de là, pouvez-vous fournir plus de détails sur l'échec de votre page et peut-être un lien vers la page?

Quelques observations supplémentaires:

  • Votre initiale if-else regarde comme si elle appellera la fonction displayPosition, mais le code dans displayPosition ne charge pas la carte google; cela crée simplement des vars qui deviennent hors de portée lorsque la fonction se termine. En dehors de la fonction displayPosition, vous créez une nouvelle instance de google Map, mais elle fait référence à myOptions, qui n'existe plus à ce stade du code, car elle n'existait que dans le cadre de la fonction displayPosition.

je suggère de changer le code lié à la carte à la création quelque chose comme:

var map = null; 
if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(displayPosition, errorFunction); 
} else { 
    alert('It seems like Geolocation, which is required for this page, is not enabled in your browser. Please use a browser which supports it.'); 
} 

// Success callback function 
function displayPosition(pos) { 
    var mylat = pos.coords.latitude; 
    var mylong = pos.coords.longitude; 
    //Load Google Map 
    var latlng = new google.maps.LatLng(mylat, mylong); 
    var myOptions = { 
     zoom: 16, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
} 
+0

Hey! Je pensais que je devais charger à la fois google maps et la bibliothèque google places, mais comme vous l'avez suggéré, cela fonctionne sans la première ligne. Le problème est toujours le même, je n'obtiens pas de résultats/marqueurs sur la carte! Bien sûr, j'ai changé mon vrai apikey avec "myapikey" quand j'ai téléchargé le code sur stackoverflow! :) La page est seulement locale pendant que je travaille dessus, puisque je vais pour une application phonegapp. –

+0

Je peux imprimer les résultats sur la console, donc je sais que je les obtiens, mais je ne les fais pas apparaître sur la carte! –

+0

Aussi, je pensais que c'était à cause de cela que j'ai deux variables appelées "marqueur", mais ça ne marche pas même si je commente le marqueur pour ma propre position. –

Questions connexes