2017-02-10 4 views
0

Всякий раз, когда я ищу адрес на карте Google и геокодирую его, моя карта не добавляет маркер, пока я не запустил поиск во второй раз. Может ли кто-нибудь сказать мне, почему это так? В основном я искал адрес, пропустил его имя в сторонний геокодер и мутировал глобальный маркер, который я создал на карте. Это значит, что у меня есть только один маркер за раз на карте. По какой-то причине, однако, он никогда не помещает маркер в первый раз, когда я ищу адрес, я должен искать другой адрес. Странно то, что он не должен быть одним и тем же адресом, если я введу другой адрес, он просто изменит заголовок маркера, поставив туда, откуда я изначально хотел, чтобы он ушел.Маркер геокодирования на Swift

Мой код:

extension EventCreatorVC: GMSAutocompleteResultsViewControllerDelegate { 
func resultsController(_ resultsController: GMSAutocompleteResultsViewController, 
         didAutocompleteWith place: GMSPlace) { 
    searchController?.isActive = false 
    // Do something with the selected place. 
    print("Place name: \(place.name)") 
    print("Place address: \(place.formattedAddress)") 
    print("Place attributions: \(place.attributions)") 

    Nominatim.getLocation(fromAddress: place.name, completion: {(error, location) -> Void in 

     let latitude = (location!.latitude as NSString).doubleValue 
     let longitude = (location!.longitude as NSString).doubleValue 

     self.locationOfMarker = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) 

    }) 

    markerPlace(locationOfMarker: locationOfMarker, name: place.name) 

} 

func markerPlace(locationOfMarker: CLLocationCoordinate2D, name: String) { 
    marker.position = locationOfMarker 
    marker.title = name 


} 

func resultsController(_ resultsController: GMSAutocompleteResultsViewController, 
         didFailAutocompleteWithError error: Error){ 
    // TODO: handle the error. 
    print("Error: ", error.localizedDescription) 
} 

// Turn the network activity indicator on and off again. 
func didRequestAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) { 
    UIApplication.shared.isNetworkActivityIndicatorVisible = true 
} 

func didUpdateAutocompletePredictions(forResultsController resultsController: GMSAutocompleteResultsViewController) { 
    UIApplication.shared.isNetworkActivityIndicatorVisible = false 
} 
} 
+0

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

+0

Простите, я не уверен, что вы имеете в виду. Где я должен поставить линию? – Willstarr

+0

Проверьте мой ответ –

ответ

1

Теперь ваша проблема в том, как ваша compeletion часть займет некоторое время, чтобы получить законченный. Так что я сделать его задержать с этим изменений в код, как

Nominatim.getLocation(fromAddress: place.name, completion: {(error, location) -> Void in 

       let latitude = (location!.latitude as NSString).doubleValue 
       let longitude = (location!.longitude as NSString).doubleValue 

       self.locationOfMarker = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) 
       let delayTime = DispatchTime.now() + Double(Int64(0.5 * Double(NSEC_PER_SEC)))/Double(NSEC_PER_SEC) 
       DispatchQueue.main.asyncAfter(deadline: delayTime) 
       { 
        self.markerPlace(locationOfMarker: self.locationOfMarker, name: "") 
        self.mapView.animate(toLocation: self.locationOfMarker) 
       } 
     }) 

Изменение метода, как на мину, что он решит проблему.
Благодарим за оказанную поддержку

+0

Большое вам спасибо! Очень интересное решение – Willstarr

+0

Вы примете мой ответ? Пожалуйста, –

+0

Я посылаю вам приглашение в видеовстрече, мы пообщаемся за вашу работу. Примите мое приглашение –