Пример кода IOS / iPhone для выбора местоположения с помощью названия места и / или карты с помощью API Карт Google? - PullRequest
0 голосов
/ 09 декабря 2011

Любой пример кода IOS / iPhone для выбора местоположения с помощью названия места и / или карты с помощью API Карт Google?

Итак, пример, позволяющий пользователю выбрать местоположение через пользователя обоих: - введите местоположение и разрешите API Карт Google попытаться найти местоположение и / или - перемещение метки на карте - так, например, вы можете напечатать место и приблизиться к карте, а затем настроить точное местоположение с картой - конечный результат будет Lat, Long

1 Ответ

4 голосов
/ 09 декабря 2011

То, что вы имеете в виду, - это прямое геокодирование, и, к сожалению, Apple не предоставила API для этого. Тем не менее, есть следующая лучшая вещь, сторонний API. Проверьте этот проект, я успешно использовал его в двух проектах, прекрасно работает: https://github.com/bjornsallarp/BSForwardGeocoder

Убедитесь, что вы включили необходимые файлы, чтобы вы могли включить BSForwardGeocoder без ошибок. Затем просто создайте класс, который вы хотите использовать в BSForwardGeocoderDelegate, и реализуйте в своем классе следующие два метода протокола:

-(void)queryAddress
{
  // Initialize member BSForwardGeocoder object
  if (forwardGeocoder == nil) {
    forwardGeocoder = [[BSForwardGeocoder alloc] initWithDelegate:self];
  }

  // send the request

  [forwardGeocoder findLocation:@"Saint Paul, MN"];
}

и

-(void)forwardGeocoderFoundLocation:(BSForwardGeocoder *)geocoder
{   
  /*
   * BSForwardGeocoder delegate method. Receives the callback upon geocoding data gather   completion.
   */
  if (forwardGeocoder.status == G_GEO_SUCCESS) {

    int searchResults = [forwardGeocoder.results count];

    for (int i = 0; i < searchResults; i++) {

      // See the sample project code fore other useful location properties...
      // Here I retrieve the returned lat and lon.

      Result *location = [forwardGeocoder.results objectAtIndex:i];
      mLatitude = location.latitude;
      mLongitude = location.longitude;
    } 
  } else { 
    NSString *message = @"";

    switch (forwardGeocoder.status) {
        case G_GEO_BAD_KEY:
            message =@"Bad Api Key";
            break;

        case G_GEO_UNKNOWN_ADDRESS:
            message = @"Address Not Found!";
            break;

        case G_GEO_TOO_MANY_QUERIES:
            message = @"Too Many Queries";   
            break;

        default:
            break;
    }

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Information" 
                                                    message:message
                                                   delegate:nil 
                                          cancelButtonTitle:@"OK" 
                                          otherButtonTitles: nil];  
    [ alert show ];
    [ alert release ];  
  }
}

Это вернет широту и долготу Сент-Пола, штат Миннесота, используя большую библиотеку, предоставленную sallarp.

Если вы хотите перетащить аннотации вокруг карты и получить информацию о их координатах, это также возможно, вам нужно сделать свой класс делегатом mkmapview и реализовать метод mapView:annotationView:didChangeDragState:fromOldState:. В вашей реализации сначала проверьте, равен ли newState mkAnnotationViewDragStateEnding, если это так, вы можете получить информацию о его координатах через свойство annotationView.annotation.coordinate. Конечно, вам нужно установить свойство draggable представлений аннотаций в YES. При желании вы можете отправить эти координаты в формате NSString в Google с помощью метода запроса BSForwardGeocoder и получить связанную с ним информацию.

Грег

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...