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;
 }
Esempio n. 3
0
		internal PlaceFinderException(PlaceFinderError errCode, string errMessage) : base(errMessage)
		{
			mErrorCode = errCode;
		}