public async Task <IEnumerable <MKMapItem> > SearchAsync( string query, bool aroundRegion, double centerLatitude, double centerLongitude, double deltaLatitude = 0.25, double deltaLongitude = 0.25) { var request = new MKLocalSearchRequest(); request.NaturalLanguageQuery = query; if (aroundRegion) { var center = new CLLocationCoordinate2D(centerLatitude, centerLongitude); var span = new MKCoordinateSpan(deltaLatitude, deltaLongitude); request.Region = new MKCoordinateRegion(center, span); } var search = new MKLocalSearch(request); var response = await search.StartAsync(); if (response == null) { return(null); } if (response.MapItems == null) { return(null); } return(response.MapItems); }
private async Task SearchAsync(string what, string where) { var span = new MKCoordinateSpan(0.25, 0.25); var request = new MKLocalSearchRequest { NaturalLanguageQuery = what, Region = new MKCoordinateRegion(ParseCoordinates(where), span), }; var search = new MKLocalSearch(request); MKLocalSearchResponse response = null; try { response = await search.StartAsync(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); } if (response != null) { searchItems = response.MapItems; PerformSegue(SearchSegueIdentifier, this); } }
///<inheritdoc/> public async Task<IEnumerable<IPlaceResult>> GetPredictions(string query, MapSpan bounds) { List<IPlaceResult> result = new List<IPlaceResult>(); var region = new MKCoordinateRegion(bounds.Center.ToLocationCoordinate(), new MKCoordinateSpan(0.25, 0.25)); var request = new MKLocalSearchRequest { NaturalLanguageQuery = query, Region = region }; MKLocalSearch search = new MKLocalSearch(request); var nativeResult = await search.StartAsync(); if (nativeResult != null && nativeResult.MapItems != null) { result.AddRange(nativeResult.MapItems.Select(i => new TKNativeiOSPlaceResult { Description = string.Format("{0}, {1} {2}", i.Placemark.Title, i.Placemark.AdministrativeArea, i.Placemark.SubAdministrativeArea), Details = new TKPlaceDetails { Coordinate = i.Placemark.Coordinate.ToPosition() } })); return result; } return null; }
/// <summary> /// Finds the nearest restaurant. /// </summary> /// <returns>The nearest restaurant.</returns> /// <param name="location">Location.</param> public async static Task <string> FindNearestRestaurantAsync(CLLocation location) { // Search for restaurants near our location. string restaurant = string.Empty; try { var searchRequest = new MKLocalSearchRequest { NaturalLanguageQuery = "food", Region = new MKCoordinateRegion(new CLLocationCoordinate2D(location.Coordinate.Latitude, location.Coordinate.Longitude), new MKCoordinateSpan(0.3f, 0.3f)) }; var localSearch = new MKLocalSearch(searchRequest); var localSearchResponse = await localSearch.StartAsync(); if (localSearchResponse.MapItems != null && localSearchResponse.MapItems.Length > 0) { var mapItem = localSearchResponse.MapItems[0]; restaurant = mapItem.Name; } } catch (Exception ex) { //Console.WriteLine("Error searching restaurants: " + ex); } return(restaurant); }
public async Task SearchAsync() { var request = new MKLocalSearchRequest(); request.NaturalLanguageQuery = "Grocery stores"; request.Region = map.Region; //we'll search on the current screen var local = new MKLocalSearch(request); var response = await local.StartAsync(); if (response != null && response.MapItems.Length > 0) { var stores = new List <GroceryStore> (); foreach (var item in response.MapItems) { stores.Add(new GroceryStore() { Name = item.Name, PhoneNumber = item.PhoneNumber, Address = item.Placemark.Title, Longitude = item.Placemark.Location.Coordinate.Longitude, Latitude = item.Placemark.Location.Coordinate.Latitude }); } AddStoreAnnotations(stores); } }
///<inheritdoc/> public async Task <IEnumerable <IPlaceResult> > GetPredictions(string query, MapSpan bounds) { List <IPlaceResult> result = new List <IPlaceResult>(); var region = new MKCoordinateRegion(bounds.Center.ToLocationCoordinate(), new MKCoordinateSpan(0.25, 0.25)); var request = new MKLocalSearchRequest { NaturalLanguageQuery = query, Region = region }; MKLocalSearch search = new MKLocalSearch(request); var nativeResult = await search.StartAsync(); if (nativeResult != null && nativeResult.MapItems != null) { result.AddRange(nativeResult.MapItems.Select(i => new TKNativeiOSPlaceResult { Description = string.Format("{0}, {1} {2}", i.Placemark.Title, i.Placemark.AdministrativeArea, i.Placemark.SubAdministrativeArea), Details = new TKPlaceDetails { Coordinate = i.Placemark.Coordinate.ToPosition(), FormattedAddress = i.Placemark.Title, InternationalPhoneNumber = i.PhoneNumber.ToString(), Website = i.Url.ToString() } })); return(result); } return(null); }
async Task SearchAsync (string what, string where) { var coord = here == null ? Parse (where) : here.Coordinate; MKCoordinateSpan span = new MKCoordinateSpan (0.25, 0.25); MKLocalSearchRequest request = new MKLocalSearchRequest (); request.Region = new MKCoordinateRegion (coord, span); request.NaturalLanguageQuery = what; MKLocalSearch search = new MKLocalSearch (request); MKLocalSearchResponse response; try{ response = await search.StartAsync (); } catch(Exception e){ return; } if (response == null) return; var section = new Section ("Search Results for " + what); results.Clear (); foreach (MKMapItem mi in response.MapItems) { results.Add (mi); var element = new StyledStringElement (mi.Name, mi.PhoneNumber, UITableViewCellStyle.Subtitle); element.Accessory = UITableViewCellAccessory.DisclosureIndicator; element.Tapped += () => { results [element.IndexPath.Row].OpenInMaps (); }; section.Add (element); } var root = new RootElement ("MapKit Search Sample") { section }; var dvc = new DialogViewController (root); (window.RootViewController as UINavigationController).PushViewController (dvc, true); }
/// <summary> /// Finds the nearest restaurant. /// </summary> /// <returns>The nearest restaurant.</returns> /// <param name="location">Location.</param> public async static Task<string> FindNearestRestaurantAsync(CLLocation location) { // Search for restaurants near our location. string restaurant = string.Empty; try { var searchRequest = new MKLocalSearchRequest { NaturalLanguageQuery = "food", Region = new MKCoordinateRegion(new CLLocationCoordinate2D(location.Coordinate.Latitude, location.Coordinate.Longitude), new MKCoordinateSpan(0.3f, 0.3f)) }; var localSearch = new MKLocalSearch(searchRequest); var localSearchResponse = await localSearch.StartAsync(); if(localSearchResponse.MapItems != null && localSearchResponse.MapItems.Length > 0) { var mapItem = localSearchResponse.MapItems[0]; restaurant = mapItem.Name; } } catch(Exception ex) { //Console.WriteLine("Error searching restaurants: " + ex); } return restaurant; }
async Task SearchAsync(string what, string where) { var coord = here == null?Parse(where) : here.Coordinate; MKCoordinateSpan span = new MKCoordinateSpan(0.25, 0.25); MKLocalSearchRequest request = new MKLocalSearchRequest(); request.Region = new MKCoordinateRegion(coord, span); request.NaturalLanguageQuery = what; MKLocalSearch search = new MKLocalSearch(request); MKLocalSearchResponse response; try{ response = await search.StartAsync(); } catch { return; } if (response == null) { return; } var section = new Section("Search Results for " + what); results.Clear(); foreach (MKMapItem mi in response.MapItems) { results.Add(mi); var element = new StyledStringElement(mi.Name, mi.PhoneNumber, UITableViewCellStyle.Subtitle); element.Accessory = UITableViewCellAccessory.DisclosureIndicator; element.Tapped += () => { results [element.IndexPath.Row].OpenInMaps(); }; section.Add(element); } var root = new RootElement("MapKit Search Sample") { section }; var dvc = new DialogViewController(root); (window.RootViewController as UINavigationController).PushViewController(dvc, true); }
private Task <MKPlacemark[]> SearchAsync(string query, double?lat, double?lng, double radiusInMeters) { var tcs = new TaskCompletionSource <MKPlacemark[]>(); var result = new MKPlacemark[0]; var o = new NSObject(); o.InvokeOnMainThread(async() => { try { var searchRequest = new MKLocalSearchRequest { NaturalLanguageQuery = query }; if (lat.HasValue && lng.HasValue && lat.Value != 0 && lng.Value != 0) { // You can use this parameter to narrow the list of search results to those inside or close to the specified region. // Specifying a region does not guarantee that the results will all be inside the region. It is merely a hint to the search engine. var region = MKCoordinateRegion.FromDistance(new CLLocationCoordinate2D(lat.Value, lng.Value), radiusInMeters * 2, radiusInMeters * 2); searchRequest.Region = region; } var search = new MKLocalSearch(searchRequest); var searchResult = await search.StartAsync(); result = searchResult.MapItems.Select(x => x.Placemark).ToArray(); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { tcs.TrySetResult(result); } }); return(tcs.Task); }
private async Task <List <MKMapItem> > Search(string forSearchString, CancellationToken cancellationToken) { MKLocalSearchRequest request = new MKLocalSearchRequest(); request.NaturalLanguageQuery = forSearchString; MKLocalSearch search = new MKLocalSearch(request); try { cancellationToken.ThrowIfCancellationRequested(); MKLocalSearchResponse response = await search.StartAsync(); cancellationToken.ThrowIfCancellationRequested(); return(response.MapItems.ToList()); } catch { return(null); } }