2017-12-13 8 views
0

私は、GoogleマップAPIから迅速にJSONデータを解析しています。現在の位置を表示するには、google maps apiを使用して、現在の位置の緯度と経度をdidUpdateLocationsを使用して表示しています。 serviceLocationupdate() postメソッドを使用して緯度と経度の値をポストしていますが、jsonからの応答が得られません。 jsonからどのように応答(データ)を取得できますか?JSON Postメソッドがすぐに動作しない

私はこのAPIにその作業罰金適切なデータを取得する

VAR要求=のURLRequest(URL:URL(文字列:! "http://maps.googleapis.com/maps/api/geocode/json?latlng=13.026811,77.593773&sensor=true"))を使用することができる場合、これはコード

var lat = "" 
var long = "" 
var latlng:String = "" 


     func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

       let location:CLLocationCoordinate2D = manager.location!.coordinate 
       self.lat = String(location.latitude) 
       self.long = String(location.longitude) 
       latlng = self.lat+"," + self.long 


} 



func serviceLocationupdate() 
     { 

      var request = URLRequest(url: URL(string: "http://maps.googleapis.com/maps/api/geocode/json")!) 

    let session = URLSession.shared 

      request.httpMethod = "POST" 

     ----->> let bodyData = "latlng=\(latlng)&sensor=\("true")" 

      print("bodydata",bodyData) 

      request.httpBody = bodyData.data(using: String.Encoding.utf8); 


      let task = session.dataTask(with:request,completionHandler:{(d,response,error)in 

       do{ 


        if let data = d{ 
         do{ 
          let jsonResult = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary 
          if let results = jsonResult["results"] as? [[String : AnyObject]] { 

           for result in results{ 

            if let addressComponents = result["address_components"] as? [[String : AnyObject]] { 

             print(addressComponents) 
            } 
           } 
          } 

         } catch 
         { 

         } 

        } 

      } 
      }) 

      task.resume() 
     } 

ある

Iは、緯度と経度これは遊び場で動作

答えて

0

は、APIは、あなたが言及したURL(http://maps.googleapis.com/maps/api/geocode/json?latlng=13.026811,77.593773&sensor=true)で動作しますように、そしてあなただけGETの代わりに使用することができますPOST見えます。次のことを試してみてください。

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

      let location:CLLocationCoordinate2D = manager.location!.coordinate 
      self.lat = String(location.latitude) 
      self.long = String(location.longitude) 
      latlng = self.lat+","+self.long 
      serviceLocationupdate() 
} 

func serviceLocationupdate() 
    { 

     var request = URLRequest(url: URL(string: "http://maps.googleapis.com/maps/api/geocode/json?latlng=\(latlng)&sensor=true")!) 

     let task = session.dataTask(with:request,completionHandler:{(d,response,error)in 

       if let data = d{ 
        do{ 
         let jsonResult = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary 
         if let results = jsonResult["results"] as? [[String : AnyObject]] { 

          for result in results{ 

           if let addressComponents = result["address_components"] as? [[String : AnyObject]] { 

            print(addressComponents) 
           } 
          } 
         } 

        } catch 
        { 

        } 

       } 
     }) 

     task.resume() 
    } 
+0

おかげで、それがうまく働いてBRO – raj

0

を用いて現在位置を表示したい:

//: Playground - noun: a place where people can play 

import UIKit 
import XCTest 
import PlaygroundSupport 

PlaygroundPage.current.needsIndefiniteExecution = true 

func serviceLocationupdate() 
{ 
    let session = URLSession.shared 
    if let url = URL(string: "http://maps.googleapis.com/maps/api/geocode/json"), 
     var params = URLComponents(url: url, resolvingAgainstBaseURL: false) { 

     params.queryItems = [URLQueryItem]() 
     params.queryItems?.append(URLQueryItem(name: "latlng", value: "33.9250675,-84.339827")) 
     params.queryItems?.append(URLQueryItem(name: "sensor", value: "true")) 

     guard let finalURL = params.url else { 
      print("Failed to create URL") 
      return 
     } 
     var request = URLRequest(url: finalURL) 
     request.httpMethod = "POST" 

     let task = session.dataTask(with:request,completionHandler:{(data,response,error)in 

      if let error = error { 
       print("Error is \(error)") 
       return 
      } 

      if let resp = response as? HTTPURLResponse { 
       print("Response status code \(resp.statusCode)") 

       guard let data = data else { 
        return 
       } 

       do { 
        if let jsonResult = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary, 
         let results = jsonResult["results"] as? [[String : AnyObject]] { 

         for result in results { 
          if let addressComponents = result["address_components"] as? [[String : AnyObject]] { 
           print(addressComponents) 
          } 
         } 

        } else { 
         print("Could not coerce into a dictionary") 
        } 
       } catch _ { 
        print("An error occurred") 
       } 


      } else { 
       print("Invalid response") 
      } 
     }) 
     task.resume() 
    } 
} 

serviceLocationupdate() 
関連する問題