Xamarin-靠近位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xamarin-靠近位置相关的知识,希望对你有一定的参考价值。

我找到了获取该位置的纬度和经度的代码。现在,我想找到一个靠近的位置。喜欢在附近找一家餐馆。

所以,如果我搜索地铁,我应该通过地铁到达附近的坐标。

要查找我使用此代码的位置:

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

但是我怎样才能到达附近?我想用Xamarin Forms。

答案

但是我怎样才能到达附近?我想用Xamarin Forms。

我猜您遵循官方文档Adding a Map in Xamarin.Forms来构建您的应用程序,但Xamarin Forms的APIs for Map仅用于显示和注释地图。

对于android平台,指南中使用的地图服务是Google Map,要找到附近的位置,我们需要使用Places API for Android,并且没有Xamarin Forms的API来完成这项工作。由于Xamarin.Forms是一个跨平台的UI工具包,允许开发人员创建跨平台共享的本机用户界面布局,因此我们需要使用DependencyService从PCL调用特定于平台的功能。

对于ios平台,我不熟悉iOS开发,但我认为Xamarin Forms工具包的地图使用原生iOS的地图,据我所知,iOS原生地图的地图服务取决于用户所在的地区。但是你可以按照iOS的官方文档About Location Services and Maps找到附近的地方。此外,我们需要使用DependencyService从PCL调用iOS平台API。

无论如何,目前还没有简单的方法从PCL调用API来找到一个地方,我们需要在每个平台上实现这个功能。

另一答案

要查找附近的位置,可以使用Google Places API Web Service中的Xamarin forms。使用此api可以从谷歌服务器检索谷歌地方数据。地方数据包括有关餐馆,旅馆,医院,健康中心等的信息。样本是这样的:

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

此根对象具有Web请求中提供的所有信息。现在您可以通过pins显示附近的位置,如下所示:

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

map是UI中Map Element的名字。

以上是关于Xamarin-靠近位置的主要内容,如果未能解决你的问题,请参考以下文章

片段中的 Xamarin Android Google 地图错误

Xamarin 表单 - 侧边菜单左侧栏、片段和列表视图

如何在运行时用 ChildFragmentManager 和没有 PagerSlidingTabStrip Xamarin.Android 标题的片段替换片段

Xamarin表单ViewCell Xaml片段

Xamarin.Android WebView App性能问题

使用制服时 Xamarin OpenGL 片段着色器的奇怪行为