protected override PlaceFinderResult ConvertResult(YahooManaged.Base.ConnectionInfo connInfo, System.IO.Stream stream, YahooManaged.Base.SettingsBase settings) { List <PlaceFinderData> results = new List <PlaceFinderData>(); System.Globalization.CultureInfo convCulture = new System.Globalization.CultureInfo("en-US"); PlaceFinderError errorCode = PlaceFinderError.NoError; AddressQualitiy bestQuality = AddressQualitiy.NotAnAddress; XDocument doc = MyHelper.ParseXmlDocument(stream); XElement[] resultSet = XPath.GetElements("//ResultSet", doc); if (resultSet.Length == 1) { XElement resultSetNode = resultSet[0]; foreach (XElement resultSetElementNode in resultSetNode.Elements()) { switch (resultSetElementNode.Name.LocalName) { case "Error": errorCode = (PlaceFinderError)Convert.ToInt32(resultSetElementNode.Value.Replace("NN", "")); break; case "ErrorMessage": if (errorCode > PlaceFinderError.NoError) { connInfo = this.GetConnectionInfo(new System.Net.WebException("An internal Yahoo! error occured. Look at InnerException for more details.", new PlaceFinderException(errorCode, resultSetElementNode.Value)), connInfo); break; } break; case "Locale": string[] codes = resultSetElementNode.Value.Split(new string[] { "_", "-" }, StringSplitOptions.None); Language language = Language.en; Country country = Country.US; foreach (Language lang in Enum.GetValues(typeof(Language))) { if (lang.ToString() == codes[0]) { language = lang; break; // TODO: might not be correct. Was : Exit For } } foreach (Country cnt in Enum.GetValues(typeof(Country))) { if (cnt.ToString() == codes[1]) { country = cnt; break; // TODO: might not be correct. Was : Exit For } } break; case "Quality": bestQuality = (AddressQualitiy)Convert.ToInt32(resultSetElementNode.Value); break; case "Result": PlaceFinderData res = new PlaceFinderData(); double lat = 0; double lon = 0; double latOff = 0; double lonOff = 0; foreach (XElement resultItemNode in resultSetElementNode.Elements()) { switch (resultItemNode.Name.LocalName) { case "quality": res.Quality = (AddressQualitiy)Convert.ToInt32(resultItemNode.Value); break; case "latitude": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out lat); break; case "longitude": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out lon); break; case "offsetlat": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out latOff); break; case "offsetlon": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out lonOff); break; case "radius": int t; if (int.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out t)) { res.Radius = t; } break; case "boundingbox": double n = 0; double s = 0; double e = 0; double w = 0; foreach (XElement bbItemNode in resultItemNode.Elements()) { switch (bbItemNode.Name.LocalName) { case "north": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out n); break; case "south": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out s); break; case "east": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out e); break; case "west": double.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out w); break; } } Coordinates ne = new Coordinates(e, n); Coordinates sw = new Coordinates(w, s); res.BoundingBox = new CoordinatesRectangle(sw, ne); break; case "name": res.PoiAoiName = resultItemNode.Value; break; case "line1": if (res.DefaultAddress == null) { res.DefaultAddress = new Address(); } res.DefaultAddress.StreetAddressOrIntersection = resultItemNode.Value; break; case "line2": if (res.DefaultAddress == null) { res.DefaultAddress = new Address(); } res.DefaultAddress.CityOrStateOrZipCode = resultItemNode.Value; break; case ("line3"): if (res.DefaultAddress == null) { res.DefaultAddress = new Address(); } res.DefaultAddress.PostalCode = resultItemNode.Value; break; case "line4": if (res.DefaultAddress == null) { res.DefaultAddress = new Address(); } res.DefaultAddress.Country = resultItemNode.Value; break; case "cross": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.CrossStreets = resultItemNode.Value; break; case "house": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.House = resultItemNode.Value; break; case "street": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } if (resultItemNode.HasElements) { res.ExtendedAddress.Street = this.GetStreetContainer(resultItemNode); } else { res.ExtendedAddress.Street = new SimpleStreetDescription { FullName = resultItemNode.Value }; } break; case "xstreet": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } if (resultItemNode.HasElements) { res.ExtendedAddress.CrossStreet = this.GetStreetContainer(resultItemNode); } else { res.ExtendedAddress.CrossStreet = new SimpleStreetDescription { FullName = resultItemNode.Value }; } break; case "unittype": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.UnitType = resultItemNode.Value; break; case "unit": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.Unit = resultItemNode.Value; break; case "postal": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.PostalCode = resultItemNode.Value; break; case "neighborhood": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.Neighborhoods = resultItemNode.Value.Split('/'); break; case "city": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.City = resultItemNode.Value; break; case "county": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.County = resultItemNode.Value; break; case "state": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.State = resultItemNode.Value; break; case "country": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.Country = resultItemNode.Value; break; case "level4": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.Neighborhoods = resultItemNode.Value.Split('/'); break; case "level3": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.City = resultItemNode.Value; break; case "level2": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.County = resultItemNode.Value; break; case "level1": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.State = resultItemNode.Value; break; case "level0": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.Country = resultItemNode.Value; break; case "countycode": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.CountyCode = resultItemNode.Value; break; case "statecode": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.StateCode = resultItemNode.Value; break; case "countrycode": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.CountryCode = resultItemNode.Value; break; case "level2code": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.CountyCode = resultItemNode.Value; break; case "level1code": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.StateCode = resultItemNode.Value; break; case "level0code": if (res.ExtendedAddress == null) { res.ExtendedAddress = new ExtendedAddress(); } res.ExtendedAddress.CountryCode = resultItemNode.Value; break; case "timezone": res.TimeZone = resultItemNode.Value; break; case "areacode": res.TelephoneAreaCode = resultItemNode.Value; break; case "uzip": res.UniqueZipCode = resultItemNode.Value; break; case "hash": res.Hash = resultItemNode.Value; break; case "woeid": long l; if (long.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out l)) { res.WOEID = l; } break; case "woetype": int tInt = 0; if (int.TryParse(resultItemNode.Value, System.Globalization.NumberStyles.Any, convCulture, out tInt)) { res.WOEType = (PlaceType)tInt; } break; } } res.Position = new Coordinates(lon, lat); res.PositionOffSet = new CoordinatesOffSet { Latitude = latOff, LongitudeOffSet = lonOff }; results.Add(res); break; } } } return(new PlaceFinderResult(results.ToArray(), bestQuality, (PlaceFinderDownloadSettings)settings)); }
internal PlaceFinderException(PlaceFinderError errCode, string errMessage) : base(errMessage) { mErrorCode = errCode; }