Vairāk

Google maps V3: javascript api, atveidojiet maršrutu, kas iegūts, izmantojot tīmekļa api

Google maps V3: javascript api, atveidojiet maršrutu, kas iegūts, izmantojot tīmekļa api


Man ir jāiegūst maršruta norādes, izmantojot Google maps v3 WEB (http pieprasījums) api (aprēķini tiek veikti servera pusē, pamatojoties uz šiem datiem, bez klientu mijiedarbības, tāpēc nav pieejams JS). Pēc tam maršruti tiek sakārtoti ar iekšējo loģiku, un serveris (apache/PHP) klientam nosūta tīmekļa lapu html/js/jQuery, kurā tiek parādīta lapa ar Google karti (parādīta ar JS (ajax) api)

Šajā kartē es vēlos atveidot maršruta agrāk iegūtos maršrutus ar tīmekļa API.

Tāpēc es mēģināju norādīt DirectionsResult google.maps.DirectionsRenderer :: setDirections (), bet tas neko nedara, un firebug neatstāj nekādas kļūdas (un, protams, google JS, ja tas ir apjucis)

Jā, es vispirms iestatīju karti, izmantojot setMap (), un norādījumi Renderer ir inicializēti pareizi, viss ir kārtībā!

Šķiet, ka de DirectionsResult nav tas pats, ja to iegūst no Web API un no JS API. Vai ir kāds veids, kā to "tulkot", lai to varētu atveidot?

Alternatīva būtu atkārtot maršruta aprēķinus klienta pusē ar ajax api, lai tikai tos atveidotu, taču, manuprāt, ir muļķīgi pārrēķināt norādījumus, jo tie man jau ir; tāpēc es nevēlos to darīt šādā veidā, ja vien tas nav vienīgais veids.

Paldies par tavu palīdzību !


Katrs JSON atbildes objekts ir jāapraksta atbilstošā veidā.

Tīmekļa pakalpojuma API arī neatgriežubDirectionsResult īpašums (nedokumentēts īpašums), jums arī tas ir vajadzīgs.NorādesRenderersagaidaub.travelMode,ub.izcelsmeunub. galamērķis(visas stīgas).izcelsmiungalamērķitiek izmantoti tikai tad, ja iespējojatvilkamsīpašums DirectionsRendererOptions - tās būtībā ir tās pašas vērtības, kuras jūs nododat tālākPakalpojums#maršruts ()zvanīt.

Pieņemot, ka izmantojat pārlūkprogrammu, kas atbalsta ES5Masīvs#katrammetode:

funkcija typecastRoutes (maršruti) {route.forEach (funkcija (maršruts) {route.bounds = asBounds (route.bounds); // Es nedomāju, ka tiek lietots pārskats “view_path”, taču tas pastāv DirectionsService.route // atbildē) () route.overview_path = asPath (route.overview_polyline); route.legs.forEach (funkcija (kāja) {leg.start_location = asLatLng (leg.start_location); leg.end_location = asLatLng (leg.end_location); leg.steps). forEach (funkcija (solis) {step.start_location = asLatLng (step.start_location); step.end_location = asLatLng (step.end_location); step.path = asPath (step.polyline);});});}); } function asBounds (boundsObject) {return new google.maps.LatLngBounds (asLatLng (boundsObject.southwest), asLatLng (boundsObject.northeast)); } funkcija asLatLng (latLngObject) {atgriezt jaunu google.maps.LatLng (latLngObject.lat, latLngObject.lng); } funkcija asPath (encodedPolyObject) {return google.maps.geometry.encoding.decodePath (encodedPolyObject.points); }

Tātad jūs to izmantotu šādi:

var renderer = new google.maps.DirectionsRenderer (); funkcija renderDirections (karte, atbilde, pieprasījums) {renderer.setOptions ({virzieni: {route: typecastRoutes (response.routes), // "ub" ir svarīgs un to neatgriež tīmekļa pakalpojums, tas ir // objekts, kas satur "origin", "galamērķis" un "travelMode" ub: pieprasījums}, vilkšana: patiess, karte: karte}); }

PS: noteikti ielādējiet ģeometrijas bibliotēku, pretējā gadījumāgoogle.maps.geometry.encoding.decodePathmetode nebūs pieejama.


Millera Medeirosa atbilde ir lieliska un ietaupīja man darba stundas (paldies, ka veltījāt laiku tās izveidošanai). Man bija jāveic viena koda izmaiņas, lai tas darbotos Maps API V3 versijā.

Tā vietā:

ub: pieprasījums

Tam vajadzētu būt:

pieprasījums: pieprasījums

Es saņēmu kļūdas "travelMode not define", un es to definēju pieprasījuma mainīgajā. Izmeklējot Google kodu, es atklāju, ka ub ir aizstāts ar pieprasījumu V3.

Tagad es varu no Google Maps tīmekļa pakalpojuma saņemtos datus renderēt kartē, izmantojot javascript API. Vēlreiz paldies Milleram!


Skatīties video: How to create a custom Google Map with the Maps JavaScript API