0

我正在使用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

还有任何想法如何在上述请求中包含标记,因为我有origin 和 destination coordinates

请帮忙!

4

1 回答 1

1

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

在此处了解更多信息:https ://developers.google.com/maps/documentation/directions/start

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

以下是使用 Directions Web 服务的示例请求(只需包含您自己的 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 结果)链接

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

可以通过获取路线的每条腿来检索标记的坐标。从这些坐标开始routes[0].legs[0].start_locationend_location使用这些坐标作为标记。

对于您的总行驶距离,每个leg都有一个distance带有数值的属性。只需添加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 Directions Service](https://developers.google.com/maps/documentation/javascript/方向)。

希望这些帮助!

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

于 2017-10-13T09:59:52.017 回答