Nano Hash - криптовалюты, майнинг, программирование

iPhone использует геокодер для создания строки, чтобы ее можно было передать в Google Maps

Итак, вот мой последний запрос. У меня есть все необходимые компоненты, однако мне нужен телефон для создания строки из геокодера, чтобы ее можно было передать в карты Google. Эта строка передается на сервер, а затем извлекается из этой базы данных в другой iPhone разными пользователями. У меня есть сторона получения/отправки базы данных, но мне нужно, чтобы геокодирование работало, чтобы оно могло создать адресную строку. Вот мой код: в качестве основы я использовал учебник по мапкиту Марка/ЛаМарша. Мой вопрос: Могу ли я использовать геокодер БЕЗ использования MapKit? И сэкономит ли это мне больше кода, чем то, что написано ниже? Спасибо!

- (IBAction)findMe {
CLLocationManager *lm = [[CLLocationManager alloc] init];
lm.delegate = self;
lm.desiredAccuracy = kCLLocationAccuracyBest;
[lm startUpdatingLocation];

progressBar.hidden = NO;
progressBar.progress = 0.0;
progressLabel.text = NSLocalizedString(@"Determining Current Location", @"Determining Current Location");

button.hidden = YES;
}
- (void)openCallout:(id<MKAnnotation>)annotation {
progressBar.progress = 1.0;
progressLabel.text = NSLocalizedString(@"Showing Annotation",@"Showing Annotation");
[mapView selectAnnotation:annotation animated:YES];
}
#pragma mark -
- (void)viewDidLoad {
mapView.mapType = MKMapTypeStandard;
//    mapView.mapType = MKMapTypeSatellite;
//    mapView.mapType = MKMapTypeHybrid;
}
- (void)viewDidUnload {
self.mapView = nil;
self.progressBar = nil;
self.progressLabel = nil;
self.button = nil;
}
- (void)dealloc {
[mapView release];
[progressBar release];
[progressLabel release];
[button release];
[address release];
[super dealloc];
    }
#pragma mark -
#pragma mark CLLocationManagerDelegate Methods
- (void)locationManager:(CLLocationManager *)manager 
didUpdateToLocation:(CLLocation *)newLocation 
       fromLocation:(CLLocation *)oldLocation {

if ([newLocation.timestamp timeIntervalSince1970] < [NSDate timeIntervalSinceReferenceDate] - 60)
    return;

MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(newLocation.coordinate, 2000, 2000); 
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];
[mapView setRegion:adjustedRegion animated:YES];

manager.delegate = nil;
[manager stopUpdatingLocation];
[manager autorelease];

progressBar.progress = .25;
progressLabel.text = NSLocalizedString(@"Reverse Geocoding Location", @"Reverse Geocoding Location");

MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate];
geocoder.delegate = self;
[geocoder start];
}
- (void)locationManager:(CLLocationManager *)manager 
   didFailWithError:(NSError *)error {

NSString *errorType = (error.code == kCLErrorDenied) ? 
NSLocalizedString(@"Access Denied", @"Access Denied") : 
NSLocalizedString(@"Unknown Error", @"Unknown Error");

UIAlertView *alert = [[UIAlertView alloc] 
                      initWithTitle:NSLocalizedString(@"Error getting Location", @"Error getting Location")
                      message:errorType 
                      delegate:self 
                      cancelButtonTitle:NSLocalizedString(@"Okay", @"Okay") 
                      otherButtonTitles:nil];
[alert show];
[alert release];
[manager release];
}


 #pragma mark -
    #pragma mark Alert View Delegate Methods
    - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    progressBar.hidden = YES;
    progressLabel.text = @"";
    }
    #pragma mark -
#pragma mark Reverse Geocoder Delegate Methods
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error      
{
UIAlertView *alert = [[UIAlertView alloc] 
                      initWithTitle:NSLocalizedString(@"Error translating coordinates into location", @"Error translating coordinates into location")
                      message:NSLocalizedString(@"Geocoder did not recognize coordinates", @"Geocoder did not recognize coordinates") 
                      delegate:self 
                      cancelButtonTitle:NSLocalizedString(@"Okay", @"Okay") 
                      otherButtonTitles:nil];
[alert show];
[alert release];

geocoder.delegate = nil;
[geocoder autorelease];
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark {
progressBar.progress = 0.5;
progressLabel.text = NSLocalizedString(@"Location Determined", @"Location Determined");

MapLocation *annotation = [[MapLocation alloc] init];
annotation.streetAddress = placemark.thoroughfare;
annotation.city = placemark.locality;
annotation.state = placemark.administrativeArea;
annotation.zip = placemark.postalCode;
annotation.coordinate = geocoder.coordinate;

NSString *firstTwo = [placemark.thoroughfare stringByAppendingFormat:@" %@",placemark.locality];

NSString *firstThree = [firstTwo stringByAppendingFormat:@", %@",placemark.administrativeArea];

NSString *makeAddress = [firstThree stringByAppendingFormat:@", %@",placemark.postalCode];



address = makeAddress;


NSLog(@"%@", address);

[mapView addAnnotation:annotation];

[annotation release];

geocoder.delegate = nil;
[geocoder autorelease];
}
#pragma mark -
#pragma mark Map View Delegate Methods
- (MKAnnotationView *) mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>) annotation {
static NSString *placemarkIdentifier = @"Map Location Identifier";
if ([annotation isKindOfClass:[MapLocation class]]) {
    MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:placemarkIdentifier];
    if (annotationView == nil)  {
        annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:placemarkIdentifier];
    }            
    else 
        annotationView.annotation = annotation;

    annotationView.enabled = YES;
    annotationView.animatesDrop = YES;
    annotationView.pinColor = MKPinAnnotationColorPurple;
    annotationView.canShowCallout = YES;
    [self performSelector:@selector(openCallout:) withObject:annotation afterDelay:0.5];


    progressBar.progress = 0.75;
    progressLabel.text = NSLocalizedString(@"Creating Annotation",@"Creating Annotation");

    return annotationView;
}
return nil;
}
- (void)mapViewDidFailLoadingMap:(MKMapView *)theMapView withError:(NSError *)error {
UIAlertView *alert = [[UIAlertView alloc] 
                      initWithTitle:NSLocalizedString(@"Error loading map", @"Error loading map")
                      message:[error localizedDescription] 
                      delegate:nil 
                      cancelButtonTitle:NSLocalizedString(@"Okay", @"Okay") 
                      otherButtonTitles:nil];
[alert show];
[alert release];
}

  • Любые идеи? :P не поможет вам получить ответ. Покажи нам, что ты пробовал. 25.02.2011
  • Документацию смотреть не пробовали? 25.02.2011
  • вы читали mapki.com/wiki/Google_Map_Parameters 25.02.2011
  • Не совсем понятно, в чем именно заключается ваш вопрос. Где проблема или что не работает? 25.02.2011
  • Я отредактировал свой исходный пост, включив в него свой вопрос. Прошу прощения за то, что не выразился более ясно. :П 25.02.2011

Ответы:


1

Я предполагаю, что когда вы говорите «Геокодер», вы на самом деле имеете в виду класс MKReverseGeocoder. Обратный геокодер является частью инфраструктуры Mapkit, поэтому, чтобы использовать его, вы должны включить его в файл, в котором вы его используете. Однако вам не нужно добавлять фактический MapView или что-то еще, вы можете просто получить информацию, которую дает вам обратный геокодер, и передать ее на свой сервер, как вы хотите. Надеюсь, это ответит на ваш вопрос.

12.03.2011
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..