Gui*_*doG 1 c# winforms google-maps-api-3
目前,我通过执行以下操作获得了我的 c# winforms 应用程序中 2 个地方之间的距离:
string requesturl = "http://maps.google.com/maps/api/directions/json?origin=" + origin + "&destination=" + destination + "&sensor=false;
string content = fileGetContents(requesturl);
JObject o = JObject.Parse(content);
distance = (decimal)o.SelectToken("routes[0].legs[0].distance.value") / 1000;
private static string fileGetContents(string fileName)
{
string sContents = string.Empty;
string me = string.Empty;
try
{
if (fileName.ToLower().IndexOf("http:") > -1)
{
System.Net.WebClient wc = new System.Net.WebClient();
byte[] response = wc.DownloadData(fileName);
sContents = System.Text.Encoding.ASCII.GetString(response);
}
else
{
System.IO.StreamReader sr = new System.IO.StreamReader(fileName);
sContents = sr.ReadToEnd();
sr.Close();
}
}
catch { sContents = "unable to connect to server "; }
return sContents;
}
Run Code Online (Sandbox Code Playgroud)
这很有效,但它总是返回最快的路线,而不是最短的路线。
我想获得最短距离,所以我想添加provideRouteAlternatives=true
到对 google api 的调用中。然后我可以在每个路径中的文件中搜索以获得最短路径。
但是我该怎么做呢?
需要说明的是,如果返回的路线不止一条,我知道如何调整我的代码以在每条路线中进行搜索,问题是如何让此参数开始工作,以便返回不止一条路线。
我试过这个:
string requesturl = "http://maps.google.com/maps/api/directions/json?origin="
+ origin + "&destination="
+ destination + "&sensor=false&provideRouteAlternatives=true";
Run Code Online (Sandbox Code Playgroud)
但它似乎没有做任何事情。当我用相同的地址向谷歌询问路线时,我确实得到了不止一条路线,但这个 api 没有。
我做错了什么还是不可能像这样?也许我需要 javascript 或其他东西,这可能在 winforms 中吗?一个例子会很好。
找到了,我使用了错误的参数。
我必须使用alternatives=true 而不是provideroutealternatives=true
编辑
我在尝试不同的事情时偶然发现了这一点,有一次我只是尝试alternatives
代替,provideroutealternatives
令我惊讶的是它有效并且仍然有效。文档仍然写了 providerroutealternatives 并且该参数仍然不起作用。所以我猜测谷歌的开发人员和文档编写者之间存在一些误传。
编辑
@MrEduar 向我指出我正在阅读错误的文档。
provideRouteAlternatives
用于javascript库,
alternatives
用于方向 api。
所以文档毕竟是正确的,你只需要小心使用正确的文档。在那里很容易出错。
归档时间: |
|
查看次数: |
1563 次 |
最近记录: |