var querystring = require('querystring-component');
function zoomPrecision(zoom) {
- var decimals = Math.pow(10, Math.floor(zoom/3));
- return function(x) {
- return Math.round(x * decimals) / decimals;
- };
+ return Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
}
function normalBounds(bounds) {
* view tab and various other links
*/
function updatelinks(loc, zoom, layers, bounds, object) {
- var toPrecision = zoomPrecision(zoom);
+ var precision = zoomPrecision(zoom);
bounds = normalBounds(bounds);
- var node;
- var lat = toPrecision(loc.lat),
- lon = toPrecision(loc.lon || loc.lng);
+ var lat = loc.lat.toFixed(precision),
+ lon = (loc.lon || loc.lng).toFixed(precision);
if (bounds) {
- var minlon = toPrecision(bounds.getWest()),
- minlat = toPrecision(bounds.getSouth()),
- maxlon = toPrecision(bounds.getEast()),
- maxlat = toPrecision(bounds.getNorth());
+ var minlon = bounds.getWest().toFixed(precision),
+ minlat = bounds.getSouth().toFixed(precision),
+ maxlon = bounds.getEast().toFixed(precision),
+ maxlat = bounds.getNorth().toFixed(precision);
}
$(".geolink").each(setGeolink);
}
function setBounds(bounds) {
- var toPrecision = zoomPrecision(map.getZoom());
+ var precision = zoomPrecision(map.getZoom());
- $("#minlon").val(toPrecision(bounds.getWest()));
- $("#minlat").val(toPrecision(bounds.getSouth()));
- $("#maxlon").val(toPrecision(bounds.getEast()));
- $("#maxlat").val(toPrecision(bounds.getNorth()));
+ $("#minlon").val(bounds.getWest().toFixed(precision));
+ $("#minlat").val(bounds.getSouth().toFixed(precision));
+ $("#maxlon").val(bounds.getEast().toFixed(precision));
+ $("#maxlat").val(bounds.getNorth().toFixed(precision));
mapnikSizeChanged();
htmlUrlChanged();
getUrl: function(marker) {
var center = this.getCenter(),
zoom = this.getZoom(),
- toZoom = zoomPrecision(zoom),
+ precision = zoomPrecision(zoom),
params = {
- lat: toZoom(center.lat),
- lon: toZoom(center.lng),
+ lat: center.lat.toFixed(precision),
+ lon: center.lng.toFixed(precision),
zoom: zoom,
layers: this.getLayersCode()
};
if (marker && this.hasLayer(marker)) {
- params.mlat = toZoom(marker.getLatLng().lat);
- params.mlon = toZoom(marker.getLatLng().lng);
+ params.mlat = marker.getLatLng().lat.toFixed(precision);
+ params.mlon = marker.getLatLng().lng.toFixed(precision);
}
return 'http://' + OSM.SERVER_URL + '/?' + querystring.stringify(params);