{"id":911,"date":"2015-02-05T04:10:34","date_gmt":"2015-02-05T04:10:34","guid":{"rendered":"http:\/\/www.honobono-life.info\/wpeng\/?p=911"},"modified":"2017-10-07T00:26:22","modified_gmt":"2017-10-07T00:26:22","slug":"google-maps-with-dart-directions-service-draggable","status":"publish","type":"post","link":"http:\/\/www.honobono-life.info\/wpeng\/google-maps-with-dart-directions-service-draggable\/","title":{"rendered":"Google Maps with Dart Directions Service Draggable"},"content":{"rendered":"<ul>\n<li>Dart : 1.8.3<\/li>\n<li>Bootstrap : 3.2.0<\/li>\n<li>include file<\/li>\n<p>dart.js,interop.js\n<\/ul>\n<p><!--more--><br \/>\n<script type=\"text\/javascript\" src=\"http:\/\/maps.googleapis.com\/maps\/api\/js?key=AIzaSyArJcThvMs4MtAlxahZB6VR2lvsqzBzz3M&#038;sensor=false\"><\/script><\/p>\n<div role=\"tabpanel\">\n<ul class=\"nav nav-tabs\">\n<li class=\"nav-item\"><button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#demo1\">demo<\/button><\/li>\n<li class=\"nav-item\"><button class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#html1\">markup<\/button><\/li>\n<li class=\"nav-item\"><button class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#script1\">script<\/button><\/li>\n<\/ul>\n<div class=\"tab-content\">\n<div class=\"tab-pane fade show active\" id=\"demo1\">\n<style type=\"text\/css\">\n  #map-canvas { height: 400px }\n<\/style>\n<div id=\"map-canvas\" style=\"float:left;width:70%;\"><\/div>\n<div id=\"control_panel\" style=\"float:right;width:30%;text-align:left;padding-top:20px\">\n<div style=\"margin:20px;border-width:2px;\">\n        <b>Start:<\/b><br \/>\n        <select id=\"start\"><option value=\"35.6813,139.7661\">\u6771\u4eac\u99c5<\/option><option value=\"35.6842,139.7629\">\u5927\u624b\u753a\u99c5<\/option><\/select><br \/>\n        <br \/>\n        <b>Waypoints:<\/b> <br \/>\n        <i>(Ctrl-Click for multiple selection)<\/i> <br \/>\n        <select multiple id=\"waypoints\"><option value=\"35.6857,139.7612\">\u5927\u624b\u9580<\/input><option value=\"35.6795,139.7577\">\u4e8c\u91cd\u6a4b\u524d<\/input><option value=\"\u65e5\u672c, \u6771\u4eac\u90fd\u6e2f\u533a\u829d\u516c\u5712\uff14-\uff12-\uff18\">\u6771\u4eac\u30bf\u30ef\u30fc<\/input><option value=\"\u65e5\u672c, \u6771\u4eac\u90fd\u4e2d\u592e\u533a\u6d5c\u96e2\u5bae\u5ead\u5712\uff11-1\">\u6d5c\u96e2\u5bae\u6069\u8cdc\u5ead\u5712<\/input><br \/>\n        <\/select><br \/>\n        <br \/>\n        <b>End:<\/b><br \/>\n        <select id=\"end\"><option value=\"35.6813,139.7661\">\u6771\u4eac\u99c5<\/option><option value=\"35.6842,139.7629\">\u5927\u624b\u753a\u99c5<\/option><\/select><br \/>\n        <br \/>\n        <input type=\"submit\" id=\"calcroute\">\n      <\/div>\n<div id=\"directions_panel\" style=\"margin:20px;background-color:#FFEE77;\"><\/div>\n<\/p><\/div>\n<div id=\"directionsPanel\" style=\"float:right;width:30%;height 100%\">\n<p>Total Distance: <span id=\"total\"><\/span><\/p>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tab-pane fade\" id=\"html1\">\n<pre>\r\n&lt;script type=\"text\/javascript\" src=\"http:\/\/maps.googleapis.com\/maps\/api\/js?key=\u30fb\u30fb\u30fb\u30fb&sensor=false\">&lt;\/script>\r\n&lt;style type=\"text\/css\">\r\n  #map-canvas { height: 400px }\r\n&lt;\/style>\r\n    &lt;div id=\"map-canvas\" style=\"float:left;width:70%;\">&lt;\/div>\r\n    &lt;div id=\"control_panel\" style=\"float:right;width:30%;text-align:left;padding-top:20px\">\r\n      &lt;div style=\"margin:20px;border-width:2px;\">\r\n        &lt;b>Start:&lt;\/b>\r\n        &lt;select id=\"start\">\r\n          &lt;option value=\"35.6813,139.7661\">\u6771\u4eac\u99c5&lt;\/option>\r\n          &lt;option value=\"35.6842,139.7629\">\u5927\u624b\u753a\u99c5&lt;\/option>\r\n        &lt;\/select>\r\n        &lt;br>\r\n        &lt;b>Waypoints:&lt;\/b> &lt;br>\r\n        &lt;i>(Ctrl-Click for multiple selection)&lt;\/i> &lt;br>\r\n        &lt;select multiple id=\"waypoints\">\r\n          &lt;option value=\"35.6857,139.7612\">\u5927\u624b\u9580&lt;\/input>\r\n          &lt;option value=\"35.6795,139.7577\">\u4e8c\u91cd\u6a4b\u524d&lt;\/input>\r\n          &lt;option value=\"\u65e5\u672c, \u6771\u4eac\u90fd\u6e2f\u533a\u829d\u516c\u5712\uff14-\uff12-\uff18\">\u6771\u4eac\u30bf\u30ef\u30fc&lt;\/input>\r\n          &lt;option value=\"\u65e5\u672c, \u6771\u4eac\u90fd\u4e2d\u592e\u533a\u6d5c\u96e2\u5bae\u5ead\u5712\uff11-1\">\u6d5c\u96e2\u5bae\u6069\u8cdc\u5ead\u5712&lt;\/input>\r\n        &lt;\/select>\r\n        &lt;br>\r\n        &lt;b>End:&lt;\/b>\r\n        &lt;select id=\"end\">\r\n          &lt;option value=\"35.6813,139.7661\">\u6771\u4eac\u99c5&lt;\/option>\r\n          &lt;option value=\"35.6842,139.7629\">\u5927\u624b\u753a\u99c5&lt;\/option>\r\n        &lt;\/select>\r\n        &lt;br>\r\n        &lt;input type=\"submit\" id=\"calcroute\">\r\n      &lt;\/div>\r\n      &lt;div id=\"directions_panel\" style=\"margin:20px;background-color:#FFEE77;\">&lt;\/div>\r\n    &lt;\/div>\r\n    &lt;div id=\"directionsPanel\" style=\"float:right;width:30%;height 100%\">\r\n      &lt;p>Total Distance: &lt;span id=\"total\">&lt;\/span>&lt;\/p>\r\n    &lt;\/div>\r\n&lt;script type=\"application\/dart\" src='http:\/\/www.example.com\/wp\/wp-content\/themes\/ang\/dart\/marker1\/index.dart'>&lt;\/script>\r\n&lt;script src='http:\/\/www.example.com\/wp\/wp-content\/themes\/ang\/dart\/packages\/browser\/dart.js'>&lt;\/script>\r\n&lt;script src='http:\/\/www.example.com\/wp\/wp-content\/themes\/ang\/dart\/packages\/browser\/interop.js'>&lt;\/script>\r\n<\/pre>\n<\/p><\/div>\n<div class=\"tab-pane fade\" id=\"script1\">\n<pre>\r\nlibrary google_maps;\r\n\r\nimport 'dart:html' show querySelector;\r\nimport 'dart:js' show context, JsObject;\r\n\r\ncomputeTotalDistance(result) {\r\n  var total = 0;\r\n  var myroute = result[\"routes\"][0];\r\n  var summaryPanel = querySelector('#directions_panel');\r\n  summaryPanel.innerHtml = '';\r\n  for (var i = 0; i < myroute[\"legs\"].length; i++) {\r\n    total += myroute[\"legs\"][i][\"distance\"][\"value\"];\r\n    var routeSegment = i + 1;\r\n    summaryPanel.innerHtml += '&lt;b>Route Segment: ' + routeSegment.toString() + '&lt;\/b>&lt;br>';\r\n    summaryPanel.innerHtml += myroute[\"legs\"][i][\"start_address\"] + ' to ';\r\n    summaryPanel.innerHtml += myroute[\"legs\"][i][\"end_address\"] + '&lt;br>';\r\n    summaryPanel.innerHtml += myroute[\"legs\"][i][\"distance\"][\"text\"] + '&lt;br>&lt;br>';\r\n  }\r\n  total = total \/ 1000.0;\r\n  print(total);\r\n  var totalPanel = querySelector('#total');\r\n  totalPanel.innerHtml = total.toString() + ' km';\r\n}\r\nvoid main() {\r\n  final google_maps = context['google']['maps'];\r\n  \r\n  var center = new JsObject(google_maps['LatLng'], [35.6814, 139.7661]);\r\n  \r\n  var mapTypeId = google_maps['MapTypeId']['ROADMAP'];\r\n\r\n  var mapOptions = new JsObject.jsify({\r\n    \"center\": center,\r\n    \"zoom\": 15,\r\n    \"mapTypeId\": mapTypeId\r\n  });\r\n\r\n  var map = new JsObject(google_maps['Map'], [querySelector('#map-canvas'), mapOptions]);\r\n  \r\n  var polyOptions = new JsObject.jsify({\r\n    \"strokeColor\": '#ff0000',\r\n    \"strokeOpacity\": 0.7,\r\n    \"strokeWeight\": 7\r\n  });\r\n  \r\n  var rendererOptions = new JsObject.jsify({\r\n    \"draggable\": true,\r\n    \"polylineOptions\": polyOptions\r\n  });\r\n  \r\n  var directionsService = new JsObject(google_maps['DirectionsService'], []);\r\n  var directionsDisplay = new JsObject(google_maps['DirectionsRenderer'], [rendererOptions]);\r\n  directionsDisplay.callMethod('setMap',[map]);\r\n  \/\/directionsDisplay.callMethod('setPanel',[querySelector('#directionsPanel')]);\r\n  \r\n  google_maps['event'].callMethod('addListener', [directionsDisplay, 'directions_changed', () {\r\n    var direction = directionsDisplay.callMethod('getDirections',[]);\r\n    computeTotalDistance(direction);\r\n  }]);\r\n  \r\n  var calcroute = querySelector('#calcroute');\r\n  calcroute.onClick.listen((event) {\r\n    var start = querySelector('#start');\r\n    var end = querySelector('#end');\r\n    List waypts = new List();\r\n    var checkboxArray = querySelector('#waypoints');\r\n    checkboxArray.children.forEach((el) {\r\n      if (el.selected == true) {\r\n        var waypt = new JsObject.jsify({\r\n          \"location\": el.value,\r\n          \"stopover\": true\r\n        });\r\n        waypts.add(waypt);\r\n      }\r\n    });\r\n    var  request = new JsObject.jsify({\r\n      \"origin\": start.value,\r\n      \"destination\": end.value,\r\n      \"waypoints\": waypts,\r\n      \"optimizeWaypoints\": true,\r\n      \"travelMode\": google_maps['TravelMode']['WALKING']\r\n    });\r\n    directionsService.callMethod('route',[request,(response, status) {\r\n      if (status == google_maps['DirectionsStatus']['OK']) {\r\n        directionsDisplay.callMethod('setDirections',[response]);\r\n        var route = response[\"routes\"][0];\r\n        var summaryPanel = querySelector('#directions_panel');\r\n        summaryPanel.innerHtml = '';\r\n        for (int i = 0; i < route[\"legs\"].length; i++) {\r\n          var routeSegment = i + 1;\r\n          summaryPanel.innerHtml += '&lt;b>Route Segment: ' + routeSegment.toString() + '&lt;\/b>&lt;br>';\r\n          summaryPanel.innerHtml += route[\"legs\"][i][\"start_address\"] + ' to ';\r\n          summaryPanel.innerHtml += route[\"legs\"][i][\"end_address\"] + '&lt;br>';\r\n          summaryPanel.innerHtml += route[\"legs\"][i][\"distance\"][\"text\"] + '&lt;br>&lt;br>';\r\n        }\r\n      }\r\n    }]);\r\n  });\r\n}\r\n<\/pre>\n<\/p><\/div>\n<p><!-- \/.tab-pane --><\/p><\/div>\n<p><!-- \/.tab-content -->\n<\/div>\n<p><!-- \/.tabpanel --><br \/>\n<script type=\"application\/dart\" src='http:\/\/www.honobono-life.info\/wpeng\/wp-content\/themes\/ang\/dart\/route3\/index.dart'><\/script><br \/>\n<script src='http:\/\/www.honobono-life.info\/wpeng\/wp-content\/themes\/ang\/dart\/packages\/browser\/dart.js'><\/script><br \/>\n<script src='http:\/\/www.honobono-life.info\/wpeng\/wp-content\/themes\/ang\/dart\/packages\/browser\/interop.js'><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dart : 1.8.3 Bootstrap : 3.2.0 include file dart.js,interop.js<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[101],"tags":[15,113,8],"class_list":["post-911","post","type-post","status-publish","format-standard","hentry","category-google-maps-with-dart","tag-directionsrenderer","tag-directions_changed","tag-event"],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/911","targetHints":{"allow":["GET"]}}],"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=911"}],"version-history":[{"count":7,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/911\/revisions"}],"predecessor-version":[{"id":1337,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/911\/revisions\/1337"}],"wp:attachment":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/media?parent=911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/categories?post=911"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/tags?post=911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}