如何使用Google Maps Roads API

时间:2017-10-13 02:43:33

标签: ruby google-maps google-roads-api

我正在使用 snapToRoads 生成静态地图(因为它接受多个航点)。

鉴于我有坐标列表,如何计算这些坐标之间的距离并将其相加以获得总行驶距离

或者还有其他更好的方法在 ruby​​代码中执行此操作吗?

示例管理到道路请求:

waypoints = [arrays of coordinates]
snap_to_roads_url = "https://roads.googleapis.com/v1/snapToRoads?path=#{waypoints.join('|')}&interpolate=true&key=API_KEY"
snappedPoints = HTTParty.get(URI.encode(snap_to_roads_url))

# Store snapped polyline returned by the snap-to-road service
snappedPoints['snappedPoints'].each do |snap|
  snappedCoordinates << "#{snap['location']['latitude']},#{snap['location']['longitude']}"
  placeIdArray << snap['placeId']
end

静态地图请求:

https://maps-api-ssl.google.com/maps/api/staticmap?&size=650x550&sensor=false&zoom=16&markers=size:small&maptype=roadmap&path=weight:3%7Ccolor:red%7C54.57424022982199,-1.2351261042386523|54.57423420000001,-1.2351275000000002|54.57423420000001,-1.2351275000000002 ...many more

还有任何想法,如果我有原点和目的地坐标,我如何在上述请求中包含标记

请帮忙!

1 个答案:

答案 0 :(得分:1)

对于您的用例,我建议您使用Directions API Web Service。您还可以放置多个航点(每个请求最多23个),它的返回将生成路径的编码折线。它还将提供旅行距离,旅行时间等。

点击此处了解详情:https://developers.google.com/maps/documentation/directions/start

Snap To Roads需要您的坐标彼此非常接近才能正常工作,并且您的静态地图网址在几点之后可能会变得太长。某些浏览器可能会达到其网址限制,静态地图会有8192 character limit

以下是使用Directions Web Service的示例请求(仅包含您自己的API密钥): https://maps.googleapis.com/maps/api/directions/json?origin=-37.59431782470163%2C144.91110764394534&destination=place_id%3AEipTeWRuZXkgUm9hZCwgU29tZXJ0b24sIFZpY3RvcmlhLCBBdXN0cmFsaWE&mode=driving&waypoints=place_id%3AEjJNaXRmb3JkIENyZXNjZW50LCBDcmFpZ2llYnVybiwgVmljdG9yaWEsIEF1c3RyYWxpYQ%7Cplace_id%3AEi5FZGluZ3RvbiBXYXksIENyYWlnaWVidXJuLCBWaWN0b3JpYSwgQXVzdHJhbGlh&key=YOUR_API_KEY

要获得更直观的表示,请转到此处(包括您的API密钥以查看JSON结果)link

然后在其结果中,您可以在其属性routes.overview_polyline处获得编码折线。您可以将其用作编码折线路径,如下所示:&path=geodesic:true%7Ccolor:0x0057E7ff%7Cenc:ENCODED_POLYLINE_HERE

您可以通过获取路线的每条路线来检索您的标记坐标。从routes[0].legs[0].start_locationend_location开始,将这些坐标用于标记。

对于您的总驾驶距离,每legdistance属性都有数值。只需添加所有legs即可获得总距离甚至时间。

您的静态地图请求与下面附带的代码类似。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<img src="https://maps.googleapis.com/maps/api/staticmap?size=800x800
            &maptype=roadmap
  &key=AIzaSyCD0rWgXRVBa7PgaTWXVp_gU51pgHGviYY&markers=color:blue%7Clabel:A%7C-37.5943328,144.9110993&markers=color:blue%7Clabel:B%7C-37.60746779999999,144.9393146&markers=color:blue%7Clabel:C%7C-37.6118511,144.9329711&markers=color:blue%7Clabel:D%7C-37.6302591,144.9490315&path=geodesic:true%7Ccolor:0x0057E7ff%7Cenc:psmdFk}msZeApE~APxAJvK~@pCLdA@dD?fACbESlEYbAIlB[`Dg@bBYtJeCbEcAfDo@q@_D]cBM_AEg@Eu@@sAJyAVuArAoFRqAJ_A?o@CACECG@OFKBABCJu@NyBEeAq@kEaAsGI}@EwA^uG@[AACGAEBMBC@A?{@@M?o@QuAa@sAq@yASu@Ko@I}A?u@V}DLyBAQA[?SAAAG?OFKLAHFbAL|JdALBRHZ@P?H@@ABEBAFg@FKj@gJT}CTqAZeAVs@bC}EVk@Lc@NaAFaAAy@IkAUq@A?EAGK?O?AOg@U_@o@q@g@[e@Q[Ie@G_CS_ACgAH_D^KFSF?@A@A@C@EA?AYAGC[?u@Es@Ok@Sm@_@k@e@eBmBUY`CkClE}Eh@[\Gd@Ce@B]FWLQLmE|EaCjCTXdBlBj@d@l@^j@Rr@Nt@DZ?FEJAJA@A?ABAF@RAL@dEe@bAAfAFfBN^Hb@Lf@Vf@`@n@v@`@^F@BBDLALDb@AXHjA@x@G`AGh@VHl@Z`@\x@fAy@gAa@]m@[WIFi@FaAAy@IkAUq@A?EAGK?O?AOg@U_@o@q@g@[e@Q[Ie@G_CS_ACgAH_D^KFSF?@A@A@G@AA?AYAGC[?u@Es@Ok@Sm@_@k@e@eBmBe@q@a@s@w@gBg@cBEEKe@A?CC?A?I?AG{@KcAGoACwBGk@Ok@Qi@Ye@YWSSUKA@CAGE?Ec@I_@Ka@QmKkD_@Ec@Mc@]ICCCQGe@EKAiAHUDa@NOLGRU`BKb@Gf@?h@DH@LELGFIBKAIGAA?Ai@GOKi@O}@Y_@E]Mo@c@e@s@Se@Mi@E[?S?GRCzBW~A]vBu@tFqCtCyAzAi@lA[rC]hCOnIa@`[uApQ}AvL_A~D]nBMhBQdBKdSkBnUsBfb@aDzD]Bv@q@H"/> 


</body>
</html>

如果您希望事物具有交互性(类似于我链接的Directions webapp),那么您需要使用[Google Maps Javascript API路线服务](https://developers.google.com/maps/documentation/javascript/directions)。

希望这些帮助!

以下是有关使用静态地图的编码折线和标记的更多信息: https://developers.google.com/maps/documentation/static-maps/intro#Markers https://developers.google.com/maps/documentation/static-maps/intro#Paths