0

実際の場所の座標 (CLLocationManager) を逆ジオコーディング (CLGeoCoder) に使用したい。私はこのコードを持っています:

        locationMgr = new CLLocationManager();
        locationMgr.DesiredAccuracy = CLLocation.AccuracyNearestTenMeters;
        locationMgr.DistanceFilter = 10;
        locationMgr.UpdatedLocation += (object sender, CLLocationUpdatedEventArgs e) => {
            Task.latitude = e.NewLocation.Coordinate.Latitude;
            Task.longitude = e.NewLocation.Coordinate.Longitude;
            locationMgr.StopUpdatingLocation();
        };

        btnLocation = new UIBarButtonItem(UIImage.FromFile("Icons/no-gps.png"), UIBarButtonItemStyle.Plain, (s,e) => {
            if (CLLocationManager.LocationServicesEnabled) { 
                    locationMgr.StartUpdatingLocation();

                    geoCoder = new CLGeocoder();
                    geoCoder.ReverseGeocodeLocation(new CLLocation(Task.latitude, Task.longitude), (CLPlacemark[] place, NSError error) => {
                        adr = place[0].Name+"\n"+place[0].Locality+"\n"+place[0].Country;
                        Utils.ShowAlert(XmlParse.LocalText("Poloha"), Task.latitude.ToString()+"\n"+Task.longitude.ToString()+"\n\n"+adr);
                    });
            }
            else {
                Utils.ShowAlert(XmlParse.LocalText("PolohVypnut"));
            }
        });

UpdatedLocation() には数秒かかるため、ReverseGeocodeLocation() の入力は Task.latitude=0 および Task.longitude=0 です。

ReverseGoecodeLocation() の前に正しい値 (Task.latitude、Task.longitude) を待つにはどうすればよいですか?

助けてくれてありがとう。

4

1 に答える 1

0

が位置を取得する前に、ジオコーダのReverseGeocodeLocationメソッドが呼び出されCLLocationManagerます。

呼び出しても、イベントがすぐにトリガーされるStartUpdatingLocationわけではありません。UpdatedLocationさらに、iOS 6 を使用している場合、UpdatedLocationトリガーされることはありません。LocationsUpdated代わりにイベントを使用してください。

例:

locationManager.LocationsUpdated += (sender, args) => {

    // Last item in the array is the latest location
    CLLocation latestLocation = args.Locations[args.Locations.Length - 1];
    geoCoder = new CLGeocoder();
    geoCoder.ReverseGeocodeLocation(latestLocation, (pl, er) => {

        // Read placemarks here

    });

};
locationManager.StartUpdatingLocation();
于 2012-12-05T17:15:54.477 に答える