用于C#的谷歌地图API

本文关键字:API 谷歌地图 用于 | 更新日期: 2023-09-27 18:28:52

我对使用API非常陌生,所以在查看了Google Maps API页面后,我不确定是否有专为C#设计的API。我不需要在我的应用程序上显示谷歌地图;我需要知道的是我是否可以在C#上使用谷歌地图API。这是我想用的。

我在很多地方都找过,但我能找到的只是使用Gmap的替代品,但这不是我想要的。

有可能使用它吗?

用于C#的谷歌地图API

1。自己创建对谷歌地图API的请求

您可以将HTTP-Request发送到googlemaps API,然后处理结果。您可以使用WebRequest伪造对googleapi的请求。您需要一个Maps API密钥。


您必须建立GET参数,例如origin=...&destination=...&key=YOUR_API_KEY+解析JSON响应才能对其进行处理。

谷歌地图Api文档(在Web服务Api下)列出了请求参数和示例响应。

string url = @"https://maps.googleapis.com/maps/api/directions/json?origin=75+9th+Ave+New+York,+NY&destination=MetLife+Stadium+1+MetLife+Stadium+Dr+East+Rutherford,+NJ+07073&key=YOUR_API_KEY";
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
Stream data = response.GetResponseStream();
StreamReader reader = new StreamReader(data);
// json-formatted string from maps api
string responseFromServer = reader.ReadToEnd();
response.Close();

JSON响应看起来像这样(来自Directions API)

