如何使用iOS地理定位框架获取用户位置

如何使用iOS地理定位框架获取用户位置,ios,objective-c,geolocation,location,mapkit,Ios,Objective C,Geolocation,Location,Mapkit,我希望做出一个“如果”声明,利用用户的地理位置来创建结果。我不知道怎么做 例如: If (USERLOCATION = CANADA) { //then do something here } Else { //do something else } 您需要找到一个第三方API,该API可以给出关于纬度/经度是否在加拿大的答案,或者您需要定义一个表示“加拿大”的边界框,并测试您的位置是否在其中 用坐标定义“加拿大”可能有点棘手,因为它不是一个正方形,尽管有一些重要的部分是漂亮的直线。可以

我希望做出一个“如果”声明,利用用户的地理位置来创建结果。我不知道怎么做

例如:

If (USERLOCATION = CANADA) {

//then do something here

}

Else {
//do something else
}

您需要找到一个第三方API,该API可以给出关于纬度/经度是否在加拿大的答案,或者您需要定义一个表示“加拿大”的边界框,并测试您的位置是否在其中


用坐标定义“加拿大”可能有点棘手,因为它不是一个正方形,尽管有一些重要的部分是漂亮的直线。可以通过提供边界坐标列表来帮助您定义框。

您需要找到第三方API,该API可以回答纬度/经度是否在加拿大,或者您需要定义一个表示“加拿大”的边界框,并测试您的位置是否在其中


用坐标定义“加拿大”可能有点棘手,因为它不是一个正方形,尽管有一些重要的部分是漂亮的直线。可以通过提供边界坐标列表来帮助您定义框。

您需要找到第三方API,该API可以回答纬度/经度是否在加拿大,或者您需要定义一个表示“加拿大”的边界框,并测试您的位置是否在其中


用坐标定义“加拿大”可能有点棘手,因为它不是一个正方形,尽管有一些重要的部分是漂亮的直线。可以通过提供边界坐标列表来帮助您定义框。

您需要找到第三方API,该API可以回答纬度/经度是否在加拿大,或者您需要定义一个表示“加拿大”的边界框,并测试您的位置是否在其中


用坐标定义“加拿大”可能有点棘手,因为它不是一个正方形,尽管有一些重要的部分是漂亮的直线。可以通过提供边界坐标列表来帮助您定义框。

如果您有用户位置,可以使用此代码并将国家名称与您的国家/地区匹配。尽管可能存在本地化限制

- (void)reverseGeocode:(CLLocation *)location {
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {

        if (!error) {
            CLPlacemark *placemark = [placemarks lastObject];
            NSLog(@"Country: %@", placemark.country);

        } else
            NSLog(@"Error %@", error.description);
    }];
}


然后使用
[placemark.country caseInsensitiveCompare:@“canada”]==SensorDeredName
与您要查找的国家/地区匹配。

如果您有用户位置,您可以使用此代码并将国家/地区名称与您的国家/地区匹配。尽管可能存在本地化限制

- (void)reverseGeocode:(CLLocation *)location {
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {

        if (!error) {
            CLPlacemark *placemark = [placemarks lastObject];
            NSLog(@"Country: %@", placemark.country);

        } else
            NSLog(@"Error %@", error.description);
    }];
}


然后使用
[placemark.country caseInsensitiveCompare:@“canada”]==SensorDeredName
与您要查找的国家/地区匹配。

如果您有用户位置,您可以使用此代码并将国家/地区名称与您的国家/地区匹配。尽管可能存在本地化限制

- (void)reverseGeocode:(CLLocation *)location {
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {

        if (!error) {
            CLPlacemark *placemark = [placemarks lastObject];
            NSLog(@"Country: %@", placemark.country);

        } else
            NSLog(@"Error %@", error.description);
    }];
}


然后使用
[placemark.country caseInsensitiveCompare:@“canada”]==SensorDeredName
与您要查找的国家/地区匹配。

如果您有用户位置,您可以使用此代码并将国家/地区名称与您的国家/地区匹配。尽管可能存在本地化限制

- (void)reverseGeocode:(CLLocation *)location {
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {

        if (!error) {
            CLPlacemark *placemark = [placemarks lastObject];
            NSLog(@"Country: %@", placemark.country);

        } else
            NSLog(@"Error %@", error.description);
    }];
}



然后使用
[placemark.country caseinsensitiviecompare:@“canada”]==sensorderedsame
与您要查找的国家匹配。

因此,如果我使用此选项,我如何将其纳入上述if声明中?谢谢。因此,如果我有一个enum语句,它定义了节号(即enum{sectionOne=0,sectionTwo=1,sectionTwo=2};),我将如何根据位置更改节号?我在考虑一个if语句,其中包含您编辑过的答案,但似乎不起作用。更改章节号是什么意思?这看起来和上面的问题不同,我有一个tableview,其中我有不同的部分,我用一个enum语句来阐述。最初我认为我可以在enum语句中放置if语句,反之亦然,但似乎我不能这样做来测试代码是否会根据用户位置更改tableview节号(或顺序)。例如,如果您在加拿大,这些部分将是sectionA、sectionB和sectionC。但是,如果您在英国,它将是sectionC、sectionB和sectionA。虽然枚举应该可以工作,但在收到用户数据以重新加载tableView后,不要忘记调用
[self.tableView reloadData]
。有一些建议,我认为最好的解决方案是在开始时用正确的节顺序初始化数据源,而不是尝试在tableview委托方法中找出它。既然我已经回答了上面的问题,你能接受我的回答吗?:)那么,如果我使用这个,我如何将它纳入我的if声明中呢?谢谢。因此,如果我有一个enum语句,它定义了节号(即enum{sectionOne=0,sectionTwo=1,sectionTwo=2};),我将如何根据位置更改节号?我在考虑一个if语句,其中包含您编辑过的答案,但似乎不起作用。更改章节号是什么意思?这看起来和上面的问题不同,我有一个tableview,其中我有不同的部分,我用一个enum语句来阐述。最初我认为我可以在enum语句中放置if语句,反之亦然,但似乎我不能这样做来测试代码是否会根据用户位置更改tableview节号(或顺序)。例如,如果您在加拿大,这些部分将是sectionA、sectionB和sectionC。但是,如果您在英国,它将是sectionC、sectionB和sectionA。虽然枚举应该可以工作,但在收到用户数据以重新加载tableView后,不要忘记调用
[self.tableView reloadData]
。有一些建议,我认为最好的解决方案是在开始时用正确的节顺序初始化数据源,而不是尝试在tableview委托方法中找出它。既然我已经回答了