212 lines
6.3 KiB
JavaScript
212 lines
6.3 KiB
JavaScript
/**
|
|
* Namespace: Util.OSM
|
|
*/
|
|
OpenLayers.Util.OSM = {};
|
|
|
|
/**
|
|
* Constant: MISSING_TILE_URL
|
|
* {String} URL of image to display for missing tiles
|
|
*/
|
|
OpenLayers.Util.OSM.MISSING_TILE_URL = "http://openstreetmap.org/openlayers/img/404.png";
|
|
|
|
/**
|
|
* Property: originalOnImageLoadError
|
|
* {Function} Original onImageLoadError function.
|
|
*/
|
|
OpenLayers.Util.OSM.originalOnImageLoadError = OpenLayers.Util.onImageLoadError;
|
|
|
|
/**
|
|
* Function: onImageLoadError
|
|
*/
|
|
OpenLayers.Util.onImageLoadError = function() {
|
|
if (this.src.match(/^http:\/\/[abc]\.[a-z]+\.openstreetmap\.org\//)) {
|
|
this.src = OpenLayers.Util.OSM.MISSING_TILE_URL;
|
|
} else if (this.src.match(/^http:\/\/[def]\.tah\.openstreetmap\.org\//)) {
|
|
// do nothing - this layer is transparent
|
|
} else {
|
|
OpenLayers.Util.OSM.originalOnImageLoadError;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* @requires OpenLayers/Layer/TMS.js
|
|
*
|
|
* Class: OpenLayers.Layer.OSM
|
|
*
|
|
* Inherits from:
|
|
* - <OpenLayers.Layer.TMS>
|
|
*/
|
|
OpenLayers.Layer.OSM = OpenLayers.Class(OpenLayers.Layer.TMS, {
|
|
/**
|
|
* Constructor: OpenLayers.Layer.OSM
|
|
*
|
|
* Parameters:
|
|
* name - {String}
|
|
* url - {String}
|
|
* options - {Object} Hashtable of extra options to tag onto the layer
|
|
*/
|
|
initialize: function(name, url, options) {
|
|
options = OpenLayers.Util.extend({
|
|
attribution: "Data by <a href='http://openstreetmap.org/'>OpenStreetMap</a>",
|
|
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
|
|
maxResolution: 156543.0339,
|
|
units: "m",
|
|
projection: "EPSG:900913",
|
|
transitionEffect: "resize"
|
|
}, options);
|
|
var newArguments = [name, url, options];
|
|
OpenLayers.Layer.TMS.prototype.initialize.apply(this, newArguments);
|
|
},
|
|
|
|
/**
|
|
* Method: getUrl
|
|
*
|
|
* Parameters:
|
|
* bounds - {<OpenLayers.Bounds>}
|
|
*
|
|
* Returns:
|
|
* {String} A string with the layer's url and parameters and also the
|
|
* passed-in bounds and appropriate tile size specified as
|
|
* parameters
|
|
*/
|
|
getURL: function (bounds) {
|
|
var res = this.map.getResolution();
|
|
var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
|
|
var y = Math.round((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));
|
|
var z = this.map.getZoom();
|
|
var limit = Math.pow(2, z);
|
|
|
|
if (y < 0 || y >= limit)
|
|
{
|
|
return OpenLayers.Util.OSM.MISSING_TILE_URL;
|
|
}
|
|
else
|
|
{
|
|
x = ((x % limit) + limit) % limit;
|
|
|
|
var url = this.url;
|
|
var path = z + "/" + x + "/" + y + ".png";
|
|
|
|
if (url instanceof Array)
|
|
{
|
|
url = this.selectUrl(path, url);
|
|
}
|
|
|
|
return url + path;
|
|
}
|
|
},
|
|
|
|
CLASS_NAME: "OpenLayers.Layer.OSM"
|
|
});
|
|
|
|
/**
|
|
* Class: OpenLayers.Layer.OSM.Mapnik
|
|
*
|
|
* Inherits from:
|
|
* - <OpenLayers.Layer.OSM>
|
|
*/
|
|
OpenLayers.Layer.OSM.Mapnik = OpenLayers.Class(OpenLayers.Layer.OSM, {
|
|
/**
|
|
* Constructor: OpenLayers.Layer.OSM.Mapnik
|
|
*
|
|
* Parameters:
|
|
* name - {String}
|
|
* options - {Object} Hashtable of extra options to tag onto the layer
|
|
*/
|
|
initialize: function(name, options) {
|
|
var url = [
|
|
"http://a.tile.openstreetmap.org/",
|
|
"http://b.tile.openstreetmap.org/",
|
|
"http://c.tile.openstreetmap.org/"
|
|
];
|
|
options = OpenLayers.Util.extend({ numZoomLevels: 19 }, options);
|
|
var newArguments = [name, url, options];
|
|
OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
|
|
},
|
|
|
|
CLASS_NAME: "OpenLayers.Layer.OSM.Mapnik"
|
|
});
|
|
|
|
/**
|
|
* Class: OpenLayers.Layer.OSM.Osmarender
|
|
*
|
|
* Inherits from:
|
|
* - <OpenLayers.Layer.OSM>
|
|
*/
|
|
OpenLayers.Layer.OSM.Osmarender = OpenLayers.Class(OpenLayers.Layer.OSM, {
|
|
/**
|
|
* Constructor: OpenLayers.Layer.OSM.Osmarender
|
|
*
|
|
* Parameters:
|
|
* name - {String}
|
|
* options - {Object} Hashtable of extra options to tag onto the layer
|
|
*/
|
|
initialize: function(name, options) {
|
|
var url = [
|
|
"http://a.tah.openstreetmap.org/Tiles/tile/",
|
|
"http://b.tah.openstreetmap.org/Tiles/tile/",
|
|
"http://c.tah.openstreetmap.org/Tiles/tile/"
|
|
];
|
|
options = OpenLayers.Util.extend({ numZoomLevels: 18 }, options);
|
|
var newArguments = [name, url, options];
|
|
OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
|
|
},
|
|
|
|
CLASS_NAME: "OpenLayers.Layer.OSM.Osmarender"
|
|
});
|
|
|
|
/**
|
|
* Class: OpenLayers.Layer.OSM.CycleMap
|
|
*
|
|
* Inherits from:
|
|
* - <OpenLayers.Layer.OSM>
|
|
*/
|
|
OpenLayers.Layer.OSM.CycleMap = OpenLayers.Class(OpenLayers.Layer.OSM, {
|
|
/**
|
|
* Constructor: OpenLayers.Layer.OSM.CycleMap
|
|
*
|
|
* Parameters:
|
|
* name - {String}
|
|
* options - {Object} Hashtable of extra options to tag onto the layer
|
|
*/
|
|
initialize: function(name, options) {
|
|
var url = [
|
|
"http://a.andy.sandbox.cloudmade.com/tiles/cycle/",
|
|
"http://b.andy.sandbox.cloudmade.com/tiles/cycle/",
|
|
"http://c.andy.sandbox.cloudmade.com/tiles/cycle/"
|
|
];
|
|
options = OpenLayers.Util.extend({ numZoomLevels: 18 }, options);
|
|
var newArguments = [name, url, options];
|
|
OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
|
|
},
|
|
|
|
CLASS_NAME: "OpenLayers.Layer.OSM.CycleMap"
|
|
});
|
|
|
|
/**
|
|
* Class: OpenLayers.Layer.OSM.Maplint
|
|
*
|
|
* Inherits from:
|
|
* - <OpenLayers.Layer.OSM>
|
|
*/
|
|
OpenLayers.Layer.OSM.Maplint = OpenLayers.Class(OpenLayers.Layer.OSM, {
|
|
/**
|
|
* Constructor: OpenLayers.Layer.OSM.Maplint
|
|
*
|
|
* Parameters:
|
|
* name - {String}
|
|
* options - {Object} Hashtable of extra options to tag onto the layer
|
|
*/
|
|
initialize: function(name, options) {
|
|
var url = [
|
|
"http://d.tah.openstreetmap.org/Tiles/maplint/",
|
|
"http://e.tah.openstreetmap.org/Tiles/maplint/",
|
|
"http://f.tah.openstreetmap.org/Tiles/maplint/"
|
|
];
|
|
options = OpenLayers.Util.extend({ numZoomLevels: 18, isBaseLayer: false, visibility: false }, options);
|
|
var newArguments = [name, url, options];
|
|
OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
|
|
},
|
|
|
|
CLASS_NAME: "OpenLayers.Layer.OSM.Maplint"
|
|
});
|