How to validate address using google maps?

Neeraj Sharma10
Tera Guru

Hello experts,

There is requirement to validate user Address in ServiceNow using google maps.
has anyone have achieved this before?


Any help will be appreciated.

Regards

Neeraj Sharma

2 REPLIES 2

Shishir Srivast
Mega Sage

Please check if this helps: Google map in the Location of Incident


Daryll Conway
Giga Guru

I did a postcode lookup using the Google maps API to return the full address if that's what you are after?



// Client Script : Postcode REST Call - House Number (String inputs from "house" and "postcode" fields)

function onChange(control, oldValue, newValue, isLoading) {


    if (isLoading || newValue == '') {


    return;


  }


    var house = newValue;


    var postcodeInput = g_form.getValue('postcode');



    var ga = new GlideAjax('REST_API_CALL');


    ga.addParam('sysparm_name','getData');


    ga.addParam('sysparm_house',house);


    ga.addParam('sysparm_postcodeInput', postcodeInput);


    ga.getXML(responseParse);



    function responseParse(response) {


    var answer = response.responseXML.documentElement.getAttribute("answer");


    var stringifiedAnswer = answer.toString();


    var addressArray = stringifiedAnswer.split(", ");



    //g_form.setValue('full_address', answer);
    if(addressArray.length==7){


  g_form.setValue('address_line_1', addressArray[0] + ", " + addressArray[1]);


  g_form.setValue('address_line_2', addressArray[2]);


  g_form.setValue('town', addressArray[3]);


  g_form.setValue('region', addressArray[5]);


  g_form.setValue('country', addressArray[6]);


  }


    else if(addressArray.length==6){


  g_form.setValue('address_line_1', addressArray[0] + ", " + addressArray[1]);


  g_form.setValue('address_line_2', addressArray[2]);


  g_form.setValue('town', addressArray[4]);


  g_form.setValue('region', addressArray[3]);


  g_form.setValue('country', addressArray[5]);


  }


    else{


  g_form.addErrorMessage("Error occurred!, please check the details given. If the error reoccurs please enter the address manually.");


  }


  }


}






// Script Include

var REST_API_CALL = Class.create();


REST_API_CALL.prototype = Object.extendsObject(AbstractAjaxProcessor, {



    getData: function()


  {


    try{


    var postcodeInput = this.getParameter('sysparm_postcodeInput');


    var house = this.getParameter('sysparm_house');


    var cleanAddress = '';


    var responseBody = '';



    var url = 'http://maps.googleapis.com/maps/api/geocode/json';



    //Get Latitude and Longitude from Google Maps
    var ws = new GlideHTTPRequest(url);


    ws.addParameter("address", postcodeInput);


    ws.addParameter("sensor", "false");



    var getResponse = ws.get();



    //Set latitude & longitude values
    var content = new JSON().decode(getResponse.getBody().toString());


    var lat = content.results[0].geometry.location.lat;


    var lng = content.results[0].geometry.location.lng;



    //Get full address by querying the latitude and longitude coordinates
    var loc = new GlideHTTPRequest(url);


    loc.addParameter("latlng", lat + ',' + lng);


    loc.addParameter("sensor", "false");



    var getResponseAll = loc.get();


    var mainContent = new JSON().decode(getResponseAll.getBody().toString());


    var address = mainContent.results[0].address_components;


    var prestreet='';


    if(isNaN(address[0].long_name)){


    prestreet = address[0].long_name;


  }


    var street = address[1].long_name;


    var town = address[2].long_name;


    var county = address[5].long_name;


    var region = address[3].long_name;


    var postcode = address[6].long_name;



    //Insert the populated fields to the return variable cleanAddress
    if(prestreet!=''){


    cleanAddress = (house + ', ' + prestreet + ', ' + street + ', ' + town + ', ' + county + ', ' + region + ', ' + postcode);


  }


    else{


    cleanAddress = (house + ', ' + street + ', ' + town + ', ' + county + ', ' + region + ', ' + postcode);


  }



    // Check for invalid return
    var invalid = cleanAddress.startsWith("Invalid");


    if(invalid){


    cleanAddress = "An error occurred please try another address or enter the address manually.";


  }



    return cleanAddress;


  }


    catch(ex) {


    var message = ex.getMessage();


    return message;


  }


  },


    isPublic: function() {


    return true;


  }


});