+ Start a Discussion
Apex Code DevelopmentApex Code Development 

How to get the geographical location based on IP address?

Dear folks,

 

I'm getting a lead from website(using web to lead concept). My client is able to capture the IP address from which the lead is getting.

 

In Salesforce.com, based on the IP address of the lead I need to capture the geographical location from where I got the lead.

 

Thanks & Regards,

Jagadeesh K.

DebasisDebasis
Hi Apex Code Development,

you can achieve this by creating a visuaforce page with google api. I have explained in detail please try it.

step1: create a visualforce page using below code sample, this code is used for account object, but you can change based on your requirement
 
<apex:page standardController="Account">

<head>

<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<script type="text/javascript"> 

$(document).ready(function() {

  var myOptions = {
    zoom: 15,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    mapTypeControl: false
  }

  var map;
  var marker;

  var geocoder = new google.maps.Geocoder();
  var address = "{!Account.BillingStreet}, " + "{!Account.BillingCity}, " + "{!Account.BillingPostalCode}, " + "{!Account.BillingCountry}";

  var infowindow = new google.maps.InfoWindow({
    content: "<b>{!Account.Name}</b><br>{!Account.BillingStreet}<br>{!Account.BillingCity}, {!Account.BillingPostalCode}<br>{!Account.BillingCountry}"
  });

  geocoder.geocode( { address: address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK && results.length) {
      if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {

        //create map
        map = new google.maps.Map(document.getElementById("map"), myOptions);

        //center map
        map.setCenter(results[0].geometry.location);

        //create marker
        marker = new google.maps.Marker({
            position: results[0].geometry.location,
            map: map,
            title: "{!Account.Name}"
        });

        //add listeners
        google.maps.event.addListener(marker, 'click', function() {
          infowindow.open(map,marker);
        });
        google.maps.event.addListener(infowindow, 'closeclick', function() {
          map.setCenter(marker.getPosition()); 
        });

      }

    } else {
      $('#map').css({'height' : '15px'});
      $('#map').html("Oops! {!Account.Name}'s billing address could not be found, please make sure the address is correct.");
      resizeIframe();
    }
  });

  function resizeIframe() {
    var me = window.name;
    if (me) {
      var iframes = parent.document.getElementsByName(me);
      if (iframes && iframes.length == 1) {
        height = document.body.offsetHeight;
        iframes[0].style.height = height + "px";
      }
    }
  }

});
</script>

<style>
#map {
  font-family: Arial;
  font-size:12px;
  line-height:normal !important;
  height:250px;
  background:transparent;
}
</style>

</head>

<body>
<div id="map"></div> 
</body> 
</apex:page>

step2: Add the Visualforce page on the page layout (in a single-column section) and set it’s height to be 300px.

please let me know if it helps to resolve your issue and mark it as best answer if it is.


 
Ravi Dutt SharmaRavi Dutt Sharma
You need to make a callout to a webservice which will take IP address as input param and will return the geographical location (lat, lng) or zipcode associated to that IP. You can have a look at this webservice : http://dev.maxmind.com/geoip/legacy/geolite/
PS : This is a paid webservice. You can search if there are some free one's available.