11
votes

Comment utiliser Google Maps Geocoder.getLatlng () et stocker son résultat dans une base de données?

Hey tout le monde! Je tente d'utiliser getlatlng () à Geocode une liste des codes postaux / postal et de stocker le point généré dans la base de données à placer sur une carte plus tard. C'est ce que j'ai jusqu'à présent: xxx

mais je reçois ceci.lat n'est pas une fonction dans ma console d'erreur lorsque j'essaie de sérialiser le objet point ou utilisez-le dans $. POST ()

de ma recherche, je comprends que géocoder.getlatlng () est asynchrone, comment affecter ce que j'essaie de faire? Je n'exécute pas ce code dans une boucle et j'essaie de poster le point à l'aide de la fonction de rappel anonyme.

Comment puis-je enregistrer les informations de point pour utiliser plus tard?

Mise à jour

Création d'un marqueur et essayer de poster que les résultats suivants dans le ne sont pas une fonction dans la console d'erreur. xxx

** Une autre mise à jour **

J'ai vraiment besoin de sauvegarder l'adresse géocodée pour plus tard, même si je stocke la latitude / Valeurs de longitude dans ma base de données et refaire le marqueur lorsque je suis prêt à le mettre sur une carte. Encore une fois, sérialiser ou poster - apparemment en utilisant le point de quelque manière que ce soit autre que dans Google Maps Fonctions fournit le Ceci.LAT n'est pas une fonction Exception de mon journal d'erreur.

J'utilise ASP.NET MVC - Y a-t-il des cadres là-bas qui faciliterait cela? J'ai vraiment besoin d'aide avec ça. Merci.


5 Réponses :


0
votes

Vous devez définir un marqueur sur la carte, qui prend un lat / long. Vous pouvez enregistrer cette information mais vous voulez ou afficher immédiatement. (Code tronqué pour le but de démonstration) xxx

mise à jour (pour v2) xxx


15 commentaires

Je pense qu'il utilise l'API Google Map V2 basé sur le GClientGeocoder


D'accord, les résultats seraient donc pointus pour moi et son tableau? Ainsi, les résultats [0] seraient Y et les résultats [1] seraient x? Parce que cela ne me permet pas de sauvegarder des résultats. Ou puis-je sauver le marqueur?


Désolé, merci à @ kjy112 qui a remarqué que vous utilisez v2. Toutefois, pour v3 les résultats [0] est simplement le résultat supérieur de la recherche et des résultats [0] .GEOMETRY.LOCATION est la complète / gnng du sommet résultat.


Ah, d'accord - alors ... que dois-je faire pour v2?


