在Mapview上获取错误的注释位置 [英] Getting Wrong Annotation location on Mapview

查看:95
本文介绍了在Mapview上获取错误的注释位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 Mapview 上获得了错误的注释位置。我尝试了很多东西,但没有运气。
我得到了正确的坐标,但它显示在mapview上错误的位置。有谁知道为什么?

I'm getting the wrong annotation location on Mapview. I have tried so many things, but with no luck. I'm getting the right coordinate but it's displayed at the wrong location on mapview. Does anyone know why?

  for(WatchEntityLocation *watchEntityLocation in watchEntityLocationList)
    {
        locationArray=watchEntityLocation.locationList;
        NSLog(@"location count:%i",[locationArray count]);
        Location *location=[locationArray objectAtIndex:0];

        NSLog(@"watcher latlong:%g,%g",location.latitude,location.longitude);
        CLLocationCoordinate2D coordinate= CLLocationCoordinate2DMake(location.latitude,location.longitude);

        if (CLLocationCoordinate2DIsValid(coordinate)) {
              NSLog(@"valid Cordinate!");
        } else {
             NSLog(@"Invalid Cordinate!");
        }

        NSLog(@"latitude is::%g" , coordinate.latitude);
        NSLog(@"longitude is: :%g" , coordinate.longitude);

        MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(coordinate, 0.5*METERS_PER_MILE, 0.5*METERS_PER_MILE);
        MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];

        NSLog(@"adjustedRegion latitude is::%g" , adjustedRegion.center.latitude);
        NSLog(@"adjustedRegion longitude is: :%g" ,adjustedRegion.center.longitude);

        if ((adjustedRegion.center.latitude >= -90) && (adjustedRegion.center.latitude <= 90) && (adjustedRegion.center.longitude >= -180) && (adjustedRegion.center.longitude <= 180)){
            NSLog(@"valid region!");
             [mapView setRegion:adjustedRegion animated:YES];
              mapView.showsUserLocation = NO;
        }else{
             NSLog(@"Invalid region!");
        }
        [self addAnnotation:adjustedRegion.center tlocation:watchEntityLocation.watchEntity.name];}

-(void)addAnnotation:(CLLocationCoordinate2D)lcordinate tlocation:(NSString *)name
{
    MyAnnotation *annotation =
    [[MyAnnotation alloc] initWithCoordinates:lcordinate
                                        title:name
                                     subTitle:@""];

    annotation.pinColor = MKPinAnnotationColorGreen;
    [mapView addAnnotation:annotation];
    [annotationArray addObject:annotation];
}

    - (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views
    {
    for (MKAnnotationView *av in views) {
        id <MKAnnotation> mp = [av annotation];
        if (![mp isKindOfClass:[MKUserLocation class]])
        {
            [mv selectAnnotation:mp animated:YES];
            break;
        }
    }
    }

    - (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id     <MKAnnotation>)annotation
      {
      if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;
    if(annotation != map.userLocation)
    {
        MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"MyPin"];
        annView.animatesDrop=TRUE;
        annView.canShowCallout = YES;
        [annView setSelected:YES];
        annView.pinColor = MKPinAnnotationColorRed;
        annView.calloutOffset = CGPointMake(15, 15);
        return annView;
    }


推荐答案

我想检查你的lat- long数据类型及其值。

I think check your lat-long datatype and its value.

这篇关于在Mapview上获取错误的注释位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