{"id":78,"date":"2014-05-15T07:04:06","date_gmt":"2014-05-15T07:04:06","guid":{"rendered":"http:\/\/www.honobono-life.info\/wpeng\/?p=78"},"modified":"2017-10-08T01:19:39","modified_gmt":"2017-10-08T01:19:39","slug":"directions-service-draggable","status":"publish","type":"post","link":"http:\/\/www.honobono-life.info\/wpeng\/directions-service-draggable\/","title":{"rendered":"Google Maps for AngularJS Directions Service Draggable"},"content":{"rendered":"<ul>\r\n<li>AngularJS : 1.2.23<\/li>\r\n<li>Bootstrap : 3.x<\/li>\r\n<li>Google Maps for AngularJS : 1.0.16<\/li>\r\n<li>include file<\/li>\r\nangular.min.js, underscore-min.js, angular-google-maps.min.js, ui-bootstrap-tpls-0.11.0.min.js\r\n<\/ul>\r\n<!--more-->\r\n<script type='text\/javascript' src='http:\/\/www.honobono-life.info\/wpeng\/wp-content\/themes\/ang\/js\/angular.min.js'><\/script><script type='text\/javascript' src='http:\/\/www.honobono-life.info\/wpeng\/wp-content\/themes\/ang\/js\/ui-bootstrap-tpls-0.11.0.min.js'><\/script><script src=\"https:\/\/maps.googleapis.com\/maps\/api\/js?v=3.exp&#038;key=AIzaSyBy-VhEHgZFREbgrTWoXTTW04hEW-PyHdA&#038;sensor=false\"><\/script>\r\n<script type='text\/javascript' src='http:\/\/www.honobono-life.info\/wpeng\/wp-content\/themes\/ang\/js\/underscore-min.js'><\/script>\r\n<script type='text\/javascript' src='http:\/\/www.honobono-life.info\/wpeng\/wp-content\/themes\/ang\/js\/angular-google-maps.min.js'><\/script>\r\n<script type='text\/javascript' src='http:\/\/www.honobono-life.info\/wpeng\/wp-content\/themes\/ang\/js\/walk-rt4.js'><\/script>\r\n<div ng-app=\"googleMapApp\" role=\"tabpanel\">\r\n  <ul class=\"nav nav-tabs\">\r\n    <li class=\"active\"><a href=\"#demo1\" data-toggle=\"tab\">demo<\/a><\/li>\r\n    <li><a href=\"#html1\" data-toggle=\"tab\">markup<\/a><\/li>\r\n    <li><a href=\"#script1\" data-toggle=\"tab\">script<\/a><\/li>\r\n  <\/ul>\r\n  <div class=\"tab-content\">\r\n    <div class=\"tab-pane active\" id=\"demo1\">\r\n\r\n<div ng-controller=\"MyCtrl\">\r\n  <div class=\"row\">\r\n    <div class=\"col-sm-6\">\r\n      <google-map \r\n        id=\"map-canvas\"\r\n        center=\"map.center\"\r\n        zoom=\"map.zoom\"\r\n        draggable=\"true\"\r\n        options=\"map.options\"\r\n        control=\"map.control\"\r\n      >\r\n      <\/google-map>\r\n    <\/div>\r\n    <div class=\"col-sm-6\">\r\n      <form class=\"form-horizontal\" role=\"form\">\r\n        <div class=\"form-group\">\r\n          <label class=\"col-sm-4 control-label\">Start<\/label>\r\n          <div class=\"col-sm-8\">\r\n            <select class=\"form-control\" ng-model=\"routePoints.start\" \r\n                    ng-options=\"route.name for route in map.routes.start\">\r\n            <\/select>\r\n          <\/div>\r\n        <\/div>\r\n<i>(Ctrl-Click for multiple selection)<\/i> <br>\r\n        <div class=\"form-group\">\r\n          <label class=\"col-sm-4 control-label\">WayPoints<\/label>\r\n          <div class=\"col-sm-8\">\r\n            <select multiple class=\"form-control\" ng-model=\"routePoints.ways\" \r\n                    ng-options=\"route.name for route in map.routes.ways\">\r\n            <\/select>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"form-group\">\r\n          <label class=\"col-sm-4 control-label\">End<\/label>\r\n          <div class=\"col-sm-8\">\r\n            <select class=\"form-control\" ng-model=\"routePoints.end\" \r\n                    ng-options=\"route.name for route in map.routes.end\">\r\n            <\/select>\r\n          <\/div>\r\n        <\/div>\r\n        <button ng-click=\"calcRoute(routePoints)\" type=\"submit\" class=\"btn btn-default\">Submit<\/button>\r\n      <\/form>\r\n      <li ng-repeat=\"route in routesDisplay\">\r\n      Route{{route.title}}<br \/>From\uff1a{{route.start}}<br \/>To\uff1a{{route.end}}<br \/>Distance\uff1a{{route.distance}}<br \/><br \/>\r\n      <\/li>\r\n      <li>Total Distance\uff1a{{map.total}}<\/li>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n    <\/div>\r\n    <div class=\"tab-pane\" id=\"html1\">\r\n<pre>\r\n&lt;script src=\"https:\/\/maps.googleapis.com\/maps\/api\/js?v=3.exp&key=xxxxxxxxxxxxxxxxxx&sensor=false\"&gt;&lt;\/script&gt;\r\n&lt;script type='text\/javascript' src='http:\/\/www.example.com\/wp\/wp-content\/themes\/ang\/js\/underscore-min.js'>&lt;\/script>\r\n&lt;script type='text\/javascript' src='http:\/\/www.example.com\/wp\/wp-content\/themes\/ang\/js\/angular-google-maps.min.js'>&lt;\/script>\r\n&lt;script type='text\/javascript' src='http:\/\/www.example.com\/wp\/wp-content\/themes\/ang\/js\/app.js'&gt;&lt;\/script&gt;\r\n&lt;div ng-controller=\"MyCtrl\"&gt;\r\n  &lt;div class=\"row\"&gt;\r\n    &lt;div class=\"col-sm-6\"&gt;\r\n      &lt;google-map \r\n        id=\"map-canvas\"\r\n        center=\"map.center\"\r\n        zoom=\"map.zoom\"\r\n        draggable=\"true\"\r\n        options=\"map.options\"\r\n        control=\"map.control\"\r\n      &gt;\r\n      &lt;\/google-map&gt;\r\n    &lt;\/div&gt;\r\n    &lt;div class=\"col-sm-6\"&gt;\r\n      &lt;form class=\"form-horizontal\" role=\"form\"&gt;\r\n        &lt;div class=\"form-group\"&gt;\r\n          &lt;label class=\"col-sm-4 control-label\"&gt;Start&lt;\/label&gt;\r\n          &lt;div class=\"col-sm-8\"&gt;\r\n            &lt;select class=\"form-control\" ng-model=\"routePoints.start\" \r\n                    ng-options=\"route.name for route in map.routes.start\"&gt;\r\n            &lt;\/select&gt;\r\n          &lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n&lt;i&gt;(Ctrl-Click for multiple selection)&lt;\/i&gt; &lt;br&gt;\r\n        &lt;div class=\"form-group\"&gt;\r\n          &lt;label class=\"col-sm-4 control-label\"&gt;WayPoints&lt;\/label&gt;\r\n          &lt;div class=\"col-sm-8\"&gt;\r\n            &lt;select multiple class=\"form-control\" ng-model=\"routePoints.ways\" \r\n                    ng-options=\"route.name for route in map.routes.ways\"&gt;\r\n            &lt;\/select&gt;\r\n          &lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n        &lt;div class=\"form-group\"&gt;\r\n          &lt;label class=\"col-sm-4 control-label\"&gt;End&lt;\/label&gt;\r\n          &lt;div class=\"col-sm-8\"&gt;\r\n            &lt;select class=\"form-control\" ng-model=\"routePoints.end\" \r\n                    ng-options=\"route.name for route in map.routes.end\"&gt;\r\n            &lt;\/select&gt;\r\n          &lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n        &lt;button ng-click=\"calcRoute(routePoints)\" type=\"submit\" class=\"btn btn-default\"&gt;Submit&lt;\/button&gt;\r\n      &lt;\/form&gt;\r\n      &lt;li ng-repeat=\"route in routesDisplay\"&gt;\r\n      Route{{route.title}&lt;br \/&gt;From\uff1a{{route.start}&lt;br \/&gt;To\uff1a{{route.end}&lt;br \/&gt;Distance\uff1a{{route.distance}\r\n&lt;br \/&gt;&lt;br \/&gt;\r\n      &lt;\/li&gt;\r\n      &lt;li&gt;Total Distance\uff1a{{map.total}&lt;\/li&gt;\r\n    &lt;\/div&gt;\r\n  &lt;\/div&gt;\r\n&lt;\/div&gt;\r\n<\/pre>\r\n    <\/div>\r\n\r\n    <div class=\"tab-pane\" id=\"script1\">\r\n<pre>\r\nvar mapApp = angular.module('googleMapApp', ['google-maps','ui.bootstrap']);\r\n\r\nmapApp.controller(\"MyCtrl\", function ($scope) {\r\n\r\n  angular.extend($scope, {\r\n    map: {\r\n      center: {\r\n        latitude: 35.681382,\r\n        longitude: 139.766084\r\n      },\r\n      options: {\r\n        maxZoom: 20,\r\n        minZoom: 3\r\n      },\r\n      zoom: 15,\r\n      control: {},\r\n      total: {},\r\n      routes: {\r\n        start: [\r\n          {name:'Tokyo Station', latlng:'35.6813177190391,139.76609230041504'},\r\n          {name:'Ootemathi Station', latlng:'35.684228393108306,139.76293802261353'}\r\n        ],\r\n        ways: [\r\n          {name:'Ootemon', latlng:'35.68567497604782,139.7612428665161'},\r\n          {name:'Nijyubashi', latlng:'35.67947017023017,139.75772380828857'},\r\n          {name:'Tokyo Tower', latlng:'\u65e5\u672c, \u6771\u4eac\u90fd\u6e2f\u533a\u829d\u516c\u5712\uff14-\uff12-\uff18'},\r\n          {name:'Hama-rikyu Gardens', latlng:'\u65e5\u672c, \u6771\u4eac\u90fd\u4e2d\u592e\u533a\u6d5c\u96e2\u5bae\u5ead\u5712\uff11-1'}\r\n        ],\r\n        end: [\r\n          {name:'Tokyo Station', latlng:'35.6813177190391,139.76609230041504'},\r\n          {name:'Ootemathi Station', latlng:'35.684228393108306,139.76293802261353'}\r\n        ]\r\n      }\r\n    },\r\n    routePoints: {\r\n      start: {},\r\n      end: {}\r\n    },\r\n    routesDisplay: []\r\n  });\r\n  $scope.routePoints.start = $scope.map.routes.start[0];\r\n  $scope.routePoints.end = $scope.map.routes.end[1];\r\n\r\n  var rendererOptions = {\r\n    draggable: true\r\n  };\r\n  var directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);\r\n\r\n  function computeTotalDistance(result) {\r\n    var total = 0;\r\n    var myroutesDisplay = [];\r\n    var myroute = result.routes[0];\r\n    for (var i = 0; i < myroute.legs.length; i++) {\r\n      var myrouteid = i + 1;\r\n      total += myroute.legs[i].distance.value;\r\n      myroutesDisplay.push({\r\n        title: myrouteid,\r\n        start: myroute.legs[i].start_address,\r\n          end: myroute.legs[i].end_address,\r\n          distance: myroute.legs[i].distance.text\r\n      });\r\n    }\r\n    total = total \/ 1000.0;\r\n    $scope.map.total = total + ' km';\r\n    $scope.routesDisplay = myroutesDisplay;\r\n    $scope.$apply();\r\n  }\r\n\r\n  $scope.calcRoute = function (routePoints) {\r\n    var ways = [];\r\n    for (var i = 0; i < routePoints.ways.length; i++) {\r\n      ways.push({\r\n        location:routePoints.ways[i].latlng,\r\n        stopover:true\r\n      });\r\n    };\r\n    var directionsService = new google.maps.DirectionsService();\r\n    directionsDisplay.setMap($scope.map.control.getGMap());\r\n    google.maps.event.addListener(directionsDisplay, 'directions_changed', function() {\r\n      computeTotalDistance(directionsDisplay.getDirections());\r\n    });\r\n    var start = routePoints.start.latlng;\r\n    var end = routePoints.end.latlng;\r\n    var request = {\r\n      origin: start,\r\n      destination: end,\r\n      waypoints: ways,\r\n      optimizeWaypoints: true,\r\n      travelMode: google.maps.TravelMode.WALKING\r\n    };\r\n    var routesDisplay = [];\r\n    directionsService.route(request, function(response, status) {\r\n      if (status == google.maps.DirectionsStatus.OK) {\r\n        directionsDisplay.setDirections(response);\r\n        var route = response.routes[0];\r\n        for (var i = 0; i < route.legs.length; i++) {\r\n          var routeid = i + 1;\r\n          routesDisplay.push({\r\n            title: routeid,\r\n            start: route.legs[i].start_address,\r\n            end: route.legs[i].end_address,\r\n            distance: route.legs[i].distance.text\r\n          });\r\n        }\r\n      }\r\n    });\r\n    $scope.routesDisplay = routesDisplay;\r\n    return;\r\n  };\r\n});\r\n<\/pre>\r\n    <\/div><!-- \/.tab-pane -->\r\n\r\n  <\/div><!-- \/.tab-content -->\r\n<\/div><!-- \/.tabpanel -->\r\n","protected":false},"excerpt":{"rendered":"<p>AngularJS : 1.2.23 Bootstrap : 3.x Google Maps for AngularJS : 1.0.16 include file angular.min.js, underscore-min.js, angular-google-maps.min.js, ui-bootstrap-tpls-0.11.0.min.js<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[15,14,17],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/78"}],"collection":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/comments?post=78"}],"version-history":[{"count":10,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/78\/revisions"}],"predecessor-version":[{"id":1453,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/78\/revisions\/1453"}],"wp:attachment":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/media?parent=78"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/categories?post=78"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/tags?post=78"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}