6

Próbuję zaimplementować, aby znaleźć pobliskie miejsca mojej bieżącej lokalizacji za pomocą map Google. Utworzyłem projekt w Google Developer Console i otrzymałem "ios APIkey" oraz "Server APIkey". Włączyłem też interfejs API Miejsc Google i pakiet SDK do Google Maps na iOS. Poniżej znajduje się kod, aby dowiedzieć się w pobliżu miejsc.Pobieranie miejsc w pobliżu za pomocą mapy google

func fetchPlacesNearCoordinate(coordinate: CLLocationCoordinate2D, radius: Double, name : String){ 
    var urlString = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?key=\(apiServerKey)&location=\(coordinate.latitude),\(coordinate.longitude)&radius=\(radius)&rankby=prominence&sensor=true" 
    urlString += "&name=\(name)" 

    urlString = urlString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)! 
    println(urlString) 
    if placesTask.taskIdentifier > 0 && placesTask.state == .Running { 
     placesTask.cancel() 

    } 
    UIApplication.sharedApplication().networkActivityIndicatorVisible = true 
    placesTask = session.dataTaskWithURL(NSURL(string: urlString)!) {data, response, error in 
     println("inside.") 
     UIApplication.sharedApplication().networkActivityIndicatorVisible = false 
     if let json = NSJSONSerialization.JSONObjectWithData(data, options:nil, error:nil) as? NSDictionary { 
      if let results = json["results"] as? NSArray { 
       for rawPlace:AnyObject in results { 
        println(rawPlace) 
        self.results.append(rawPlace as! String) 
       } 
      } 
     } 
      self.placesTask.resume() 
    } 
} 

Przekazana współrzędna to współrzędna bieżącej lokalizacji. Jeśli wykonam powyższy kod, nic się nie dzieje, ale wygenerowany adres URL jest prawidłowy. Jeśli wstawię ten adres URL w Google, otrzymam poprawne wyniki. Ale nic nie wyświetla się w mojej aplikacji. Pomóż mi rozwiązać ten problem. i daj mi znać, gdzie się mylę !!!

+0

Co zrobić, jeśli chcę wyszukać pobliskie biblioteki? –

Odpowiedz

9

Dodajesz swoje miejsca do tablicy wyników, ale zrobiłeś wszystko, aby zaktualizować swój widok mapy, na przykład dodając znaczniki do widoku mapy.

przykładowy kod dodać znacznik MapView:

let returnedPlaces: NSArray? = jsonResult["results"] as? NSArray 

    if returnedPlaces != nil { 

      for index in 0..<returnedPlaces!.count { 

       if let returnedPlace = returnedPlaces?[index] as? NSDictionary { 

         var placeName = "" 
         var latitude = 0.0 
         var longitude = 0.0 

         if let name = returnedPlace["name"] as? NSString { 
          placeName = name as String 
         } 

         if let geometry = returnedPlace["geometry"] as? NSDictionary { 
          if let location = geometry["location"] as? NSDictionary { 
           if let lat = location["lat"] as? Double { 
              latitude = lat 
           } 

           if let lng = location["lng"] as? Double { 
              longitude = lng 
            } 
          } 
         } 

         let marker = GMSMarker() 
         marker.position = CLLocationCoordinate2DMake(latitude, longitude) 
         marker.title = placeName 
         marker.map = self.mapView 
       } 
      } 
    } 

Widać this tutorial o tym, jak dostać się z miejsca w pobliżu Google Maps w Swift.

+0

Dzięki za odpowiedź Ztan !!! Ale nie zwraca żadnych miejsc w ogóle :( –

+0

Jaki jest twój adres URL żądania? – ztan

+0

Również twoje 'self.placesTask.resume()' powinno być poza twoją metodą 'dataTaskWithURL' zamknięcie metody – ztan

0

Wystarczy ustawić swój Latt, długi i GoogleAPIKey.

NSString *urlString= [NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=%@,%@&radius=2000&key=%@",lati,longi,kGoogleAPIKey]; 
[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) 
    { 
     if (connectionError) 
     { 
      NSLog(@"Error"); 
     } 
     else 
     { 
      NSDictionary *dictJson = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; 
      NSArray *arrayPlaces = [[NSArray alloc] initWithArray:[dictJson objectForKey:@"results"]]; 
      NSLog("Place %@",arrayPlaces); 

     } 
    }]; 

Co więcej, jeśli chcesz wyszukiwać według tekstu, po prostu wykonaj polecenie urlString, jak poniżej.

NSString *urlString = [NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/place/autocomplete/json?sensor=true&key=%@&language=en&input=%@&query=123+main+street&radius=50000&location=0.0,0.0&rankby=distance",kGoogleAPIKey,searchText]; 

W arrayPlace masz pobliskie miejsca.

Powiązane problemy