2012-06-04 6 views
1

Je me demande si quelqu'un peut m'aider s'il vous plait.Géocode inversé sur Google Maps api v3

J'utilise le code ci-dessous pour tracer correctement des marqueurs récupérés d'une base de données MySQL sur une carte Google Map.

<script type="text/javascript"> 
      //Sample code written by August Li 
      var icon = new google.maps.MarkerImage("images/location-marker-2.png") 
      new google.maps.Point(16, 32); 
      var center = null; 
      var map = null; 
      var bounds = new google.maps.LatLngBounds(); 
      function addMarker(lat, lng, info) { 
      var pt = new google.maps.LatLng(lat, lng); 
      bounds.extend(pt); 
      var marker = new google.maps.Marker({ 
      position: pt, 
      icon: icon, 
      map: map 
      }); 
      } 
      function initMap() { 
      map = new google.maps.Map(document.getElementById("gmaps-canvas"), { 
      center: new google.maps.LatLng(0, 0), 
      zoom: 6, 
      scrollwheel: true,  
      draggable: true, 
      mapTypeId: google.maps.MapTypeId.SATELLITE 
      }); 
       <?php 

         include("admin/link.php"); 
         include("admin/opendb.php"); 

         $query = mysql_query("SELECT * FROM `detectinglocations` WHERE `locationid` = '$lid'"); 
         while ($row = mysql_fetch_array($query)){ 
          $locationname=$row['locationname']; 
          $osgb36lat=$row['osgb36lat']; 
          $osgb36lon=$row['osgb36lon']; 
          echo ("addMarker($osgb36lat, $osgb36lon,'<b>$locationname</b><br/>');\n"); 
         } 
          mysql_close($connect); 
       ?> 

         center = bounds.getCenter(); 
         map.fitBounds(bounds); 
         } 
</script> 

Ce que je suis en train d'essayer de faire est d'ajouter des fonctionnalités supplémentaires qui permet aux utilisateurs de cliquer également sur la carte pour tracer de nouveaux marqueurs, en substance utilisant le marqueur préexistant de la base de données comme point de travailler à partir , effectuant un reverse geocode. Je fais des recherches depuis un certain nombre de jours maintenant et j'ai essayé d'implémenter une foule de tutoriels, mais je n'arrive pas à faire fonctionner les deux parties de la fonctionnalité.

Je ne sais que pour permettre un événement on-click je dois intégrer quelque chose le long des lignes de:

google.maps.event.addListener(map, 'click', function(event) { marker.setPosition(event.latLng) geocode_lookup('latLng', event.latLng ); }); }

mais je dois admettre que je suis un peu incertain au sujet de ce que je dois intégrer. Je me demandais simplement si quelqu'un pourrait être en mesure de jeter un coup d'œil à cette question, et je serais très reconnaissant si quelqu'un pouvait me montrer où je me suis trompé.

Un grand merci et salutations

+0

Je ne comprends pas clairement. Vous souhaitez obtenir une adresse pour chaque marqueur ajouté depuis la base de données? Ou lorsque la carte est cliquée? Quand un marqueur de base de données est cliqué? Tout ce qui précède? Après le géocodage inverse, où sont les adresses supposées aller? –

+0

Salut @HeitorChang, merci d'avoir pris le temps de répondre à mon message, et je m'excuse de ne pas l'avoir bien précisé. Lorsque la carte se charge, il y aura déjà un marqueur sur la carte. Ceci est chargé à partir d'un lat et lng stockés dans la base de données MySQL. Ce que je dois maintenant essayer et faire est d'ajouter la fonctionnalité par laquelle l'utilisateur peut également cliquer sur la carte et effectuer un «géocodage inverse» sans affecter le marqueur pré-rempli. J'espère que cela le rend un peu plus clair. Cordialement – IRHM

Répondre

0

j'ai écrit une page de cartes séparées avec juste click-to-inverse géocodage fonctionnalité

http://jsfiddle.net/ZDQeM/

