使用iPhone应用程序中的Map View读取当前位置

时间:2010-09-29 10:04:05

标签: iphone

我想在我的iPhone应用程序中使用地图视图阅读我当前的位置。

我当前的位置可能会根据时间而改变。

现在我将成为一个地方,一小时后我会走几公里。但我的目标是,每当我在那里,当前的位置,我都会想要阅读。

如果有任何方法可以这样阅读。

4 个答案:

答案 0 :(得分:2)

看一下Core位置管理器。 http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocationManager_Class/

这是相当直接的:

  • 创建位置管理器并注册委托。
  • 启动位置管理器。
  • 当位置管理器检测到位置更改时,它将通过locationManager通知您的委托:didUpdateToLocation:fromLocation:

地图视图是一个演示组件 - 如果您想要控制位置感知,请使用位置管理器。

答案 1 :(得分:2)

如果你有一个名为mapView的MKMapView对象,你可以这样做:

mapView.showsUserLocation = YES;

这将打开MKMapView的内置定位服务。您无需必须处理CLLocation Manager,因为MKMapView将处理为您定位设备的工作。

现在,如果您以前从未与代表合作过,那么接收MKMapView生成的更新会更加棘手。

在你的.h中,你想采用<MKMapViewDelegate>协议。

然后,紧接着上面一行,说:

mapView.delegate = self;

然后,实现以下方法:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    // inside here, userLocation is the MKUserLocation object representing your
    // current position. 

    CLLocation *whereIAm = userLocation.location;
    NSLog(@"I'm at %@", whereIAm.description);

    float latitude = whereAmI.coordinate.latitude;
    float longitude = whereAmI.coordinate.longitude;

    // etc.

}

每次MKMapView更新其位置时都会调用该方法,可能至少每隔几秒就会调用一次。

答案 2 :(得分:2)

答案 3 :(得分:2)

   mapView.delegate=self;
enter code here

MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta = 0.2;
span.longitudeDelta = 0.2;
region.span = span;
[mapView setRegion:region animated:YES];

NSMutableArray* annotations=[[NSMutableArray alloc] init];
CLLocationCoordinate2D theCoordinate1;


CLLocationManager *manager = [[CLLocationManager alloc] init];
double lat=manager.location.coordinate.latitude;
double lon=manager.location.coordinate.longitude;


NSString *lat_str1=[NSString stringWithFormat:@"%f",lat];
NSString * long_str1=[NSString stringWithFormat:@"%f",lon];

theCoordinate1.latitude = [lat_str1 floatValue];
theCoordinate1.longitude = [long_str1 floatValue];


MyAnnotation *myAnnotation1=[[MyAnnotation alloc] init];
myAnnotation1.coordinate=theCoordinate1;
myAnnotation1.title=@"Current Address";
myAnnotation1.subtitle=[arr objectAtIndex:0];
[annotations addObject:myAnnotation1];
[myAnnotation1 release];

for(int i=0; i<[annotations count];i++)
{
    [mapView addAnnotation:[annotations objectAtIndex:i]];
}

MKMapRect flyTo = MKMapRectNull;
for (id <MKAnnotation> annotation in annotations) {


    MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
    MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0);
    if (MKMapRectIsNull(flyTo)) {
        flyTo = pointRect;
    } else {
        flyTo = MKMapRectUnion(flyTo, pointRect);
    }
}

    mapView.visibleMapRect = flyTo;

}

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{


    CLLocationManager *manager = [[CLLocationManager alloc] init];
    double lat=manager.location.coordinate.latitude;
    double lon=manager.location.coordinate.longitude;

    SBJSON *parser = [[SBJSON alloc] init];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://maps.google.com/maps/geo?output=json&oe=utf-8&ll=%@,%@&key=API_KEY",lat_str1,long_str1]]];
      NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
    NSDictionary *statuses = [parser objectWithString:json_string error:nil];


    NSArray *resultsnew1=[statuses objectForKey:@"Placemark"];



arr=[[NSMutableArray alloc]init];


for(NSDictionary *sub333 in resultsnew1)
{

    [arr addObject:[sub333 objectForKey:@"address"]];

    NSString*add_str=[NSString stringWithFormat:@"%@",arr];
    atm_address.text=add_str;

}



address.text=[arr objectAtIndex:0];

}