Arhn - архитектура программирования

Аннотации к MapView: координаты

У меня есть два 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. В чем ошибка? Как вы думаете, что произойдет? Можете ли вы объяснить, чего вы пытаетесь достичь в целом? Это не очень ясно. 22.06.2012
  • Нет, я просто имел в виду, что сначала попробовал с NSNumber (несовместимый сильный параметр), а затем с NSString (та же ошибка) 22.06.2012

Ответы:


1

Распечатайте значения, которые вы устанавливаете для широты/долготы. Похоже, эти значения не преобразуются в двойные должным образом. Если строки не в формате "xxx.xxx", они не будут должным образом преобразованы в удвоения при вызове doubleValue.

21.06.2012
  • широта: 44.840291, долгота: 17.841797 22.06.2012
  • ты их так распечатывал? NSLog(@lat: %@, lon: %@, адрес, ключ) 22.06.2012
  • NSString *latitude = [[NSString alloc] initWithFormat:@%f,locCoord.latitude]; ..... NSLog(широта); 22.06.2012
  • Извините: CGPoint point = [sender locationInView:self.mapView]; CLLocationCoordinate2D locCoord = [self.mapView convertPoint:point toCoordinateFromView:self.mapView]; ...под ручкойLongPressGesture 22.06.2012
  • Возможно, вам придется изменить последний параметр на любой вид, из которого исходит точка. 22.06.2012
  • Как я могу это сделать? Координации стандартные, я думаю 22.06.2012
  • Пожалуйста, обновите свой ответ, указав весь код для распознавателя жестов, как вы его создаете и метод действия. 22.06.2012

  • 2

    Наконец я понял: это правильный способ заставить его работать:

    NSString *myString = (string initialization here)
    
    float stringFloat = [myString floatValue];
    
    anyLocation.longitude = stringFloat;
    
    22.06.2012
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..