shape.js.html 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>JSDoc: Source: directives/shape.js</title>
  6. <script src="scripts/prettify/prettify.js"> </script>
  7. <script src="scripts/prettify/lang-css.js"> </script>
  8. <!--[if lt IE 9]>
  9. <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  10. <![endif]-->
  11. <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
  12. <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
  13. </head>
  14. <body>
  15. <div id="main">
  16. <h1 class="page-title">Source: directives/shape.js</h1>
  17. <section>
  18. <article>
  19. <pre class="prettyprint source linenums"><code>/**
  20. * @ngdoc directive
  21. * @name shape
  22. * @requires Attr2Options
  23. * @description
  24. * Initialize a Google map shape in map with given options and register events
  25. * The shapes are:
  26. * . circle
  27. * . polygon
  28. * . polyline
  29. * . rectangle
  30. * . groundOverlay(or image)
  31. *
  32. * Requires: map directive
  33. *
  34. * Restrict To: Element
  35. *
  36. * @param {Boolean} centered if set, map will be centered with this marker
  37. * @param {String} &amp;lt;OPTIONS>
  38. * For circle, [any circle options](https://developers.google.com/maps/documentation/javascript/reference#CircleOptions)
  39. * For polygon, [any polygon options](https://developers.google.com/maps/documentation/javascript/reference#PolygonOptions)
  40. * For polyline, [any polyline options](https://developers.google.com/maps/documentation/javascript/reference#PolylineOptions)
  41. * For rectangle, [any rectangle options](https://developers.google.com/maps/documentation/javascript/reference#RectangleOptions)
  42. * For image, [any groundOverlay options](https://developers.google.com/maps/documentation/javascript/reference#GroundOverlayOptions)
  43. * @param {String} &amp;lt;MapEvent> Any Shape events, https://developers.google.com/maps/documentation/javascript/reference
  44. * @example
  45. * Usage:
  46. * &lt;map MAP_ATTRIBUTES>
  47. * &lt;shape name=SHAPE_NAME ANY_SHAPE_OPTIONS ANY_SHAPE_EVENTS">&lt;/MARKER>
  48. * &lt;/map>
  49. *
  50. * Example:
  51. *
  52. * &lt;map zoom="11" center="[40.74, -74.18]">
  53. * &lt;shape id="polyline" name="polyline" geodesic="true" stroke-color="#FF0000" stroke-opacity="1.0" stroke-weight="2"
  54. * path="[[40.74,-74.18],[40.64,-74.10],[40.54,-74.05],[40.44,-74]]" >&lt;/shape>
  55. * &lt;/map>
  56. *
  57. * &lt;map zoom="11" center="[40.74, -74.18]">
  58. * &lt;shape id="polygon" name="polygon" stroke-color="#FF0000" stroke-opacity="1.0" stroke-weight="2"
  59. * paths="[[40.74,-74.18],[40.64,-74.18],[40.84,-74.08],[40.74,-74.18]]" >&lt;/shape>
  60. * &lt;/map>
  61. *
  62. * &lt;map zoom="11" center="[40.74, -74.18]">
  63. * &lt;shape id="rectangle" name="rectangle" stroke-color='#FF0000' stroke-opacity="0.8" stroke-weight="2"
  64. * bounds="[[40.74,-74.18], [40.78,-74.14]]" editable="true" >&lt;/shape>
  65. * &lt;/map>
  66. *
  67. * &lt;map zoom="11" center="[40.74, -74.18]">
  68. * &lt;shape id="circle" name="circle" stroke-color='#FF0000' stroke-opacity="0.8"stroke-weight="2"
  69. * center="[40.70,-74.14]" radius="4000" editable="true" >&lt;/shape>
  70. * &lt;/map>
  71. *
  72. * &lt;map zoom="11" center="[40.74, -74.18]">
  73. * &lt;shape id="image" name="image" url="https://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg"
  74. * bounds="[[40.71,-74.22],[40.77,-74.12]]" opacity="0.7" clickable="true" >&lt;/shape>
  75. * &lt;/map>
  76. *
  77. * For full-working example, please visit
  78. * [shape example](https://rawgit.com/allenhwkim/angularjs-google-maps/master/build/shape.html)
  79. */
  80. ngMap.directive('shape', ['Attr2Options', function(Attr2Options) {
  81. var parser = Attr2Options;
  82. var getBounds = function(points) {
  83. return new google.maps.LatLngBounds(points[0], points[1]);
  84. };
  85. var getShape = function(options, events) {
  86. var shape;
  87. var shapeName = options.name;
  88. delete options.name; //remove name bcoz it's not for options
  89. console.log("shape", shapeName, "options", options, 'events', events);
  90. /**
  91. * set options
  92. */
  93. if (options.icons) {
  94. for (var i=0; i&lt;options.icons.length; i++) {
  95. var el = options.icons[i];
  96. if (el.icon.path.match(/^[A-Z_]+$/)) {
  97. el.icon.path = google.maps.SymbolPath[el.icon.path];
  98. }
  99. }
  100. }
  101. switch(shapeName) {
  102. case "circle":
  103. if (options.center instanceof google.maps.LatLng) {
  104. shape = new google.maps.Circle(options);
  105. } else {
  106. var orgCenter = options.center;
  107. options.center = new google.maps.LatLng(0,0);
  108. shape = new google.maps.Circle(options);
  109. parser.setDelayedGeoLocation(shape, 'setCenter', orgCenter);
  110. }
  111. break;
  112. case "polygon":
  113. shape = new google.maps.Polygon(options);
  114. break;
  115. case "polyline":
  116. shape = new google.maps.Polyline(options);
  117. break;
  118. case "rectangle":
  119. if (options.bounds) {
  120. options.bounds = getBounds(options.bounds);
  121. }
  122. shape = new google.maps.Rectangle(options);
  123. break;
  124. case "groundOverlay":
  125. case "image":
  126. var url = options.url;
  127. var bounds = getBounds(options.bounds);
  128. var opts = {opacity: options.opacity, clickable: options.clickable, id:options.id};
  129. shape = new google.maps.GroundOverlay(url, bounds, opts);
  130. break;
  131. }
  132. /**
  133. * set events
  134. */
  135. for (var eventName in events) {
  136. if (events[eventName]) {
  137. google.maps.event.addListener(shape, eventName, events[eventName]);
  138. }
  139. }
  140. return shape;
  141. };
  142. return {
  143. restrict: 'E',
  144. require: '^map',
  145. /**
  146. * link function
  147. * @private
  148. */
  149. link: function(scope, element, attrs, mapController) {
  150. var orgAttrs = parser.orgAttributes(element);
  151. var filtered = parser.filter(attrs);
  152. var shapeOptions = parser.getOptions(filtered);
  153. var shapeEvents = parser.getEvents(scope, filtered);
  154. var shape = getShape(shapeOptions, shapeEvents);
  155. mapController.addShape(shape);
  156. /**
  157. * set observers
  158. */
  159. parser.observeAttrSetObj(orgAttrs, attrs, shape);
  160. }
  161. }; // return
  162. }]);
  163. </code></pre>
  164. </article>
  165. </section>
  166. </div>
  167. <nav>
  168. <h2><a href="index.html">Index</a></h2><h3>service</h3><ul><li><a href="Attr2Options.html">Attr2Options</a></li><li><a href="GeoCoder.html">GeoCoder</a></li><li><a href="NavigatorGeolocation.html">NavigatorGeolocation</a></li><li><a href="StreetView.html">StreetView</a></li></ul><h3>directive</h3><ul><li><a href="bicycling-layer.html">bicycling-layer</a></li><li><a href="cloud-layer.html">cloud-layer</a></li><li><a href="custom-control.html">custom-control</a></li><li><a href="drawing-manager.html">drawing-manager</a></li><li><a href="dynamic-maps-engine-layer.html">dynamic-maps-engine-layer</a></li><li><a href="fusion-tables-layer.html">fusion-tables-layer</a></li><li><a href="heatmap-layer.html">heatmap-layer</a></li><li><a href="info-window.html">info-window</a></li><li><a href="kml-layer.html">kml-layer</a></li><li><a href="lazy-load.html">lazy-load</a></li><li><a href="map.html">map</a></li><li><a href="map-data.html">map-data</a></li><li><a href="map-type.html">map-type</a></li><li><a href="MapController.html">MapController</a></li><li><a href="maps-engine-layer.html">maps-engine-layer</a></li><li><a href="marker.html">marker</a></li><li><a href="overlay-map-type.html">overlay-map-type</a></li><li><a href="shape.html">shape</a></li><li><a href="traffic-layer.html">traffic-layer</a></li><li><a href="transit-layer.html">transit-layer</a></li><li><a href="weather-layer.html">weather-layer</a></li></ul>
  169. </nav>
  170. <br clear="both">
  171. <footer>
  172. Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.0-alpha9</a>
  173. and <a href="https://github.com/allenhwkim/angular-jsdoc">angular-jsdoc</a>
  174. </footer>
  175. <script> prettyPrint(); </script>
  176. <script src="scripts/linenumber.js"> </script>
  177. <script>
  178. var href=window.location.href.match(/\/([^\/]+$)/)[1];
  179. document.querySelector("nav a[href='"+href+"']").scrollIntoView(true);
  180. if (window.location.hash == "")
  181. document.querySelector("body").scrollIntoView(true);
  182. </script>
  183. </body>
  184. </html>