Fork me on GitHub
Show:

File: ../src/util/gmaps.js

define([
  'aeris/util',
  'aeris/errors/invalidargumenterror',
  'googlemaps!'
], function(_, InvalidArgumentError, gmaps) {
  return {
    /**
     * Convert an array of latitude and longitude to Google's Lat/Lng object.
     *
     * @param {aeris.maps.LatLon} latLon
     * @return {google.maps.LatLng}
     * @method arrayToLatLng
     */
    arrayToLatLng: function(latLon) {
      if (_.isArray(latLon)) {
        latLon = new gmaps.LatLng(latLon[0], latLon[1]);
      }
      return latLon;
    },


    /**
     * Converts a {google.maps.LatLng} object
     * to a plain array
     *
     * @param {google.maps.LatLng} latLng
     * @return {aeris.maps.LatLon}
     * @method latLngToArray
     */
    latLngToArray: function(latLng) {
      if (latLng.lat && latLng.lng) {
        return [latLng.lat(), latLng.lng()];
      }

      throw new InvalidArgumentError('Expecting google.maps.LatLng object. Instead got: ' + latLng);
    },


    /**
     * Converts a path array to
     * an array of {google.maps.LatLng} objects.
     *
     * @param {aeris.maps.Path} path
     * @return {Array.<google.maps.LatLng>}
     * @method pathToLatLng
     */
    pathToLatLng: function(path) {
      var latLng = [];
      for (var i = 0; i < path.length; i++) {
        latLng.push(new gmaps.LatLng(path[i][0], path[i][1]));
      }

      return latLng;
    },


    /**
     * Converts an array of {google.maps.LatLng} objects
     * to a plain path array.
     *
     * @param {Array.<google.maps.LatLng>} latLng
     * @return {aeris.maps.Path}
     * @method latLngToPath
     */
    latLngToPath: function(latLng) {
      path = [];
      for (var i = 0; i < latLng.length; i++) {
        path.push([latLng[i].lat(), latLng[i].lng()]);
      }

      return path;
    },


    /**
     * @param {google.maps.LatLngBounds} bounds
     * @return {aeris.maps.Bounds} SW and NE Corner LatLons.
     * @method boundsToArray
     */
    boundsToArray: function(bounds) {
      var swLatLon = this.latLngToArray(bounds.getSouthWest());
      var neLatLon = this.latLngToArray(bounds.getNorthEast());
      return [swLatLon, neLatLon];
    },

    /**
     * Converts an array of SW/NE coordinates
     * to a google LatLngBounds object.
     *
     * @param {aeris.maps.Bounds} bounds LatLons of SW and NE corners.
     * @return {google.maps.LatLngBounds}
     * @method arrayToBounds
     */
    arrayToBounds: function(bounds) {
      return new gmaps.LatLngBounds(
        this.arrayToLatLng(bounds[0]),
        this.arrayToLatLng(bounds[1])
      );
    }
  };

});