gpt4 book ai didi

ios - 使用Geocoder获取经度和纬度值

转载 作者:行者123 更新时间:2023-12-01 18:15:20 25 4
gpt4 key购买 nike

我写下面的代码从一个地址获取纬度和经度值。我有2个地址字段从和到。

-(void)getLatLong:(NSString *)string
{
CLGeocoder *geocoder = [[CLGeocoder alloc] init];

[geocoder geocodeAddressString:string completionHandler:^(NSArray *placemarks, NSError *error) {
if([placemarks count]) {
CLPlacemark *placemark = [placemarks objectAtIndex:0];
CLLocation *location = placemark.location;
CLLocationCoordinate2D coordinate = location.coordinate;
NSLog(@"coordinate = (%f, %f)", coordinate.latitude, coordinate.longitude);
if([string isEqualToString:self.from.text])
{
fromLat = coordinate.latitude;
fromLng = coordinate.longitude;

}
else if([string isEqualToString:self.to.text])
{
toLat = coordinate.latitude;
toLng = coordinate.longitude;
}
}
}];
}
- (void)display
{
NSLog(@"%f",fromLat);
NSLog(@"%f",fromLng);
NSLog(@"%f",toLat);
NSLog(@"%f",toLng);
}
- (IBAction)getLatLongs:(id)sender
{
[self getLatLong:self.from.text];
[self getLatLong:self.to.text];
[self display];
}

单击“首次提交”按钮后,输出为:
 2014-03-20 10:15:28.178 Application[746:70b] 0.000000  
2014-03-20 10:15:28.179 Application[746:70b] 0.000000
2014-03-20 10:15:28.180 Application[746:70b] 0.000000
2014-03-20 10:15:28.181 Application[746:70b] 0.000000
2014-03-20 10:15:29.019 Application[746:70b] coordinate = (17.387337, 78.480835)
2014-03-20 10:15:29.134 Application[746:70b] coordinate = (16.516667, 80.616667)

第二次单击提交按钮后,输出为:
 2014-03-20 10:15:28.178 Application[746:70b] 17.387337  
2014-03-20 10:15:28.179 Application[746:70b] 78.480835
2014-03-20 10:15:28.180 Application[746:70b] 16.516667
2014-03-20 10:15:28.181 Application[746:70b] 80.616667
2014-03-20 10:15:29.019 Application[746:70b] coordinate = (17.387337, 78.480835)
2014-03-20 10:15:29.134 Application[746:70b] coordinate = (16.516667, 80.616667)

我想知道为什么如果我在获取LaltLong方法之后调用显示方法,这是第一次获得全零的原因。

最佳答案

当您调用[self getLatLong:self.from.text];

它调用的[geocoder geocodeAddressString:string completionHandler:^{}];是GCD。哪个运行在不同的线程上。

然后,您立即调用[self display];,直到在GCD中未收到值为止。这就是为什么您第一次获得 0 的原因。
下次调用[self display];时,值已经存在,因此按原样打印。

-(void)display和GCD内使用断点以获得更多信息。

尝试在GCD中调用[self display];

-(void)getLatLong:(NSString *)string
{
CLGeocoder *geocoder = [[CLGeocoder alloc] init];

[geocoder geocodeAddressString:string completionHandler:^(NSArray *placemarks, NSError *error) {
if([placemarks count]) {
CLPlacemark *placemark = [placemarks objectAtIndex:0];
CLLocation *location = placemark.location;
CLLocationCoordinate2D coordinate = location.coordinate;
NSLog(@"coordinate = (%f, %f)", coordinate.latitude, coordinate.longitude);
if([string isEqualToString:self.from.text])
{
fromLat = coordinate.latitude;
fromLng = coordinate.longitude;
[self display];
}
else if([string isEqualToString:self.to.text])
{
toLat = coordinate.latitude;
toLng = coordinate.longitude;
[self display];
}
}
}];
}

- (void)display
{
NSLog(@"%f",fromLat);
NSLog(@"%f",fromLng);
NSLog(@"%f",toLat);
NSLog(@"%f",toLng);
}

- (IBAction)getLatLongs:(id)sender
{
[self getLatLong:self.from.text];
[self getLatLong:self.to.text];
}

关于ios - 使用Geocoder获取经度和纬度值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22523782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com