2017-06-16 7 views
0

私は原点と目的地の間の距離を返すgoogleマトリックスサービスのリクエストを作成しようとしています。Googleマトリックス - 出発地と目的地の間の距離を計算

次のとおりです。Google Docs

が正しい要求を構築する方法を見つけ出すことはできません。

SUCCESS: { 
    "destination_addresses" =  (
    ); 
    "origin_addresses" =  (
    ); 
    rows =  (
    ); 
    status = "INVALID_REQUEST"; 
} 

https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&destinations%5B%5D=30.37577%2C-81.7837&destinations%5B%5D=26.89648%2C-82.00874&destinations%5B%5D=30.48638%2C-84.42159&destinations%5B%5D=35.11241%2C-80.95421&destinations%5B%5D=33.82343%2C-84.12118&destinations%5B%5D=33.67012%2C-78.93803&destinations%5B%5D=39.87034%2C-82.94822&destinations%5B%5D=42.14669%2C-87.83312&destinations%5B%5D=42.65981%2C-84.55101&destinations%5B%5D=39.87016%2C-82.9482&destinations%5B%5D=39.86784%2C-82.94884&destinations%5B%5D=39.87014%2C-82.94824&destinations%5B%5D=39.87021%2C-82.94826&destinations%5B%5D=42.67464%2C-82.83249&destinations%5B%5D=39.87025%2C-82.94812&destinations%5B%5D=39.87049%2C-82.94807&destinations%5B%5D=39.87057%2C-82.94829&destinations%5B%5D=40.43237%2C-74.48872&destinations%5B%5D=39.96912%2C-82.99415&destinations%5B%5D=40.44534%2C-74.41769&destinations%5B%5D=40.4453%2C-74.41779&destinations%5B%5D=41.28482%2C-72.93002&destinations%5B%5D=40.44524%2C-74.41776&destinations%5B%5D=40.44559%2C-74.41811&destinations%5B%5D=42.12788%2C-75.97026&destinations%5B%5D=40.44576%2C-74.41788&destinations%5B%5D=40.69494%2C-74.09928&destinations%5B%5D=40.76857%2C-73.73745&destinations%5B%5D=40.4856%2C-74.39982&destinations%5B%5D=30.26164%2C-98.8715&destinations%5B%5D=39.95258%2C-82.90484&destinations%5B%5D=32.69126%2C-96.24597&destinations%5B%5D=29.48223%2C-98.34786&destinations%5B%5D=32.82934%2C-97.03087&destinations%5B%5D=32.8292%2C-97.03081&key=NOPE_THATS_MY_KEY&origins=37.6724723880042%2C-90.4441829064476 

私は目的地の配列を構築する方法:

func createDestinationsArray(annotations: [MyAnnotation]) -> [String] { 
     var destinations: [String] = [] 
     var destination: String! 

     for annotation in annotations { 
      destination = "\(annotations.lat),\(annotations.lon)" 
      destinations.append(destination) 
     } 

     return destinations 
    } 

とリクエスト:事前に

let queue = DispatchQueue(label: "com.cnoon.distance-queue", qos: .utility, attributes: .concurrent) 


Alamofire.request(url, method: .get, parameters: ["origins" : origins, "destinations" : destinations, "key" : apiKey]).response(queue: queue, responseSerializer: DataRequest.jsonResponseSerializer(), completionHandler: { response in 
... 
}) 

感謝!!

答えて

0

文書では、配列の要素間に区切り文字として|があるはずです。また、各座標ペアの前にのの宛先を追加します。これは、ドキュメントを見ると明らかに間違っています。あなたには2つの選択肢があります。セパレータを含むか、後でセパレータを使用して配列を文字列に結合すると、宛先と原点配列を文字列として最初に作成します。私の知る限りでは、ネットワーク要求以外には配列を必要としないため、文字列を直接生成する方がより最適な解決策になると思います。

func createDestinationsArray(annotations: [MyAnnotation]) -> String { 
    return annotations.map({ return "\($0.latitude),\($0.longitude)" }).joined(separator: "|") 
} 
+0

OK、最適なソリューションは配列の代わりに文字列を作成することでしょうか?距離の配列からの各インデックスのためにそれは要求の目的地に追加するつもりです....目的地...等?今のように? – noname

+0

はい、Alamofireは、Google Mapsが期待するものとは異なる配列をコード化します。また、リクエスト以外の目的で文字列を必要としないので、createDestinationsArray関数からString自体を生成して返すほうが効率的です。 –

+0

短いバージョン: 'return annotations.map({return" \($ 0.latitude)、\($ 0.longitude) "})。joined(セパレータ:" | ")' funcの戻り値の型を '[String]'ではなく 'String'に変更してください。 – Scriptable

関連する問題