Les détails adresse sont source de confusion pour travailler avec, je pense. Les résultats sont un tableau, à différents niveaux de précision, l'un pourrait inclure le comté, l'autre l'état, un autre l'adresse de la rue. Généralement, je n'utilise que des résultats [0]. Les détails sont dans les docs: https://developers.google.com/maps/documentation/javascript/geocoding#GeocodingResponses

Si vous avez besoin d'informations spécifiques, le moyen sûr de l'obtenir est de parcourir tout le tableau de résultats jusqu'à ce que vous trouviez ce dont vous avez besoin (types [] contenant postal_code, par exemple).

google.maps.event.addListener(map, 'click', function(event) { 
     userMarker = new google.maps.Marker({ 
     map: map, 
     position: event.latLng 
     }); 

     geocoder.geocode({'latLng': event.latLng}, function(results, status) { 
     if(status == google.maps.GeocoderStatus.OK) { 
      if (results[0]) { 
      alert(results[0].formatted_address); 
      } 
      else { 
      alert("No results"); 
      } 
     } 
     else { 
      alert("Geocoding unsuccessful: Status " + status); 
     } 
     }); 
    }); 

Où dans votre code?

<script type="text/javascript"> 
     //Sample code written by August Li 
     var icon = new google.maps.MarkerImage("images/location-marker-2.png") 
     new google.maps.Point(16, 32); 
     var center = null; 
     var map = null; 
     var bounds = new google.maps.LatLngBounds(); 
     function addMarker(lat, lng, info) { 
     var pt = new google.maps.LatLng(lat, lng); 
     bounds.extend(pt); 
     var marker = new google.maps.Marker({ 
     position: pt, 
     icon: icon, 
     map: map 
     }); 
     } 
     function initMap() { 
     map = new google.maps.Map(document.getElementById("gmaps-canvas"), { 
     center: new google.maps.LatLng(0, 0), 
     zoom: 6, 
     scrollwheel: true,  
     draggable: true, 
     mapTypeId: google.maps.MapTypeId.SATELLITE 
     }); 
      <?php 

        include("admin/link.php"); 
        include("admin/opendb.php"); 

        $query = mysql_query("SELECT * FROM `detectinglocations` WHERE `locationid` = '$lid'"); 
        while ($row = mysql_fetch_array($query)){ 
         $locationname=$row['locationname']; 
         $osgb36lat=$row['osgb36lat']; 
         $osgb36lon=$row['osgb36lon']; 
         echo ("addMarker($osgb36lat, $osgb36lon,'<b>$locationname</b><br/>');\n"); 
        } 
         mysql_close($connect); 
      ?> 

        center = bounds.getCenter(); 
        map.fitBounds(bounds); 

        var geocoder = new google.maps.Geocoder(); 

        google.maps.event.addListener(map, 'click', function(event) { 
         var userMarker = new google.maps.Marker({ 
         map: map, 
         position: event.latLng 
         }); 

        geocoder.geocode({'latLng': event.latLng}, function(results, status) { 
         if(status == google.maps.GeocoderStatus.OK) { 
         if (results[0]) { 
          alert(results[0].formatted_address); 
         } 
         else { 
          alert("No results"); 
         } 
         } 
         else { 
         alert("Geocoding unsuccessful: Status " + status); 
         } 
        }); 
        }); 
       } 
</script> 
+0

Salut, merci beaucoup de m'aider avec cela, il est grandement apprécié. Pardonnez-moi de vous demander, étant donné que je suis relativement débutant en la matière, mais pourriez-vous me dire s'il vous plaît où je devrais incorporer cela dans mon code existant, afin que les deux parties de la fonctionnalité fonctionnent ensemble. Merci beaucoup. – IRHM

+0

La réponse ci-dessus a été mise à jour. À la fin de tout semble être un bon endroit pour moi. Je ne peux pas tester correctement sans le php, voir si ça fonctionne bien pour vous. –

+0

Salut @Heitor Chang, c'est absolument fantastique. Je vous remercie beaucoup pour votre aide. Cela fonctionne très bien. Toutes les meilleures et amicales salutations. – IRHM