Fork me on GitHub
Show:

File: ../src/maps/openlayers/utils.js

define([
  'aeris/util'
], function(_) {
  /**
   * Utility library for OpenLayers.
   *
   * @alias aeris.maps.openlayers.utils
   */
  var mapUtil = {
    /**
     * @param {Object} evt OpenLayers event object.
     * @param {OpenLayers.Map} map
     * @return {aeris.maps.LatLon} Simple lat/lon array.
     * @method getLatLonFromEvent
     */
    getLatLonFromEvent: function(evt, map) {
      var lonLat = map.getLonLatFromPixel(evt.xy);
      var lonLatGeo = lonLat.clone();

      if (map.getProjection() != 'EPSG:4326') {
        lonLatGeo.transform(
          map.getProjectionObject(),
          new OpenLayers.Projection('EPSG:4326')
        );
      }

      return [lonLatGeo.lat, lonLatGeo.lon];
    },

    arrayToLonLat: function(latLon) {
      var lonLat = new OpenLayers.LonLat(latLon[1], latLon[0]);
      lonLat.transform(
        new OpenLayers.Projection('EPSG:4326'),
        new OpenLayers.Projection('EPSG:900913')
      );
      return lonLat;
    },

    lonLatToArray: function(lonLat) {
      var lonLatGeo = lonLat.clone();
      lonLatGeo.transform(
        new OpenLayers.Projection('EPSG:900913'),
        new OpenLayers.Projection('EPSG:4326')
      );

      return [lonLatGeo.lat, lonLatGeo.lon];
    },

    boundsToArray: function(bounds) {
      var neLonLat = new OpenLayers.LonLat(bounds.left, bounds.top);
      var swLonLat = new OpenLayers.LonLat(bounds.right, bounds.bottom);
      var ne = this.lonLatToArray(neLonLat);
      var sw = this.lonLatToArray(swLonLat);

      return [sw, ne];
    },

    listenTo: function(view, eventObj, ctx) {
      _.each(eventObj, function(handler, topic) {
        view.events.register(topic, ctx, handler);
      }, this);
    }
  };

  return mapUtil;
});