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(); }
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);