2017-03-06 5 views
0

Ich habe den Code gefunden, um die Breite und Länge des Standortes zu erhalten. Jetzt möchte ich einen Standort in der Nähe finden. Wie finden Sie ein Restaurant in der Nähe.Xamarin-Get in der Nähe von Ort

Also, wenn ich U-Bahn suche, sollte ich die Koordinaten der Nähe von U-Bahn bekommen.

um den Ort zu finden ich diesen Code verwendet:

var locator = CrossGeolocator.Current; 
      locator.DesiredAccuracy = 50; 
      var position = await locator.GetPositionAsync(timeoutMilliseconds: 10000); 

Aber Wie kann ich die in der Nähe von Standort zu erhalten? Ich möchte in Xamarin Forms.

Antwort

1

Aber wie kann ich die Nähe von Ort bekommen? Ich möchte in Xamarin Forms.

Ich denke, das offizielle Dokument Adding a Map in Xamarin.Forms gefolgt Ihre Anwendung zu bauen, aber die APIs for Map von Xamarin Forms ist nur für die Anzeige und Beschriften Maps.

Für Android-Plattform ist der in der Anleitung verwendete Karten-Service Google Map, um einen nahe gelegenen Standort zu finden, müssen wir Places API for Android verwenden, und es gibt keine API von Xamarin Forms für diesen Job. Da es sich bei Xamarin.Forms um ein plattformübergreifendes UI-Toolkit handelt, mit dem Entwickler native Benutzeroberflächenlayouts für verschiedene Plattformen erstellen können, müssen wir DependencyService verwenden, um plattformspezifische Funktionen von PCL aufzurufen.

Für iOS-Plattform, ich bin nicht vertraut mit iOS-Entwicklung, aber ich denke, die Karte von Xamarin Forms Toolkit nutzt die Karte von nativen iOS, meines Karten-Service von iOS native Karte hängt von der Region, wo Benutzer sind. Aber Sie können dem offiziellen Dokument von iOS About Location Services and Maps folgen, um einen Ort in der Nähe zu finden. Außerdem müssen wir DependencyService verwenden, um iOS-Plattform-APIs von PCL aus aufzurufen.

Wie auch immer, es gibt keine einfache Möglichkeit, eine API von PCL aufzurufen, um einen Platz für jetzt zu finden, wir müssen diese Funktion auf jeder Plattform implementieren.

0

Um die Standorte in der Nähe zu finden, kann man die Google Places API Web Service in Xamarin forms verwenden. Mit dieser api können die Google Places-Daten von Google-Servern abgerufen werden. Die Orte Daten enthält Informationen über Restaurants, Lodges, Krankenhäuser, Gesundheitszentren und vieles mehr. Die Probe ist dies:

public async Task<List<Place>> GetNearByPlacesAsync() 
    { 
RootObject rootObject=null; 
     client = new HttpClient(); 
     CultureInfo In = new CultureInfo("en-IN"); 
     string latitude = position.Latitude.ToString(In); 
     string longitude = position.Longitude.ToString(In); 
     string restUrl = $"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location="+latitude+","+longitude+"&radius=1000&type="+search+"&key=your API"; 
     var uri = new Uri(restUrl);   
      var response = await client.GetAsync(uri); 
     if (response.IsSuccessStatusCode) 
     { 
      var content = await response.Content.ReadAsStringAsync(); 
      rootObject = JsonConvert.DeserializeObject<RootObject>(content); 
     } 
     else 
     { 
      await Application.Current.MainPage.DisplayAlert("No web response", "Unable to retrieve information, please try again", "OK"); 
     } 

      return rootObject.results; 
    } 

Dieses Stammobjekt haben alle Informationen in der Web-Anfrage gefragt. Jetzt können Sie den Standort in der Nähe über pins wie diese zeigen:

private async void AddPins() 
    { 
     try 
     { 
      var Places = await GetNearByPlacesAsync(); 
      if (Places.Count == 0|| Places==null) 
       await Application.Current.MainPage.DisplayAlert("No Places found", "No Places found for this location", "OK"); 
      else 
      { 
      map.Pins.Clear(); 
     foreach(Place place in Places) 
      { 

       map.Pins.Add(new Pin() 
       { 
        BindingContext = place, 
        Tag = place, 
        Label = place.name, 
        Position = new Position(place.geometry.location.lat, place.geometry.location.lng), 
       }); 
      } 
     } 
     } 
     catch (Exception ex) 
     { 
      System.Diagnostics.Debug.WriteLine(@"     ERROR{0}", ex.Message); 
     } 
    } 

Die map ist der Name Map Element in UI.