Merge branch 'trial/zooming' into develop

This commit is contained in:
DennisSchiefer 2012-07-04 13:32:36 +01:00
commit 38ccb9d974
3 changed files with 57 additions and 6 deletions

View File

@ -89,13 +89,13 @@ click: function(e) {
if( !OSRM.G.markers.hasSource() ) {
var index = OSRM.G.markers.setSource( e.latlng );
OSRM.Geocoder.updateAddress( OSRM.C.SOURCE_LABEL, OSRM.C.DO_FALLBACK_TO_LAT_LNG );
OSRM.G.markers.route[index].show();
OSRM.Routing.getRoute();
OSRM.G.markers.route[index].show();
OSRM.Routing.getRoute( {recenter:OSRM.G.markers.route.length == 2} ); // allow recentering when the route is first shown
} else if( !OSRM.G.markers.hasTarget() ) {
var index = OSRM.G.markers.setTarget( e.latlng );
OSRM.Geocoder.updateAddress( OSRM.C.TARGET_LABEL, OSRM.C.DO_FALLBACK_TO_LAT_LNG );
OSRM.G.markers.route[index].show();
OSRM.Routing.getRoute();
OSRM.Routing.getRoute( {recenter:OSRM.G.markers.route.length == 2} ); // allow recentering when the route is first shown
}
},
geolocationResponse: function(response) {

View File

@ -18,6 +18,36 @@ or see http://www.gnu.org/licenses/agpl.txt.
// map view/model
// [extending Leaflet L.Map with setView/fitBounds methods that respect UI visibility, better layerControl]
OSRM.MapView = L.Map.extend({
_boundsInsideView: function(bounds) {
var viewBounds = this.getBounds(),
viewSw = this.project(viewBounds.getSouthWest()),
viewNe = this.project(viewBounds.getNorthEast()),
sw = this.project(bounds.getSouthWest()),
ne = this.project(bounds.getNorthEast());
if (viewNe.y > ne.y) { // north
return false;
}
if (viewNe.x < ne.x) { // east
return false;
}
if (viewSw.y < sw.y) { // south
return false;
}
if (viewSw.x > sw.x) { // west
return false;
}
return true;
},
setViewBounds: function(bounds) {
var zoom = this.getBoundsZoom(bounds); // maximum zoom level at which the bounds fit onto the map
if( this._zoom > zoom ) { // if current zoom level is too close change zoom level and recenter
this.setView(bounds.getCenter(), zoom);
} else if(!this._boundsInsideView(bounds)){ // if current zoom level is okay, but bounds are outside the viewport, pan
this.setView(bounds.getCenter(), this._zoom);
}
},
setViewUI: function(position, zoom, no_animation) {
if( OSRM.G.main_handle.boxVisible() ) {
var point = this.project( position, zoom);
@ -26,6 +56,23 @@ OSRM.MapView = L.Map.extend({
}
this.setView( position, zoom, no_animation);
},
setViewBoundsUI: function(bounds) {
var southwest = bounds.getSouthWest();
var northeast = bounds.getNorthEast();
var zoom = this.getBoundsZoom(bounds);
var sw_point = this.project( southwest, zoom);
if( OSRM.G.main_handle.boxVisible() )
sw_point.x-=OSRM.G.main_handle.boxWidth()+20;
else
sw_point.x-=20;
sw_point.y+=20;
var ne_point = this.project( northeast, zoom);
ne_point.y-=20;
ne_point.x+=20;
bounds.extend( this.unproject(sw_point,zoom) );
bounds.extend( this.unproject(ne_point,zoom) );
this.setViewBounds( bounds );
},
fitBoundsUI: function(bounds) {
var southwest = bounds.getSouthWest();
var northeast = bounds.getNorthEast();

View File

@ -54,7 +54,7 @@ timeoutRoute_Reversed: function() {
OSRM.G.markers.reverseMarkers();
OSRM.Routing.timeoutRoute();
},
showRoute: function(response) {
showRoute: function(response, parameters) {
if(!response)
return;
@ -71,6 +71,10 @@ showRoute: function(response) {
OSRM.Routing._snapRoute();
}
OSRM.Routing._updateHints(response);
if( parameters && parameters.recenter == true ) { // allow recentering when the route is first shown
var bounds = new L.LatLngBounds( OSRM.G.route._current_route.getPositions() );
OSRM.G.map.setViewBoundsUI(bounds);
}
},
showRoute_Dragging: function(response) {
if(!response)
@ -107,7 +111,7 @@ showRoute_Redraw: function(response) {
//-- main function --
//generate server calls to query routes
getRoute: function() {
getRoute: function(parameters) {
// if source or target are not set -> hide route
if( OSRM.G.markers.route.length < 2 ) {
@ -117,7 +121,7 @@ getRoute: function() {
OSRM.JSONP.clear('dragging');
OSRM.JSONP.clear('redraw');
OSRM.JSONP.clear('route');
OSRM.JSONP.call(OSRM.Routing._buildCall()+'&instructions=true', OSRM.Routing.showRoute, OSRM.Routing.timeoutRoute, OSRM.DEFAULTS.JSONP_TIMEOUT, 'route');
OSRM.JSONP.call(OSRM.Routing._buildCall()+'&instructions=true', OSRM.Routing.showRoute, OSRM.Routing.timeoutRoute, OSRM.DEFAULTS.JSONP_TIMEOUT, 'route', parameters);
},
getRoute_Reversed: function() {
if( OSRM.G.markers.route.length < 2 )