Xamarin iOS - 获取用户当前的纬度和经度(简单示例)

时间:2015-09-30 19:08:01

标签: c# xamarin maps

在Xamarin Forms文件中,我有一个带有方法的接口:GetCurrentLocation和两个属性(两个字符串):纬度和经度。

在Xamarin iOS文件中,我有一个与前面提到的接口连接的类。该方法(现在阐述)指出,在激活时,它创建一个MKMapView,得到用户的lat。和long。,并将它们设置为等于lat。而且很长。类的属性(如下所示)。

    public string latitude { get; set; }
    public string longitude { get; set; }
    public void GetCurrentLocation () {
        var vm = new MKMapView();
        latitude = mv.UserLocation.Coordinate.Latitude.ToString();
        longitude = mv.UserLocation.Coordinate.Longitude.ToString();
    }

对于这个例子,这个方法只会被调用一次,目的只是为了得到lat。而且很长。设备并以文本显示。

(在一些依赖服务恶作剧之后......)回到Xamarin Forms文件中,我有一个页面,我在其中调用方法来获取位置,然后使用新获取的坐标来显示设备' s文本中的当前位置。 (我确实在模拟器中设置了一个自定义位置,顺便说一句。)

现在,我的问题是,当我实际运行程序时,显示的字符串表示lat。而且很长。都是0.("纬度= 0,经度= 0")WHYYYYYYYYYYYY?!?!? 终极悲伤的脸

更新:这是我添加NuGet包后的代码---

首先 - IMapView(界面) - 包括以下内容:

    public interface IMapView {
            double latitude { get; set; }
            double longitude { get; set; }
            void GetLatandLong ();
            IGeolocator locator { get; set; }
            Position position { get; set; }
    };

第二 - MapView_iOS(本机类) - 包括以下内容:

    //Obvious instantiations of the Interfaced Properties...

    public async void GetLatandLong () {

            locator = CrossGeolocator.Current;
            locator.DesiredAccuracy = 100;

            position = await locator.GetPositionAsync (timeoutMilliseconds: 10000);

            latitude = Convert.ToDouble (position.Latitude);
            longitude = Convert.ToDouble (position.Longitude);
    }

第三 - App.cs(x.forms类) - 包括以下内容:

    //Among other basic startup stuff...

    protected override void OnStart()
    {
        DependencyService.Get<IMapView> ().GetLatandLong();
    }

第四和最后 - ContentPage(x.forms类) - 包含:

    //Outside of the constructor:
    protected override void OnAppearing () {
        DisplayAlert ("It Works!", DependencyService.Get<IMapView> ().latitude + " + " + DependencyService.Get<IMapView> ().longitude, "Okay");
    }

    //Inside of the constructor:
    var LabelGest = new TapGestureRecognizer();
    LabelGest.Tapped += (s, e) => {
            DisplayAlert ("It Works!", DependencyService.Get<IMapView> ().latitude + " + " + DependencyService.Get<IMapView> ().longitude, "Okay");
    };

    var MyLabel = new Label {
            Text = "My Label",
            GestureRecognizers = {LabelGest}
    };

所以你可以看到我有DisplayAlert显示我在两个不同位置设置的坐标:一次打开页面,一次点击该页面上的某个项目。当我点击该项目时,DisplayAlert会正确激活并给出正确的坐标。但是,第一个DisplayAlert(页面出现时激活的那个)不正确。它会在正确的时间弹出,但它始终会显示&#34; 0 + 0&#34;的消息。 :(这是我问题的最简单的例子。我在一个单独的页面上也有一个这样的地图:

    Content = new Map (MapSpan.FromCenterAndRadius (new Xamarin.Forms.Maps.Position
                    (DependencyService.Get<IMapView> ().latitude, DependencyService.Get<IMapView> ().longitude),
                        Distance.FromMiles (0.3))) {
            IsShowingUser = true,
            HeightRequest = 100,
            WidthRequest = 960,
            VerticalOptions = LayoutOptions.FillAndExpand
    }

这会产生类似的结果,开盘位置为&#34; 0,0&#34;在地图上。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)