{"id":1016,"date":"2015-03-18T02:23:48","date_gmt":"2015-03-18T02:23:48","guid":{"rendered":"http:\/\/www.honobono-life.info\/wpeng\/?p=1016"},"modified":"2017-10-06T23:21:26","modified_gmt":"2017-10-06T23:21:26","slug":"google-maps-with-dart-place-autocomplete","status":"publish","type":"post","link":"http:\/\/www.honobono-life.info\/wpeng\/google-maps-with-dart-place-autocomplete\/","title":{"rendered":"Google Maps with Dart Place Autocomplete"},"content":{"rendered":"<ul>\r\n<li>Dart : 1.8.5<\/li>\r\n<li>Bootstrap : 3.2.0<\/li>\r\n<li>include file<\/li>\r\ndart.js,interop.js\r\n<\/ul>\r\n<!--more-->\r\n<script type=\"text\/javascript\" src=\"http:\/\/maps.googleapis.com\/maps\/api\/js?key=AIzaSyArJcThvMs4MtAlxahZB6VR2lvsqzBzz3M&#038;sensor=false&#038;libraries=places\"><\/script>\r\n<div 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<style type=\"text\/css\">\r\n  #map-canvas { height: 400px }\r\n  .controls {\r\n    margin-top: 16px;\r\n    border: 1px solid transparent;\r\n    border-radius: 2px 0 0 2px;\r\n    box-sizing: border-box;\r\n    -moz-box-sizing: border-box;\r\n    height: 32px;\r\n    outline: none;\r\n    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);\r\n  }\r\n  #pac-input {\r\n    background-color: #fff;\r\n    padding: 0 11px 0 13px;\r\n    width: 30%;\r\n    font-family: Roboto;\r\n    font-size: 15px;\r\n    font-weight: 300;\r\n    text-overflow: ellipsis;\r\n  }\r\n\r\n  #pac-input:focus {\r\n    border-color: #4d90fe;\r\n    margin-left: -1px;\r\n    padding-left: 14px;  \/* Regular padding-left + 1. *\/\r\n    width: 30%;\r\n  }\r\n\r\n  .pac-container {\r\n    font-family: Roboto;\r\n  }\r\n\r\n  #type-selector {\r\n    color: #fff;\r\n    background-color: #4d90fe;\r\n    padding: 5px 11px 0px 11px;\r\n  }\r\n\r\n  #type-selector label {\r\n    font-family: Roboto;\r\n    font-size: 13px;\r\n    font-weight: 300;\r\n  }\r\n<\/style>\r\n<input id=\"pac-input\" class=\"controls\" type=\"text\"\r\n    placeholder=\"Enter a location\">\r\n<div id=\"type-selector\" class=\"controls\">\r\n  <input type=\"radio\" name=\"type\" id=\"changetype-all\" checked=\"checked\">\r\n  <label for=\"changetype-all\">All<\/label>\r\n\r\n  <input type=\"radio\" name=\"type\" id=\"changetype-establishment\">\r\n  <label for=\"changetype-establishment\">Establishments<\/label>\r\n\r\n  <input type=\"radio\" name=\"type\" id=\"changetype-geocode\">\r\n  <label for=\"changetype-geocode\">Geocodes<\/label>\r\n<\/div>\r\n<div id=\"map-canvas\"><\/div>\r\n\r\n    <\/div>\r\n    <div class=\"tab-pane\" id=\"html1\">\r\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;link rel=\"stylesheet\" href=\"css\/bootstrap.min.css\">\r\n&lt;style type=\"text\/css\">\r\n  #map-canvas { height: 400px }\r\n  .controls {\r\n    margin-top: 16px;\r\n    border: 1px solid transparent;\r\n    border-radius: 2px 0 0 2px;\r\n    box-sizing: border-box;\r\n    -moz-box-sizing: border-box;\r\n    height: 32px;\r\n    outline: none;\r\n    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);\r\n  }\r\n  #pac-input {\r\n    background-color: #fff;\r\n    padding: 0 11px 0 13px;\r\n    width: 300px;\r\n    font-family: Roboto;\r\n    font-size: 15px;\r\n    font-weight: 300;\r\n    text-overflow: ellipsis;\r\n  }\r\n\r\n  #pac-input:focus {\r\n    border-color: #4d90fe;\r\n    margin-left: -1px;\r\n    padding-left: 14px;  \/* Regular padding-left + 1. *\/\r\n    width: 301px;\r\n  }\r\n\r\n  .pac-container {\r\n    font-family: Roboto;\r\n  }\r\n\r\n  #type-selector {\r\n    color: #fff;\r\n    background-color: #4d90fe;\r\n    padding: 5px 11px 0px 11px;\r\n  }\r\n\r\n  #type-selector label {\r\n    font-family: Roboto;\r\n    font-size: 13px;\r\n    font-weight: 300;\r\n  }\r\n&lt;\/style>\r\n&lt;input id=\"pac-input\" class=\"controls\" type=\"text\"\r\n    placeholder=\"Enter a location\">\r\n&lt;div id=\"type-selector\" class=\"controls\">\r\n  &lt;input type=\"radio\" name=\"type\" id=\"changetype-all\" checked=\"checked\">\r\n  &lt;label for=\"changetype-all\">All&lt;\/label>\r\n\r\n  &lt;input type=\"radio\" name=\"type\" id=\"changetype-establishment\">\r\n  &lt;label for=\"changetype-establishment\">Establishments&lt;\/label>\r\n\r\n  &lt;input type=\"radio\" name=\"type\" id=\"changetype-geocode\">\r\n  &lt;label for=\"changetype-geocode\">Geocodes&lt;\/label>\r\n&lt;\/div>\r\n&lt;div id=\"map-canvas\">&lt;\/div>\r\n&lt;script type=\"application\/dart\" src='http:\/\/www.example.com\/wp\/wp-content\/themes\/ang\/dart\/addr-pos\/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\r\n<\/pre>\r\n    <\/div>\r\n\r\n    <div class=\"tab-pane\" id=\"script1\">\r\n<pre>\r\nlibrary google_maps;\r\n\r\nimport 'dart:html' show querySelector;\r\nimport 'dart:js' show context, JsObject;\r\nfinal google_maps = context['google']['maps'];\r\nvar autocomplete;\r\n\r\nsetupClickListener(id, types) {\r\n  var radioButton = querySelector(id);\r\n  var j_types = new JsObject.jsify(types);\r\n  google_maps['event'].callMethod('addDomListener', [radioButton, 'click', (event) {\r\n    autocomplete.callMethod('setTypes',[j_types]);\r\n  }]);\r\n}\r\n\r\nvoid main() {\r\n  var center = new JsObject(google_maps['LatLng'], [35.6814, 139.7661]);\r\n  var mapTypeId = google_maps['MapTypeId']['ROADMAP'];\r\n  var mapOptions = new JsObject.jsify({\r\n      \"center\": center,\r\n      \"zoom\": 15,\r\n      \"mapTypeId\": mapTypeId\r\n  });\r\n  var map = new JsObject(google_maps['Map'], [querySelector('#map-canvas'), mapOptions]);\r\n  \r\n  var input = querySelector('#pac-input');\r\n  var types = querySelector('#type-selector');\r\n  \r\n  map['controls'][google_maps['ControlPosition']['TOP_LEFT']].callMethod('push',[input]);\r\n  map['controls'][google_maps['ControlPosition']['TOP_LEFT']].callMethod('push',[types]);\r\n  \r\n  var bound1 = new JsObject(google_maps['LatLng'], [35.6909, 139.7415]);\r\n  var bound2 = new JsObject(google_maps['LatLng'], [35.6717, 139.7809]);\r\n  var defaultBounds = new JsObject(google_maps['LatLngBounds'], [bound1,bound2]);\r\n  var boundsOptions = new JsObject.jsify({\r\n    \"bounds\": defaultBounds,\r\n    \"types\": ['establishment']\r\n  });\r\n  autocomplete = new JsObject(google_maps['places']['Autocomplete'], [input,boundsOptions]);\r\n  autocomplete.callMethod('bindTo',['bounds', map]);\r\n  \r\n  var infowindow = new JsObject(google_maps['InfoWindow'], []);\r\n  var markerOptions = new JsObject.jsify({\r\n    \"map\": map\r\n  });\r\n  var marker = new JsObject(google_maps['Marker'], [markerOptions]);\r\n  google_maps['event'].callMethod('addListener', [autocomplete, 'place_changed', () {\r\n    infowindow.callMethod('close',[]);\r\n    marker.callMethod('setVisible',[false]);\r\n    var place = autocomplete.callMethod('getPlace',[]);\r\n    if (place['geometry'] == null) {\r\n      return;\r\n    }\r\n    if (place['geometry']['viewport'] != null) {\r\n      map.callMethod('fitBounds',[place['geometry']['viewport']]);\r\n    } else {\r\n      map.callMethod('setCenter',[place['geometry']['location']]);\r\n      map.callMethod('setZoom',[17]);\r\n    }\r\n    var iconOptions = new JsObject.jsify({\r\n      \"url\": place['icon'],\r\n      \"size\": new JsObject(google_maps['Size'], [71, 71]),\r\n      \"origin\": new JsObject(google_maps['Point'], [0,0]),\r\n      \"anchor\": new JsObject(google_maps['Point'], [17,34]),\r\n      \"scaledSize\": new JsObject(google_maps['Size'], [35,35])\r\n    });\r\n    marker.callMethod('setIcon',[iconOptions]);\r\n    marker.callMethod('setPosition',[place['geometry']['location']]);\r\n    marker.callMethod('setVisible',[true]);\r\n    var address = '';\r\n    if (place['address_components'] != null) {\r\n      for (int i = 0; i < place['address_components'].length; i++) {\r\n        address += place['address_components'][i]['short_name'].isNotEmpty?\r\n            place['address_components'][i]['short_name'] + ' ':'';\r\n      }\r\n    }\r\n    infowindow.callMethod('setContent',['<div><strong>' + place['name'] + '<\/strong><br>' + address]);\r\n    infowindow.callMethod('open',[map,marker]);\r\n  }]);\r\n  \r\n  setupClickListener('#changetype-all', []);\r\n  setupClickListener('#changetype-establishment', ['establishment']);\r\n  setupClickListener('#changetype-geocode', ['geocode']);\r\n}\r\n<\/pre>\r\n    <\/div><!-- \/.tab-pane -->\r\n\r\n  <\/div><!-- \/.tab-content -->\r\n<\/div><!-- \/.tabpanel -->\r\n<script type=\"application\/dart\" src='http:\/\/www.honobono-life.info\/wpeng\/wp-content\/themes\/ang\/dart\/place4\/index.dart'><\/script>\r\n<script src='http:\/\/www.honobono-life.info\/wpeng\/wp-content\/themes\/ang\/dart\/packages\/browser\/dart.js'><\/script>\r\n<script src='http:\/\/www.honobono-life.info\/wpeng\/wp-content\/themes\/ang\/dart\/packages\/browser\/interop.js'><\/script>","protected":false},"excerpt":{"rendered":"<p>Dart : 1.8.5 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":[51,100,46],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1016"}],"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=1016"}],"version-history":[{"count":11,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1016\/revisions"}],"predecessor-version":[{"id":1314,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1016\/revisions\/1314"}],"wp:attachment":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/media?parent=1016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/categories?post=1016"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/tags?post=1016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}