{
   "geocoded_waypoints" : [
      {
         "geocoder_status" : "OK",
         "place_id" : "ChIJRVY_etDX3IARGYLVpoq7f68",
         "types" : [
            "bus_station",
            "transit_station",
            "point_of_interest",
            "establishment"
         ]
      },
      {
         "geocoder_status" : "OK",
         "partial_match" : true,
         "place_id" : "ChIJp2Mn4E2-woARQS2FILlxUzk",
         "types" : [ "route" ]
      }
   ],
   "routes" : [
      {
         "bounds" : {
            "northeast" : {
               "lat" : 34.1330949,
               "lng" : -117.9143879
            },
            "southwest" : {
               "lat" : 33.8068768,
               "lng" : -118.3527671
            }
         },
         "copyrights" : "Map data ©2016 Google",
         "legs" : [
            {
               "distance" : {
                  "text" : "35.9 mi",
                  "value" : 57824
               },
               "duration" : {
                  "text" : "51 mins",
                  "value" : 3062
               },
               "end_address" : "Universal Studios Blvd, Los Angeles, CA 90068, USA",
               "end_location" : {
                  "lat" : 34.1330949,
                  "lng" : -118.3524442
               },
               "start_address" : "Disneyland (Harbor Blvd.), S Harbor Blvd, Anaheim, CA 92802, USA",
               "start_location" : {
                  "lat" : 33.8098177,
                  "lng" : -117.9154353
               },
  ... Additional results truncated in this example[] ...

         "overview_polyline" : {
            "points" : "knjmEnjunUbKCfEA?_@]@kMBeE@qIIoF@wH@eFFk@WOUI_@?u@j@k@`@EXLTZHh@Y`AgApAaCrCUd@cDpDuAtAoApA{YlZiBdBaIhGkFrDeCtBuFxFmIdJmOjPaChDeBlDiAdD}ApGcDxU}@hEmAxD}[tt@yNb''yBdEqFnJqB~DeFxMgK~VsMr[uKzVoCxEsEtG}BzCkHhKWh@]t@{AxEcClLkCjLi@`CwBfHaEzJuBdEyEhIaBnCiF|K_Oz''
            {MdZwAbDaKbUiB|CgCnDkDbEiE|FqBlDsLdXqQra@kX|m@aF|KcHtLm@pAaE~JcTxh@w''`v@gQv`@}F`MqK`PeGzIyGfJiG~GeLhLgIpIcE~FsDrHcFfLqDzH{CxEwAbBgC|B}F|DiQzKsbBdeA{k@~''oc@bWoKjGaEzCoEzEwDxFsUh^wJfOySx[uBnCgCbCoFlDmDvAiCr@eRzDuNxC_EvAiFpCaC|AqGpEwHzFoQnQoTrTqBlCyDnGmCfEmDpDyGzGsIzHuZzYwBpBsC`CqBlAsBbAqCxAoBrAqDdDcNfMgHbHiPtReBtCkD|GqAhBwBzBsG~FoAhAaCbDeBvD_BlEyM``@uBvKiA~DmAlCkA|B}@lBcChHoJnXcB`GoAnIS~CIjFDd]A|QMlD{@jH[vAk@`CoGxRgPzf@aBbHoB~HeMx^eDtJ}BnG{DhJU`@mBzCoCjDaAx@mAnAgCnBmAp@uAj@{Cr@wBPkB@kBSsEW{GV}BEeCWyAWwHs@qH?
            cIHkDXuDn@mCt@mE`BsH|CyAp@}AdAaAtAy@lBg@pCa@jE]fEcBhRq@pJKlCk@hLFrB@lD_@xCeA`DoBxDaHvM_FzImDzFeCpDeC|CkExDiJrHcBtAkDpDwObVuCpFeCdHoIl''uBjIuClJsEvMyDbMqAhEoDlJ{C|J}FlZuBfLyDlXwB~QkArG_AnDiAxC{G|OgEdLaE`LkBbEwG~KgHnLoEjGgDxCaC`BuJdFkFtCgCnBuClD_HdMqEzHcBpB_C|BuEzCmPlIuE|B_EtDeBhCgAdCw@rCi@|DSfECrCAdCS~Di@jDYhA_AlC{AxCcL`U{GvM_DjFkBzBsB`BqDhBaEfAsTvEmEr@iCr@qDrAiFnCcEzCaE~D_@JmFdGQDwBvCeErEoD|BcFjC}DbEuD~D`@Zr@h@?d@Wr@}@vAgCbEaHfMqA`Cy@dAg@bAO`@gCi@w@W"
         },
         "summary" : "I-5 N and US-101 N",
         "warnings" : [],
         "waypoint_order" : []
      }
   ],
   "status" : "OK"
}

2….或使用专用库

  • gmaps-api-net(github)为谷歌地图提供了一个api接口。你可以通过nuget获得它。我还没有测试过,但看起来非常易于使用

此库已过时,请参阅https://stackoverflow.com/a/61531795/2881450

如其他文章中所述,您可以发出HTTP请求并使用JSON响应。

如果你想要一个.NET库,通过抽象查询/响应让你的生活更轻松,你可以使用这些.NET包装库之一的谷歌地图API:

  1. GoogleApi
  2. 谷歌地图

gmaps-api-net已经过时了(在回答的时候)-Directions api的最后一次更新是在2016年。

GoogleApi:的使用示例

using GoogleApi.Entities.Common;
using GoogleApi.Entities.Maps.Directions.Request;
using GoogleApi.Entities.Maps.Directions.Response;
public void GetRoute()
{
    DirectionsRequest request = new DirectionsRequest();    
    request.Key = "AIzaSyAJgBs8LYok3rt15rZUg4aUxYIAYyFzNcw";
    request.Origin = new Location("Brasov");
    request.Destination = new Location("Merghindeal");
    var response = GoogleApi.GoogleMaps.Directions.Query(request);
    Console.WriteLine(response.Routes.First().Legs.First().DurationInTraffic);
    Console.WriteLine(response.Routes.First().Legs.First().Distance);
    Console.WriteLine(response.Routes.First().Legs.First().Steps);
}

添加到上面Alex的答案中。

在他们的例子中,他们首先尝试编写DurationInTraffic,只有当您提供departureTime时,它才有效。此外,您希望显示秒或文本的值而不是对象。你也可以在没有流量选项的情况下使用持续时间。

如果你确实想设置出发时间,这个项目将自动为你设置自1970年以来的epoc/Linux/秒。然而,我没有看到一个";现在";选项,所以一定要先将其设置为UTC。

如果不提供departureTime,则DurationInTraffic将为null,因此这将出错。

request.DepartureTime = DateTime.Now.ToUniversalTime();

var x = response.Routes.First().Legs.First();
                Console.WriteLine("Duration w/ traffic: " + x.DurationInTraffic.Value + " vs w/o " + x.Duration.Value);
                Console.ReadLine();