我正在使用 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
还有任何想法,如果我有原点和目的地坐标,我如何在上述请求中包含标记。
请帮忙!
答案 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_location
和end_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路线服务](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