MapView 上的注解:坐标

Posted

技术标签:

【中文标题】MapView 上的注解:坐标【英文标题】:Annotations on MapView: Coordinates 【发布时间】:2012-06-21 20:03:06 【问题描述】:

我有两个NSStrings(地址和密钥),其中包含数字形式的坐标(经度和纬度)(34,56789...):

NSString *key = [allKeys objectAtIndex:i];
NSObject *obj = [DictionaryMap objectForKey:key];

NSString *address = [NSString stringWithFormat:@"%@", obj];


CLLocationCoordinate2D anyLocation;

anyLocation.latitude = [address doubleValue];

anyLocation.longitude  = [key doubleValue];

MKPointAnnotation *annotationPoint2 = [[MKPointAnnotation alloc] init]; annotationPoint2.coordinate = anyLocation;

annotationPoint2.title = @"Event";
annotationPoint2.subtitle = @"Microsoft's headquarters2";
[mapView addAnnotation:annotationPoint2]; 

...但我不明白为什么它不在与所写坐标相同的点上绘制。我认为这不起作用:

[address doubleValue]  

所以我尝试将其替换为:

location.latitude = NSNumber/NSString

但它给出了一个错误。

更新:

查看已加载:

 UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressGesture:)];
[self.mapView addGestureRecognizer:longPressGesture];

[mapView.userLocation setTitle:@"I am here"];

..然后...

-(void)handleLongPressGesture:(UIGestureRecognizer*)sender 
// This is important if you only want to receive one tap and hold event
if (sender.state == UIGestureRecognizerStateEnded)

    [self.mapView removeGestureRecognizer:sender];

else


    // Here we get the CGPoint for the touch and convert it to latitude and longitude coordinates to display on the map
    CGPoint point = [sender locationInView:self.mapView];
    CLLocationCoordinate2D locCoord = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];
    // Then all you have to do is create the annotation and add it to the map

MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init]; annotationPoint.coordinate = locCoord;

    annotationPoint.title = @"Microsoft";
    annotationPoint.subtitle = @"Microsoft's headquarters";
    [mapView addAnnotation:annotationPoint];

NSString *latitude = [[NSString alloc] initWithFormat:@"%f",locCoord.latitude];


    NSString *longitude = [[NSString alloc] initWithFormat:@"%f", locCoord.longitude];

    NSLog(latitude);
    NSLog(longitude);


    [[NSUserDefaults standardUserDefaults]setObject:latitude forKey:@"FolderLatitude"];
     [[NSUserDefaults standardUserDefaults]setObject:longitude forKey:@"FolderLongitude"];


...然后我将坐标保存在 JSON 文件中,然后从文件中读取它们。

【问题讨论】:

NSNumber/NSString 在 ObjC 中没有任何意义。有什么错误?你认为会发生什么?你能解释一下你想要完成的总体目标吗?不是很清楚。 不,我的意思是我先尝试了一个 NSNumber(不兼容的参数 strong),然后是一个 NSString(同样的错误) 【参考方案1】:

打印出您为纬度/经度设置的值。听起来这些值没有正确地转换为双精度值。如果字符串不是“xxx.xxx”格式,那么当您调用doubleValue 时,它们将无法正确转换为双精度。

【讨论】:

纬度:44.840291,经度:17.841797 你是这样打印出来的吗? NSLog(@"lat: %@, lon: %@", 地址, 键) NSString *latitude = [[NSString alloc] initWithFormat:@"%f",locCoord.latitude]; ..... NSLog(纬度); 抱歉:CGPoint point = [sender locationInView:self.mapView]; CLLocationCoordinate2D locCoord = [self.mapView convertPoint:point toCoordinateFromView:self.mapView]; ...在handleLongPressGesture下 您可能需要将最后一个参数更改为该点来自的任何视图【参考方案2】:

终于明白了:这是让它工作的正确方法:

NSString *myString = (string initialization here)

float stringFloat = [myString floatValue];

anyLocation.longitude = stringFloat;

【讨论】:

以上是关于MapView 上的注解:坐标的主要内容,如果未能解决你的问题,请参考以下文章

iOS App Mapview Line Draw

如何使用 MapFragment(不是 MapView)获取地图的坐标?

CollectionViewCell、MapView 和自定义注解

从 MySQL 数据库中提取 MapView 注释的坐标,但没有显示注释?

iOS 使用 CLLocation 和 MapView 一起获取坐标和更新地图

MapView 以用户坐标为中心缩放