trigger PopulateCitybyCoor on VehicleDataR2__c (before insert, before update) {
for (VehicleDataR2__c a: Trigger.New) {
Http h = new Http();
HttpRequest req = new HttpRequest();
req.setMethod('GET');
//get the current coordinates
// System.debug('current latitude: ' + this.currentCoordinates);
// this will fail unless you set up https://maps.googleapis.com/ in your remote site settings
//req.setEndpoint('https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&result_type=street_address&key=AIzaSyB9SidQvZbhRlDax3Vvg8ak0hE0nxk7seo');
req.setEndpoint('https://maps.googleapis.com/maps/api/geocode/json?latlng= ' + a.latitude__c + ',' + a.Longitude__c + '&result_type=street_address&key=AIzaSyB9SidQvZbhRlDax3Vvg8ak0hE0nxk7seo');
HttpResponse res = h.send(req);
// initialize your street address variables
String streetNumber;
String streetName;
String city;
// you can either deserialize to a class type, or untyped, as I've done here.
Map<String,Object> gr = (Map<String,Object>)JSON.deserializeUntyped(res.getBody());
List<Object> results = (List<Object>)gr.get('results');
Map<String,Object> firstResult = (Map<String,Object>)results[0]; // just taking the first one for this example
List<Object> firstAddressComponents = (List<Object>)firstResult.get('address_components');
Map<String,Object> streetNumberComp = (Map<String,Object>)firstAddressComponents[0];
streetNumber = String.valueOf(streetNumberComp.get('short_name'));
Map<String,Object> streetNameComp = (Map<String,Object>)firstAddressComponents[1];
streetName = String.valueOf(streetNameComp.get('short_name'));
Map<String,Object> CityComp = (Map<String,Object>)firstAddressComponents[2];
City= String.valueOf(CityComp.get('short_name'));
System.debug('Street address: ' + streetNumber + ' ' + streetName);
System.debug('Street address: ' + City);
a.City__c = City;
}
}