谷歌地图集成,获得测量距离

时间:2012-02-25 21:25:57

标签: c# winforms google-maps google-api

您好我正在开发WinForms中运行的日志。我想知道是否有人为谷歌地图集成提供了一些很好的资源。最终目标是让用户双击“距离”列中的单元格,它将打开一个新表单。新表单上会有一个Google地图,用户可以使用Google的距离测量工具跟踪他们的路线。接受该路线将关闭窗口并将跟踪路线的距离(英里)输入到单元格中。

如果实际上可以使用C#应用程序,我对Google Maps集成完全陌生。请指出正确的方向,我可以找到一些示例代码来完成我的目标。

提前致谢。

2 个答案:

答案 0 :(得分:4)

在项目中使用此类可以获得两个地方之间的距离 你可以从https://www.nuget.org/packages/newtonsoft.json/

获得Newtonsoft.Json.Linq
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json.Linq;

namespace Management
{
    class DeliveryMapInfo
    {
    string origin = @""; //Write the address of the origin here
    public DeliveryMapInfo() { }
    public int getDistanceTo(string destination)
    {
        System.Threading.Thread.Sleep(1000);
        int distance = -1;
        string url = "http://maps.googleapis.com/maps/api/directions/json?origin=" + origin + "&destination=" + destination + "&sensor=false";
        string requesturl = url;string content = fileGetJSON(requesturl);
        JObject _Jobj = JObject.Parse(content);
        try
        {
            distance = (int)_Jobj.SelectToken("routes[0].legs[0].distance.value");
            return distance / 1000;// Distance in KMS
        }
        catch
        {
            return distance / 1000;
        }
    }
    protected string fileGetJSON(string fileName)
    {
        string _sData = 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);
                _sData = System.Text.Encoding.ASCII.GetString(response);

            }
            else
            {
                System.IO.StreamReader sr = new System.IO.StreamReader(fileName);
                _sData = sr.ReadToEnd();
                sr.Close();
            }
        }
        catch { _sData = "unable to connect to server "; }
        return _sData;
    }
}

}

您的许多想法取决于您要使用的API,即。距离矩阵,方向,地理编码等 注意:“/ directions /” 我发现方向是最完整的api供我使用,因为它可以进行地理编码,找到距离,找到持续时间......等等。 但是,JSON文件的方向大小比其他JSON文件大。 用你的判断。

string url = "http://maps.googleapis.com/maps/api/directions/json?origin=" + origin + "&destination=" + destination + "&sensor=false";

distance = (int)_Jobj.SelectToken("routes[0].legs[0].distance.value");

例如:

方向内的结构JSON文件是:

-Routes

    - Bound
        - NorthEast
        - SouthWest
    - Copyrights
    - Legs
        - Steps
            - duration
            - distance
            - endlocation
            - maneuver
            - htmlinstructions
            - polyline
            - startlocation
            - travelmode
        - Distance
            - text
            - value
        - Duration
            - text
            - value
        - StartAddress
        - EndAddress
        - EndLocation
            - lat
            - lng
        - StartLocation
            - lat
            - lng
    - Overview Polyline
    - Summary
    - Warnings
    - Waypoint Order

- Status

答案 1 :(得分:2)

您需要使用google maps API。 值得庆幸的是,这非常简单并且使用了JSON,这得到了很好的支持。

看看: http://code.google.com/apis/maps/documentation/distancematrix/

不幸的是,谷歌会选择你输入的两个点之间的最佳路线,如果你没有运行最快的路线,那么这个路线并不多。

要解决此问题,请查看此处: http://code.google.com/apis/maps/documentation/directions/

这允许您添加航点,因此可能更有用,但您可能需要用户自己创建这些航点。

最后要记住的是,如果您希望获得大量请求 - 谷歌现在正在向开发人员收取使用这些服务的费用。作为非商业用户,您每天仅限2,500个请求,每个请求最多8个航点。