123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <title>JSDoc: Source: directives/shape.js</title>
- <script src="scripts/prettify/prettify.js"> </script>
- <script src="scripts/prettify/lang-css.js"> </script>
- <!--[if lt IE 9]>
- <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
- <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
- <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
- </head>
- <body>
- <div id="main">
- <h1 class="page-title">Source: directives/shape.js</h1>
-
-
- <section>
- <article>
- <pre class="prettyprint source linenums"><code>/**
- * @ngdoc directive
- * @name shape
- * @requires Attr2Options
- * @description
- * Initialize a Google map shape in map with given options and register events
- * The shapes are:
- * . circle
- * . polygon
- * . polyline
- * . rectangle
- * . groundOverlay(or image)
- *
- * Requires: map directive
- *
- * Restrict To: Element
- *
- * @param {Boolean} centered if set, map will be centered with this marker
- * @param {String} &lt;OPTIONS>
- * For circle, [any circle options](https://developers.google.com/maps/documentation/javascript/reference#CircleOptions)
- * For polygon, [any polygon options](https://developers.google.com/maps/documentation/javascript/reference#PolygonOptions)
- * For polyline, [any polyline options](https://developers.google.com/maps/documentation/javascript/reference#PolylineOptions)
- * For rectangle, [any rectangle options](https://developers.google.com/maps/documentation/javascript/reference#RectangleOptions)
- * For image, [any groundOverlay options](https://developers.google.com/maps/documentation/javascript/reference#GroundOverlayOptions)
- * @param {String} &lt;MapEvent> Any Shape events, https://developers.google.com/maps/documentation/javascript/reference
- * @example
- * Usage:
- * <map MAP_ATTRIBUTES>
- * <shape name=SHAPE_NAME ANY_SHAPE_OPTIONS ANY_SHAPE_EVENTS"></MARKER>
- * </map>
- *
- * Example:
- *
- * <map zoom="11" center="[40.74, -74.18]">
- * <shape id="polyline" name="polyline" geodesic="true" stroke-color="#FF0000" stroke-opacity="1.0" stroke-weight="2"
- * path="[[40.74,-74.18],[40.64,-74.10],[40.54,-74.05],[40.44,-74]]" ></shape>
- * </map>
- *
- * <map zoom="11" center="[40.74, -74.18]">
- * <shape id="polygon" name="polygon" stroke-color="#FF0000" stroke-opacity="1.0" stroke-weight="2"
- * paths="[[40.74,-74.18],[40.64,-74.18],[40.84,-74.08],[40.74,-74.18]]" ></shape>
- * </map>
- *
- * <map zoom="11" center="[40.74, -74.18]">
- * <shape id="rectangle" name="rectangle" stroke-color='#FF0000' stroke-opacity="0.8" stroke-weight="2"
- * bounds="[[40.74,-74.18], [40.78,-74.14]]" editable="true" ></shape>
- * </map>
- *
- * <map zoom="11" center="[40.74, -74.18]">
- * <shape id="circle" name="circle" stroke-color='#FF0000' stroke-opacity="0.8"stroke-weight="2"
- * center="[40.70,-74.14]" radius="4000" editable="true" ></shape>
- * </map>
- *
- * <map zoom="11" center="[40.74, -74.18]">
- * <shape id="image" name="image" url="https://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg"
- * bounds="[[40.71,-74.22],[40.77,-74.12]]" opacity="0.7" clickable="true" ></shape>
- * </map>
- *
- * For full-working example, please visit
- * [shape example](https://rawgit.com/allenhwkim/angularjs-google-maps/master/build/shape.html)
- */
- ngMap.directive('shape', ['Attr2Options', function(Attr2Options) {
- var parser = Attr2Options;
-
- var getBounds = function(points) {
- return new google.maps.LatLngBounds(points[0], points[1]);
- };
-
- var getShape = function(options, events) {
- var shape;
- var shapeName = options.name;
- delete options.name; //remove name bcoz it's not for options
- console.log("shape", shapeName, "options", options, 'events', events);
- /**
- * set options
- */
- if (options.icons) {
- for (var i=0; i<options.icons.length; i++) {
- var el = options.icons[i];
- if (el.icon.path.match(/^[A-Z_]+$/)) {
- el.icon.path = google.maps.SymbolPath[el.icon.path];
- }
- }
- }
- switch(shapeName) {
- case "circle":
- if (options.center instanceof google.maps.LatLng) {
- shape = new google.maps.Circle(options);
- } else {
- var orgCenter = options.center;
- options.center = new google.maps.LatLng(0,0);
- shape = new google.maps.Circle(options);
- parser.setDelayedGeoLocation(shape, 'setCenter', orgCenter);
- }
- break;
- case "polygon":
- shape = new google.maps.Polygon(options);
- break;
- case "polyline":
- shape = new google.maps.Polyline(options);
- break;
- case "rectangle":
- if (options.bounds) {
- options.bounds = getBounds(options.bounds);
- }
- shape = new google.maps.Rectangle(options);
- break;
- case "groundOverlay":
- case "image":
- var url = options.url;
- var bounds = getBounds(options.bounds);
- var opts = {opacity: options.opacity, clickable: options.clickable, id:options.id};
- shape = new google.maps.GroundOverlay(url, bounds, opts);
- break;
- }
- /**
- * set events
- */
- for (var eventName in events) {
- if (events[eventName]) {
- google.maps.event.addListener(shape, eventName, events[eventName]);
- }
- }
- return shape;
- };
-
- return {
- restrict: 'E',
- require: '^map',
- /**
- * link function
- * @private
- */
- link: function(scope, element, attrs, mapController) {
- var orgAttrs = parser.orgAttributes(element);
- var filtered = parser.filter(attrs);
- var shapeOptions = parser.getOptions(filtered);
- var shapeEvents = parser.getEvents(scope, filtered);
- var shape = getShape(shapeOptions, shapeEvents);
- mapController.addShape(shape);
- /**
- * set observers
- */
- parser.observeAttrSetObj(orgAttrs, attrs, shape);
- }
- }; // return
- }]);
- </code></pre>
- </article>
- </section>
- </div>
- <nav>
- <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>
- </nav>
- <br clear="both">
- <footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.0-alpha9</a>
- and <a href="https://github.com/allenhwkim/angular-jsdoc">angular-jsdoc</a>
- </footer>
- <script> prettyPrint(); </script>
- <script src="scripts/linenumber.js"> </script>
- <script>
- var href=window.location.href.match(/\/([^\/]+$)/)[1];
- document.querySelector("nav a[href='"+href+"']").scrollIntoView(true);
- if (window.location.hash == "")
- document.querySelector("body").scrollIntoView(true);
- </script>
- </body>
- </html>
|