public static async Task<IList<VenueItem>> GetVenuesNear(string apiKey, string latlon, decimal? lat, decimal? lon, int? id,
            string place, int? distance, Measure? measure, VenueType? venueType)
        {
            if (string.IsNullOrEmpty(apiKey))
            {
                throw new ArgumentNullException(nameof(apiKey));
            }

            string method = $"{ParentMethod}.getvenuesnear";

            var parameters = new Dictionary<string, string> { { "method", method }, { "apikey", apiKey } };

            var requestUrl = $"{Api}";

            var atLeastOne = false;

            if (!string.IsNullOrEmpty(latlon))
            {
                parameters.Add("latlon", latlon);
                atLeastOne = true;
            }

            if (lat != null && lon != null)
            {
                parameters.Add("lat", lat.ToString());
                parameters.Add("lon", lon.ToString());
                atLeastOne = true;
            }

            if (id != null)
            {
                parameters.Add("id", id.ToString());
                atLeastOne = true;
            }

            if (!string.IsNullOrEmpty(place))
            {
                parameters.Add("place", place);
                atLeastOne = true;
            }

            if (!atLeastOne)
            {
                throw new ArgumentException("Must specify at least one: latlon, lat/lon, id, or place.");
            }

            if (distance != null)
            {
                parameters.Add("distance", distance.ToString());
            }

            if (measure != null)
            {
                switch (measure)
                {
                    case Measure.Miles:
                        parameters.Add("measure", ((int)Measure.Miles).ToString());
                        break;
                    case Measure.Kilometers:
                        parameters.Add("measure", ((int)Measure.Kilometers).ToString());
                        break;
                    default:
                        throw new ArgumentOutOfRangeException(nameof(measure), measure, null);
                }
            }

            if (venueType != null)
            {
                switch (venueType)
                {
                    case VenueType.All:
                        parameters.Add("measure", ((int)VenueType.All).ToString());
                        break;
                    case VenueType.Bookstores:
                        parameters.Add("measure", ((int)VenueType.Bookstores).ToString());
                        break;
                    case VenueType.Libraries:
                        parameters.Add("measure", ((int)VenueType.Libraries).ToString());
                        break;
                    case VenueType.FairsAndFestivals:
                        parameters.Add("measure", ((int)VenueType.FairsAndFestivals).ToString());
                        break;
                    case VenueType.Other:
                        parameters.Add("measure", ((int)VenueType.Other).ToString());
                        break;
                    default:
                        throw new ArgumentOutOfRangeException(nameof(venueType), venueType, null);
                }
            }

            return await GetWebResultAsList<VenuesResponse, VenuesLtml, VenueItem>(requestUrl, parameters);
        }
 public async Task<IList<VenueItem>> GetVenuesNear(string latlon, decimal? lat, decimal? lon, int? id, string place, int? distance, Measure? measure, VenueType? venueType)
 {
     return await GetVenuesNear(ApiKey, latlon, lat, lon, id, place, distance, measure, venueType);
 }