<!DOCTYPE html>
<html>
<head>
<title>Distance Matrix service</title>
<script data-require="angular.js@*" data-semver="1.2.0-rc2" src="http://code.angularjs.org/1.2.0-rc.2/angular.js"></script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script src="angular-google-distance.js"></script>
<script src="script.js"></script>
</head>
<body ng-app="myApp">
<div ng-controller="MainController">
<div id="inputs">
<pre>
$scope.origins = ['Vancouver BC', 'Seattle'];
$scope.destinations = ['San Francisco', '34.05, -118.25'];
</pre>
</div>
<p>{{data || "loading..."}}</p>
</div>
</body>
</html>
var myApp = angular.module('myApp',['angular.google.distance']);
myApp.controller('MainController', function($scope, GoogleDistanceAPI){
$scope.origins = ['Vancouver BC', 'Seattle'];
$scope.destinations = ['San Francisco', '34.05, -118.25'];
var args = {
origins: $scope.origins,
destinations: $scope.destinations
};
$scope.data = GoogleDistanceAPI
.getDistanceMatrix(args)
.then(function(distanceMatrix) {
return distanceMatrix;
})
});
/* Styles go here */
'use strict';
angular.module('angular.google.distance', [])
.value('googleMaps', google.maps)
.provider('GoogleDistanceAPI', function() {
var defaults = {
unitSystem: null,
durationInTraffic: false,
avoidHighways: false,
avoidTolls: false
};
this.$get = function($rootScope, $q, googleMaps, $window) {
var _travelModes = [];
var _unitSystems = [];
_travelModes.driving = googleMaps.TravelMode.DRIVING;
_travelModes.bicycling = googleMaps.TravelMode.BICYCLING;
_travelModes.transit = googleMaps.TravelMode.TRANSIT;
_travelModes.walking = googleMaps.TravelMode.WALKING;
_unitSystems.metric = googleMaps.UnitSystem.METRIC;
_unitSystems.imperial = googleMaps.UnitSystem.IMPERIAL;
function exec(args) {
var req = angular.copy(defaults, {});
angular.extend(req, args);
var deferred = $q.defer();
var elem, service;
function callback(results, status) {
if (status === googleMaps.DistanceMatrixStatus.OK || status === googleMaps.DistanceMatrixStatus.ZERO_RESULTS) {
$rootScope.$apply(function() {
return deferred.resolve(results);
});
} else {
$rootScope.$apply(function() {
return deferred.reject(status);
});
}
}
if (req.map) {
elem = req.map;
} else if (req.elem) {
elem = req.elem;
} else {
elem = $window.document.createElement('div');
}
service = new googleMaps.DistanceMatrixService();
service.getDistanceMatrix(req, callback);
return deferred.promise;
}
return {
getDistanceMatrix: function(args) {
args.travelMode = _travelModes[args.travelMode] || googleMaps.TravelMode.DRIVING;
args.unitSystem = _unitSystems[args.unitSystem] || googleMaps.UnitSystem.METRIC;
return exec(args);
}
};
};
this.$get.$inject = ['$rootScope', '$q', 'googleMaps', '$window'];
});