:( Je reçois toujours ceci.lat n'est pas une fonction


NON Où dans votre code ou mon code est là un this.lat . Êtes-vous sûr que ce n'est pas quelque part ailleurs causant la question. Vous un débogueur JS pour trouver la ligne offensante.


Son provenant de la ligne 278 dans http://maps.gstatic.com/intl/en_all/mapfiles/310c/maps2.api/ main.js


Je ne devrais-je pas juste passer à v3? Cela résoudrait-il tout cela?


:( La mise à niveau vers le code plus récent jette la même erreur. Erreur: this.lat n'est pas un fichier source de fonction: http://maps.gstatic.com/intl/en_us/mapfiles/API-3/4/9 /main.j S Ligne: 11


Ensuite, vous avez quelque chose d'autre qui va mal. J'ai posté mon extrait initial du code de production de travail.


Mais je dois l'enregistrer d'une manière ou d'une autre, et c'est là que l'exception est lancée, sur le post. Vous m'avez montré comment placer un point sur une carte. Je n'ai pas de carte ici.


Pour l'enregistrer, vous devez le mettre dans une sorte de DataStore, DB, Cookie, etc.


Merci BUD, je pensais que: D. Mais j'ai besoin de le poster sur mon serveur afin de le sauvegarder à mon dB et de lancer le this.lat Exception lorsque j'essaie de sérialiser ou de poster le résultat.


C'est un problème différent et vous devez afficher le code concerné pour votre sérialisation et votre publication.


J'ai fait, dans ma question initiale. $. Param (point) Serialise un objet, et j'ai mon message post commenté. Les deux jettent l'erreur.



12
votes

Si vous êtes coincé pendant 2 jours peut-être qu'un nouveau départ v3 serait une bonne chose, ce qui ressort un travail de Similair pour moi ...

          function GetLocation(address) {
          var geocoder = new google.maps.Geocoder();
          geocoder.geocode({ 'address': address }, function (results, status) {
              if (status == google.maps.GeocoderStatus.OK) {
                  ParseLocation(results[0].geometry.location);

              }
              else
                alert('error: ' + status);

          });
      }

  }

  function ParseLocation(location) {

      var lat = location.lat().toString().substr(0, 12);
      var lng = location.lng().toString().substr(0, 12);

      //use $.get to save the lat lng in the database
      $.get('MatchLatLang.ashx?action=setlatlong&lat=' + lat + '&lng=' + lng,
            function (data) {
                // fill textboss (feedback purposes only) 
                //with the found and saved lat lng values
                $('#tbxlat').val(lat);
                $('#tbxlng').val(lng);
                $('#spnstatus').text(data);


            });
    }


3 commentaires

Toute raison que vous utilisez $ .get () au lieu de $ .post ()


Je lie les cartes Google V3 à l'aide de est-ce correct? Je reçois toujours ce type () n'est pas une fonction.


"Toute raison que vous utilisez $ .get () au lieu de $ .post ()" "" Pas vraiment, juste parce que ce n'est qu'une petite quantité de données ...



2
votes

Avez-vous essayé cela? XXX

Je n'ai pas utilisé V2 dans une longue période, je ne suis donc pas sûr de la syntaxe exacte, mais le but est de créer un objet de Les informations dont vous avez besoin (Lat / GNL) et Serialize que .

En outre, une mise à niveau vers V3 est très recommandée, si plausible.


0 commentaires

0
votes

en V3 Les coordonnées doivent être d'abord sérialisées en tant que chaîne, comme indiqué par Arnoldiuss, avant d'envoyer des données publications JSON.

var lat = latlong.lat (). Tostring (). Substr (0, 12); var lng = letlong.lng (). Tostring (). Substr (0, 12);


0 commentaires

-1
votes
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />

<%@ taglib prefix="s" uri="/struts-tags"%>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?key=AIzaSyDS1d1116agOa2pD9gpCuvRDgqMcCYcNa8&sensor=false"></script>
<script type="text/javascript">
function initialize() {

    var latitude = document.getElementById("latitude").value;
    latitude = latitude.split(",");

    var longitude = document.getElementById("longitude").value;
    longitude = longitude.split(",");

    var locName = document.getElementById("locName").value;
    locName = locName.split(",");

    var RoadPathCoordinates = new Array();
    RoadPathCoordinates.length = locName.length;

    var locations = new Array();
    locations.length = locName.length;

    var infowindow              = new google.maps.InfoWindow();
    var marker, i;
    var myLatLng                = new google.maps.LatLng(22.727622,75.895719);



    var mapOptions = {
        zoom            : 16,
        center          : myLatLng,
        mapTypeId       : google.maps.MapTypeId.ROADMAP
    };
    var map                     = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);


    //To Draw a line
    for (i = 0; i < RoadPathCoordinates.length; i++)
        RoadPathCoordinates[i] = new google.maps.LatLng(latitude[i],longitude[i]);
    var RoadPath = new google.maps.Polyline({
        path            : RoadPathCoordinates,
        strokeColor     : "#FF0000",
        strokeOpacity   : 1.0,
        strokeWeight    : 2
    });


    //Adding Marker to given points
    for (i = 0; i < locations.length; i++)
        locations[i] = [locName[i],latitude[i],longitude[i],i+1];
    for (i = 0; i < locations.length; i++) 
    {marker = new google.maps.Marker({
                position    : new google.maps.LatLng(locations[i][1], locations[i][2]),
                map         : map
                });



    //Adding click event to show Popup Menu
    var LocAddress ="";
    google.maps.event.addListener(marker, 'click', (function(marker, i) 
      { return function() 
        {
            GetAddresss(i);

            //infowindow.setContent(locations[i][0]);

            infowindow.setContent(LocAddress);
            infowindow.open(map, marker);
        }
      })(marker, i));}


 function GetAddresss(MarkerPos){
        var geocoder = null;
        var latlng;
        latlng = new google.maps.LatLng(latitude[MarkerPos],longitude[MarkerPos]);
        LocAddress = "91, BAIKUNTHDHAAM"; //Intializing just to test

        //geocoder = new GClientGeocoder(); //not working
        geocoder = new google.maps.Geocoder();

        geocoder.getLocations(latlng,function ()
        {
            alert(LocAddress);
            if (!response || response.Status.code != 200) {
                alert("Status Code:" + response.Status.code);
            } else 
            {
                place = response.Placemark[0];
                LocAddress = place.address;
            }

        });
 }

    //Setting up path
    RoadPath.setMap(map);   
}
</script>

</head>
<body onload="initialize()">
    <s:form action="mapCls" namespace="/">
        <s:hidden key="latitude" id="latitude"/>
        <s:hidden key="longitude" id="longitude"/>
        <s:hidden key="locName" id="locName"/>
        <div id="map_canvas" style="float:left;width:70%;height:100%"></div>
    </s:form>
</body>
</html>


I am doing reverse Geocoding, and want address of marker using lat and longitude. M facing problem with function "GetAddresss()", line "geocoder.getLocations(latlng,function ()" is not working properly. what should I Do?

0 commentaires