6

Cố gắng triển khai để tìm các địa điểm gần đây của vị trí hiện tại của tôi bằng cách sử dụng bản đồ google. Tôi đã tạo một dự án trong Google Developer Console và có 'ios APIkey' và 'Server APIkey'. Tôi cũng đã bật API Google Địa điểm và Google Maps SDK cho iOS. Dưới đây là mã để tìm gần các địa điểm.Tìm nạp địa điểm lân cận bằng cách sử dụng bản đồ 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() 
    } 
} 

Tọa độ được truyền là tọa độ vị trí hiện tại. Nếu tôi thực thi mã trên, không có gì xảy ra nhưng url được tạo là hợp lệ. Nếu tôi đặt url đó vào Google, tôi sẽ nhận được kết quả chính xác. Nhưng không có gì hiển thị trong ứng dụng của tôi. Xin hãy giúp tôi giải quyết vấn đề này. và xin vui lòng cho tôi biết nơi nào sai!

+0

Điều gì sẽ xảy ra nếu tôi muốn tìm kiếm các thư viện lân cận? –

Trả lời

9

Bạn thêm địa điểm của mình vào mảng kết quả, nhưng bạn đã làm bất cứ điều gì để cập nhật chế độ xem bản đồ, ví dụ: thêm điểm đánh dấu vào chế độ xem bản đồ của bạn.

mẫu mã thêm điểm đánh dấu để 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 
       } 
      } 
    } 

Bạn có thể thấy this tutorial về làm thế nào để có được địa điểm lân cận với Google Maps trong Swift.

+0

Cảm ơn bạn đã trả lời Ztan !!! Nhưng nó không trả lại bất kỳ nơi nào cả: ( –

+0

URL yêu cầu của bạn là gì? – ztan

+0

Ngoài ra 'self.placesTask.resume()' của bạn phải nằm ngoài phương thức 'dataTaskWithURL' của bạn đóng cửa – ztan

0

Chỉ cần đặt Latt của bạn, dài và 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); 

     } 
    }]; 

Hơn nữa, nếu bạn muốn tìm kiếm địa điểm bằng văn bản, chỉ cần tạo urlString như bên dưới.

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]; 

Trong mảngBạn có địa điểm gần đó.

Các vấn đề liên quan