protected override AddressSuggestion[] ParseSuggestion(string SuggestionRespnse, AddressTargetType TargetType)
        {
            int markerOffset = 0;

            switch (TargetType)
            { 
                case AddressTargetType.Country:
                    markerOffset = 7;
                    break;
            }

            JObject sugObj = JObject.Parse(SuggestionRespnse);

            return sugObj["suggestion"]
                .Select(p => new AddressSuggestion()
                {
                    Suggestion = (string)p["query"], 
                    Markers = (from s in ((JArray)p["interpretation"]["term"]).Where(s=>s["matched"] != null)
                                  let st = (int)s["start"]
                                  let ed = (int)s["start"] + ((int)s["term_end"] - (int)s["term_start"] - markerOffset)
                                  let ted = (int)s["end"]
                                  let real_ed = ed > 0 ? (ted > ed ? ed : ted) : 0
                                    select new AddressSuggestion.Marker(st, real_ed)).ToArray() 
                }).ToArray();
        }
예제 #2
0
        public static AddressSuggestion [] GetAddressesSuggestions(string Country, string City, string Street, int MaxItemsCount, AddressTargetType TargetType)
        {
            _lastQueryContext = IsGoogleKing(Country + City + Street) ? AddressInfoContextType.Google : AddressInfoContextType.Yandex;

            IAddressQuery query = LastQueryContext == AddressInfoContextType.Google ? (IAddressQuery)new GoogleAddressQuery() : (IAddressQuery)new YandexAddressQuery();

            return query.GetAddressesSuggestions(Country, City, Street, MaxItemsCount, TargetType);
        }
        public AddressSuggestion[] GetAddressesSuggestions(string Country, string City, string Street, int MaxItemsCount, AddressTargetType TargetType)
        {
            string reqStr = null;

            switch (TargetType)
            {
                case AddressTargetType.Country:
                    if (!string.IsNullOrEmpty(Country))
                        reqStr = string.Format(SuggestionCountryRequestPattern, Country.ToLower(), null, null, MaxItemsCount);
                    break;
                case AddressTargetType.Region:
                    throw new NotImplementedException();
                case AddressTargetType.City:
                    if (!string.IsNullOrEmpty(Country) && !string.IsNullOrEmpty(City))
                        reqStr = string.Format(SuggestionCityRequestPattern, Country.ToLower(), City.ToLower(), null, MaxItemsCount);
                    break;
                case AddressTargetType.Street:
                    if (!string.IsNullOrEmpty(Country) && !string.IsNullOrEmpty(City) && !string.IsNullOrEmpty(Street))
                        reqStr = string.Format(SuggestionStreetRequestPattern, Country.ToLower(), City.ToLower(), Street.ToLower(), MaxItemsCount);
                    break;
                case AddressTargetType.Arbitrary:
                    if (!string.IsNullOrEmpty(Country))
                        reqStr = string.Format(SuggestionRequestPattern, Country.ToLower(), null, null, MaxItemsCount);
                    break;
            }

            if (!string.IsNullOrEmpty(reqStr))
            {
                System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(reqStr);

                System.IO.StreamReader reader = new System.IO.StreamReader(req.GetResponse().GetResponseStream());

                string str = reader.ReadToEnd();

                reader.Dispose();

                if (!string.IsNullOrEmpty(str) && str != "{}")
                {
                    try
                    {
                        return ParseSuggestion(str.Trim(), TargetType);
                    }
                    catch
                    {
                        return new AddressSuggestion [] { };
                    }
                }
            }

            return new AddressSuggestion[] { };
        }
        protected override AddressSuggestion[] ParseSuggestion(string SuggestionRespnse, AddressTargetType TargetType)
        {
            string str = SuggestionRespnse.Replace("maps-sep", "maps");

            //MESS--SMART YANDEX DEVELOPERS--
            var r = str.Split(new string[] { "[\"maps\"," }, StringSplitOptions.RemoveEmptyEntries)
                .Skip(1).Select(p => p.TrimEnd(" ],".ToCharArray()).TrimEnd(" ]], []])".ToCharArray()))
                    .Select(p => new AddressSuggestion() { Suggestion = p })
                    .ToArray();

            foreach (var sug in r)
                SuggestionFinishing(sug);

            return r;
        }
 protected abstract AddressSuggestion[] ParseSuggestion(string SuggestionRespnse, AddressTargetType TargetType);