2016-02-22 9 views
0

Я пытаюсь использовать координаты, возвращенные с помощью CLLocationManager, чтобы проверить, соответствуют ли они близкому совпадению для любого локального бизнеса - если бы я оказался в Starbucks, например , Я бы хотел, чтобы мое приложение предлагало, что на основе моих координат я стоял в Starbucks. Если бы я был в 20 метрах от Starbucks, но это был ближайший адрес, где я стоял, я бы хотел, чтобы он предложил «Starbucks».Ищете информацию о названии бизнеса из координат с помощью CLLocation и/или Mapkit

Я могу вернуть CLPlacemarks без проблем, но содержащаяся в них информация не содержит названия компании в любом месте. Я нахожусь в Великобритании, поэтому, например, Nando's на Gloucester Road в Лондоне имеет адрес «170 Gloucester Road, Лондон, SW7 4ST». Я могу вернуть 170 Gloucester Road, London, SW7 4ST в CLPlacemark, без проблем, но нигде не упоминает о Нандо.

Я читал в различных сообщениях, что информация может иметь свойство имени или области интересов или даже в пределах отформатированного свойства адреса, но мое обширное тестирование в Центральном Лондоне предполагает, что это не так, в Великобритании на любом ставка. Даже в США «Apple Inc» упоминается только в свойстве форматированного адреса адреса до 1 Infinite Loop.

Я попытался выполнить это вместо того, чтобы получить координаты пользователя с помощью CLLocation, а затем использовать их в качестве основы для программного поиска MapKit - это просто возвращает адрес снова, а не название компании.

Проделав также небольшое тестирование конечных пользователей приложения Apple Maps, которое я, в остальном, является огромным поклонником, похоже, что он возвращает довольно неполные результаты, если искать локально вообще, например, например. «бар», «ресторан». Некоторые местные места включены, другие - нет, иногда результаты содержат места, которые находятся довольно далеко, хотя я знаю, что в непосредственной близости есть еще много ресторанов.

Я быстро достигаю единственного пути достижения того, что хочу, - это использовать API Google Адресов, который я надеялся избежать по ряду или причинам, не в последнюю очередь из-за моего большого недостатка опыта программирования iOS (в Swift btw ...)

Если кто-нибудь может окончательно сообщить, что в Mapkit нет возможности сделать это изначально, и что мне нужно использовать API Google Адресов, то, по крайней мере, я знаю, и могу просто продолжить с ним, - но если есть способ, я был бы очень признателен, чтобы знать, что это такое ...

благодарим заранее!

ответ

0

меня сталкиваются с аналогичными проблемами с MapKit, и через некоторое время обнаружили, что Google размещает API гораздо лучше для такого рода задач проверки этого link найти образец кода о том, как использовать Google Places, чтобы получить текущее местоположение

в основном вам нужно

- Install Google places SDK

-Import Google карты для вашего класса

import GoogleMaps 

-Добавить места клиента на классе

var placesClient: GMSPlacesClient? 

-init ваши места клиента, вероятно, на вашем viewDidLoad()

placesClient = GMSPlacesClient() 

-И добавить этот код, где вам это нужно искать в текущем месте

placesClient!.currentPlaceWithCallback({ (placeLikelihoods, error) -> Void in 
    if error != nil { 
    print("Current Place error: \(error.localizedDescription)") 
    return 
    } 

    for likelihood in placeLikelihoods.likelihoods { 
    if let likelihood = likelihood as? GMSPlaceLikelihood { 
     let place = likelihood.place 
     print("Current Place name \(place.name) at likelihood \(likelihood.likelihood)") 
     print("Current Place address \(place.formattedAddress)") 
     print("Current Place attributions \(place.attributions)") 
     print("Current PlaceID \(place.placeID)") 
    } 
    } 
}) 

Notes about the likelihood values:

The likelihood provides a relative probability of the place being the best match within the list of returned places for a single request. You can't compare likelihoods across different requests. The value of the likelihood will be between 0 and 1.0. The sum of the likelihoods in a returned array of GMSPlaceLikelihood objects is always less than or equal to 1.0. Note that the sum isn't necessarily 1.0. For example, to represent a 55% likelihood that the correct place is Place A, and a 35% likelihood that it's Place B, the likelihood array has two members: Place A with a likelihood of 0.55 and Place B with a likelihood of 0.35.

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

+0

Эй-Франциско - большое спасибо для вашей помощи; это было решение, которое я искал. Я запускаю Xcode 7.2, и я обнаружил, что мне пришлось немного изменить синтаксис, чтобы заставить его работать –

+0

Спасибо, я обновил синтаксис для работы с быстрым 2.0 и Xcode 7.2 –

0

дальше к очень полезному ответу Франциско, это настройка, которую я должен был внести в currentPlaceWithCallback - я удалил: GMSPlaceLikelihoodList! давшие следующее сообщение об ошибке: не может преобразовать значение типа GMSPlaceLikelihoodList ожидаемого типа аргумента ....

Это исправленный код:

placesClient!.currentPlaceWithCallback({ (placeLikelihoods, error) -> Void in 
     if error != nil { 
      print("Current Place error: \(error!.localizedDescription)") 
      return 
     } 

     for likelihood in placeLikelihoods!.likelihoods { 
      if let likelihood = likelihood as? GMSPlaceLikelihood { 
       let place = likelihood.place 
       print("Current Place name \(place.name) at likelihood \(likelihood.likelihood)") 
       print("Current Place address \(place.formattedAddress)") 
       print("Current Place attributions \(place.attributions)") 
       print("Current PlaceID \(place.placeID)") 


      } 
     } 

})

+0

Обновлен мой ответ, чтобы включить эти изменения в синтаксис –

 Смежные вопросы

  • Нет связанных вопросов^_^