//Calling package:BingGeocoder to return address GEO coding
        private static List <GEOCodeStep> BingGeocoderList(string address, string webService, string key)
        {
            var    geoCodeStepsList = new List <GEOCodeStep>();
            string apikey           = GetConfigFile().IniReadValue(webService, key);

            try
            {
                BingGeocoderClient bingClient = new BingGeocoderClient(apikey);
                BingGeocoderResult bingResult = new BingGeocoderResult();
                bingResult = bingClient.Geocode(address);
                if (bingResult.Latitude != null && bingResult.Longitude != null)
                {
                    var geoCodeSteps = new GEOCodeStep();
                    geoCodeSteps.Status = "OK";
                    geoCodeSteps.lat    = bingResult.Latitude;
                    geoCodeSteps.lng    = bingResult.Longitude;
                    geoCodeStepsList.Add(geoCodeSteps);
                }
                else
                {
                    var geoCodeSteps = new GEOCodeStep();
                    //geoCodeSteps.Status = respStatus;
                    geoCodeSteps.lat = "ZERO_RESULTS";
                    geoCodeSteps.lng = "ZERO_RESULTS";
                    geoCodeStepsList.Add(geoCodeSteps);
                }
            }
            catch (Exception ex)
            {
                RecordLog("BingGeocoderList", ex.Message);
                return(null);
            }

            return(geoCodeStepsList);
        }
        //Parsing response to get BING GEO Coding (lat and lng)
        private static List <GEOCodeStep> ParseBingGeoCodeResults(string result)
        {
            var geoCodeStepsList = new List <GEOCodeStep>();

            try
            {
                var jsonObject = JObject.Parse(result);
                var respArray  = (JArray)jsonObject["resourceSets"];
                var respStatus = jsonObject["statusCode"].ToString().Trim();

                var resultArray = (JArray)respArray[0]["resources"];
                if (respStatus == "200" && resultArray.Count >= 1)
                {
                    var geoCodeSteps = new GEOCodeStep();
                    var geoArray     = (JArray)resultArray[0]["point"]["coordinates"];
                    geoCodeSteps.Status = respStatus;
                    geoCodeSteps.lat    = geoArray[0].ToString();
                    geoCodeSteps.lng    = geoArray[1].ToString();
                    geoCodeStepsList.Add(geoCodeSteps);
                }
                else
                {
                    var geoCodeSteps = new GEOCodeStep();
                    geoCodeSteps.Status = respStatus;
                    geoCodeSteps.lat    = "ZERO_RESULTS";
                    geoCodeSteps.lng    = "ZERO_RESULTS";
                    geoCodeStepsList.Add(geoCodeSteps);
                }
            }
            catch (Exception e)
            {
                RecordLog("ParseBingGeoCodeResults", e.Message);
                return(null);
            }

            return(geoCodeStepsList);
        }
        //Parsing response to get Google GEO Coding (lat and lng)
        private static List <GEOCodeStep> ParseGeoCodeResults(string result)
        {
            var geoCodeStepsList = new List <GEOCodeStep>();
            var xmlDoc           = new XmlDocument {
                InnerXml = result
            };

            if (xmlDoc.HasChildNodes)
            {
                var geoCodeResponseNode = xmlDoc.SelectSingleNode("GeocodeResponse");
                if (geoCodeResponseNode != null)
                {
                    var statusNode = geoCodeResponseNode.SelectSingleNode("status");
                    var lat        = geoCodeResponseNode.SelectSingleNode("result/geometry/location/lat");
                    var lng        = geoCodeResponseNode.SelectSingleNode("result/geometry/location/lng");
                    if (statusNode.InnerText.Equals("OK"))
                    {
                        var locs         = geoCodeResponseNode.SelectNodes("result/geometry/location");
                        var geoCodeSteps = new GEOCodeStep();
                        geoCodeSteps.Status = statusNode.InnerText;
                        geoCodeSteps.lat    = lat.InnerText;
                        geoCodeSteps.lng    = lng.InnerText;
                        geoCodeStepsList.Add(geoCodeSteps);
                    }
                    else
                    {
                        var geoCodeSteps = new GEOCodeStep();
                        geoCodeSteps.Status = statusNode.InnerText;
                        geoCodeSteps.lat    = "ZERO_RESULTS";
                        geoCodeSteps.lng    = "ZERO_RESULTS";
                        geoCodeStepsList.Add(geoCodeSteps);
                    }
                }
            }
            return(geoCodeStepsList);
        }