我正在开发一个应用程序,它将在2个点之间找到方向,在谷歌地图上显示它并将其存储在服务器端,以便我可以在需要时再次渲染它以将一条路线与另一条路线进行比较。
我已成功使用google maps api web serivce查找路线,并且我还使用google maps javascript v3查找路线并使用DirectionsRenderer在地图上显示该路线。
这两个服务都返回类似的JSON,其中包含JSON属性名称的不同(参见下面的示例1)。更重要的是,JS api将lat / lng的不同属性名称从一个调用返回到另一个调用(参见下面的示例2)。
所以问题是我无法使用从服务器端Web服务调用获得的JSON并直接将其传递给javascripts DirectionRenderer类来显示路由。而且,每次我在地图上显示路线时,我都要进行JS调用。这将导致不必要的配额使用。有没有更好的方法来做到这一点。我已经完成了以下问题,但我实际上无法得到答案here和here
示例1:
网络电话结果:
{
"routes" : [
{
"bounds" : {
"northeast" : {
"lat" : 12.9198217,
"lng" : 77.6124895
},
"southwest" : {
"lat" : 12.912811,
"lng" : 77.60924989999999
}
},
.....
这没有“路径”属性。
Javascript V3通话结果:
{
"routes": [
{
"bounds": {
"ta": {
"d": 12.91281,
"b": 12.919820000000001
},
"ga": {
"b": 77.60925,
"d": 77.61249000000001
}
},
......
"path": [
{
"d": 12.913920000000001,
"e": 77.60928000000001
},
{
"d": 12.913960000000001,
"e": 77.60958000000001
},
{
"d": 12.91398,
"e": 77.61
}
],
..........
示例2: 另一个Javascript V3调用结果:
{
"routes": [
{
"bounds": {
"Aa": {
"k": 12.91281,
"j": 12.919820000000001
},
"qa": {
"j": 77.60925,
"k": 77.61249000000001
}
},
.....
"path": [
{
"k": 12.91281,
"A": 77.60925
},
{
"k": 12.913920000000001,
"A": 77.60928000000001
}
],
.........
答案 0 :(得分:2)
你可以做到这一点,但有几个陷阱。
首先,请确保您的应用符合此点10.5.d: https://developers.google.com/maps/terms#10-license-restrictions
与Directions API网络服务(始终命名字段)的JSON响应不同,来自JavaScript Directions服务的JSON响应不适合您解析。相反,您需要将DirectionsResult
对象作为JavaScript对象访问,该对象包含google.maps.LatLng
个对象,例如routes[0].legs[0].steps[0].start_location
https://developers.google.com/maps/documentation/javascript/directions#DirectionsResults https://developers.google.com/maps/documentation/javascript/directions#Steps
对于您从Directions API网络服务获得的路线,有几种方法可以在JavaScript API上显示它。我的偏好是将JSON响应“转换”为DirectionsResult
对象。您可以在服务器上或JavaScript中执行此操作,但我认为前者更好。
或者,您可以重新查询Directions服务(使用JavaScript服务)以再次获取路由。这不仅会消耗额外的配额,还可能会返回不同的(更新的)路线。无论是好还是坏,都取决于你想要的东西。