How do I use Google Maps geocoder.getLatLng() and store its result in a database?

后端 未结 5 1180
死守一世寂寞
死守一世寂寞 2021-01-04 10:10

Hey everybody! Im trying to use getLatLng() to geocode a list of postal/zip codes and store the generated point in the database to be placed on a map later. This is what I\'

相关标签:
5条回答
  • 2021-01-04 10:50

    In V3 the coordinates must be first serialized as a string as shown by Arnoldiuss, before sending as json post data.

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

    0 讨论(0)
  • 2021-01-04 10:55

    You need to set a marker on the map, which takes a lat/long. You can save that info however you want or display immediately. (Code truncated for demo purpose)

    map = new google.maps.Map(document.getElementById("Map"), myOptions);
    geocoder.geocode({ 'address': address }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {      
            var marker = new google.maps.Marker({
                position: results[0].geometry.location
            });
            marker.setMap(map);
        }
    }
    

    UPDATE (FOR v2)

    $(".geocodethis").click(function () {
        var geocoder = new GClientGeocoder();
        var postalCode = $(this).siblings(".postal").val();
        var id = $(this).siblings(".id").val();
    
        geocoder.getLatLng(postalCode, function (point) {
            if (!point) {
                alert(postalCode + " not found");
            } else {
                map.setCenter(point, 13);
                var marker = new GMarker(point);
                map.addOverlay(marker);
            }
        });
    
    });
    
    0 讨论(0)
  • 2021-01-04 10:55
    <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 讨论(0)
  • 2021-01-04 11:01

    Have you tried this?

    $(".geocodethis").click(function () {
        var geocoder = new GClientGeocoder();
        var postalCode = $(this).siblings(".postal").val();
        var id = $(this).siblings(".id").val();
    
        geocoder.getLatLng(postalCode, function (point) {
            if (!point) {
                alert(postalCode + " not found");
            } else {
                alert(point);
                var marker = new GMarker(point);
                map.addOverlay(marker);
                obj = {lat: marker.position.lat(),
                       lng: marker.position.lng()};
                $.post("/Demographic/Geocode/" + id, obj, function () {
                    alert("success?");
                });
            }
        });
    
    });
    

    I haven't used V2 in a long time, so I'm not sure about the exact syntax, but the point is to create an object from the information you need (lat/lng) and serialize that.

    Also, an upgrade to V3 is much recommended, if plausible.

    0 讨论(0)
  • 2021-01-04 11:02

    If your stuck for 2 days maybe a fresh v3 start would be a good thing, this snipped does a similair job for me...

              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);
    
    
                });
        }
    
    0 讨论(0)
提交回复
热议问题