これはかなり簡単な質問になります。 マップAPIを使用して最適化された(またはそうでない)ルートを取得するヘルパークラスの関数があります。google-maps api v3を使用して10以上のアドレスを最適化する方法
public static JObject CalcRoute(string origin, string destination, string[] waypoints)
{
var requestUrl = string.Format("https://maps.googleapis.com/maps/api/directions/json?origin={0}&destination={1}&waypoints={2}", origin, destination, string.Join("|", waypoints));
using (var client = new WebClient())
{
var result = client.DownloadString(requestUrl);
var data = JsonConvert.DeserializeObject<JObject>(result);
//ensure directions response contains a valid result
string status = (string) data["status"];
if ((string)data["status"] != "OK")
throw new Exception("Invalid request");
return data;
}
}
そして、私のコントローラで、私はそうのようにそれを呼び出しています:
var data = GoogleGeocodeExtension.CalcRoute("startLat,endLat", "endLat,endLong", new[]
{
"optimize:true",
"lat,lang",
"lat,lang",
//6 more lat and lang pairs
//I want to optimise more than 10 limit
});
//showing data in debug window like so
//so you can test it faster
foreach (var route in data["routes"])
{
Debug.WriteLine("----------------------------------------------------");
Debug.WriteLine(route["waypoint_order"]);
Debug.WriteLine("----------------------------------------------------");
foreach (var leg in route["legs"])
{
Debug.WriteLine("===================================================================================================");
Debug.WriteLine("Start: {0} End: {1} \n Distance: {2} Duration: {3}", leg["start_address"], leg["end_address"], leg["distance"], leg["duration"]);
Debug.WriteLine("Start lat lang: {0}", leg["start_location"]);
Debug.WriteLine("End lat lang: {0}", leg["end_location"]);
Debug.WriteLine("===================================================================================================");
}
}
だから私は、方法として、10点の座標(緯度& LANGペア)、開始と終了位置として2、および他の8を送信することができますポイントは、どのように20を送るのですか?または30?
ここでは、すでに最適化された座標リストを表示または計算することについて主に回答したSOや他のサイトについて、多くの質問が寄せられています。
私はリストを10未満の座標を持つ複数のリストに分けることができますが、その方法では、すべての座標とその一部だけを考慮しないため、適切に最適化されたルートが得られません適切に最適化されるだろう。
残念ながら私はGoogleにプレミアムライセンスを支払う余裕がありません(もし私が間違っていないなら、それは10kの金髪の金:S)。
EDIT:明らかにサーバー側でウェブルートサービスを使用している場合、その23通りのポイント制限を行うことができます。
var requestUrl = string.Format("https://maps.googleapis.com/maps/api/directions/json?key={3}&origin={0}&destination={1}&waypoints={2}", origin, destination, string.Join("|", waypoints), "YourApiKey");
標準のAPIを使用している場合(プレミアムライセンスは必要ありません)、各サーバー側で最大23のウェイポイントをサポートしています。 – geocodezip
私が答えを探している間に見た他のすべての質問は、あなたの回答が1つあったxD とにかく、私はなぜあなたが私に投票したのか分かりませんが、あなたが言ったことは真実ではありません。 8つ以上のウェイポイントを(キーなしで)追加しようとすると、ステータスが「MAX_WAYPOINTS_EXCEEDED」になり、そのようにコールにキーを追加すると、 var requestUrl = string.Format( "https:// maps.googleapis.com/maps/api/directions/json?origin={0}&destination={1}&waypoints={2}&key={3} "、origin、destination、string.Join(" | "、ウェイポイント) 、ApiKey); 「REQUEST_DENIED」というメッセージが表示されます。だから私は何が間違っているの? – Kadaj
あなたが正しければ、あなたは正しいのです。リクエスト文字列の最後にキーを置く例はほとんど見当たりませんでしたが、最初のparamに変更したときに機能しました: var requestUrl = string.Format( "maps.googleapis.com/maps/api/directions/ json?key = {3}&origin = {0}&destinati on = {1}&waypoints = {2} "、起点、目的地、string.Join(" | "、ウェイポイント)、ApiKey); それは今働いています:D私はあなたを憎んでも、もう一度、ありがとう:D – Kadaj