/* * Maps for FMZ using Zurich council's WMTS tile server */ /* * Copied from Mark/Matthew's demo of using Zurich's layers * and merged with things that js/map-OpenLayers.js does */ function init_zurich_map(after) { fixmystreet.map = new OpenLayers.Map('map', { projection: new OpenLayers.Projection("EPSG:21781"), displayProjection: new OpenLayers.Projection("EPSG:21781"), maxExtent: new OpenLayers.Bounds(676000,241000,690000,255000), //projection: new OpenLayers.Projection("EPSG:4326"), //displayProjection: new OpenLayers.Projection("EPSG:4326"), //maxExtent: new OpenLayers.Bounds(8.444933818976226,47.31509040172551,8.632922236617937,47.442777990747416), units: 'm', scales: [ '250000', '125000', '64000', '32000', '16000', '8000', '4000', '2000', '1000', '500'], controls: fixmystreet.controls }); var format = new OpenLayers.Format.WMTSCapabilities(); jQuery.support.cors = true; jQuery.get("cobrands/zurich/Zurich-WMTSCapabilities.xml", '', function (data, textStatus, jqXHR) { var layer, centre; var capabilities = format.read(data); layer = format.createLayer(capabilities, { // Mark/Matthew's layer: "Luftbild", matrixSet: "default028mm", //matrixSet: "nativeTileMatrixSet", requestEncoding: "REST", isBaseLayer: true, // Things from the original map-OpenLayers.js zoomOffset: fixmystreet.zoomOffset, transitionEffect: 'resize', numZoomLevels: fixmystreet.numZoomLevels }); // For some reason with OpenLayers 2.11 the format // returns a KVP url not a REST one, despite the settings // we have above, so for now I'm hardcoding the right one //layer.url = layer.url.replace('arcgis/rest/services/', ''); layer.url = "http://www.wmts.stadt-zuerich.ch/Luftbild/MapServer/WMTS/tile/"; fixmystreet.map.addLayer(layer); centre = new OpenLayers.LonLat( fixmystreet.longitude, fixmystreet.latitude ); centre.transform( new OpenLayers.Projection("EPSG:4326"), fixmystreet.map.getProjectionObject() ); fixmystreet.map.setCenter(centre, fixmystreet.zoom || 3); // Call the after callback after(); }, 'xml'); } /* * set_map_config() is called on dom ready in map-OpenLayers.js * to setup the way the map should operate. */ function set_map_config(perm) { // This stuff is copied from js/map-bing-ol.js var permalink_id; if ($('#map_permalink').length) { permalink_id = 'map_permalink'; } var nav_opts = { zoomWheelEnabled: false }; if (fixmystreet.page == 'around' && $('html').hasClass('mobile')) { nav_opts = {}; } fixmystreet.nav_control = new OpenLayers.Control.Navigation(nav_opts); fixmystreet.controls = [ new OpenLayers.Control.Attribution(), new OpenLayers.Control.ArgParser(), fixmystreet.nav_control, new OpenLayers.Control.Permalink(permalink_id), new OpenLayers.Control.PanZoomFMS({id: 'fms_pan_zoom' }) ]; fixmystreet.map_type = OpenLayers.Layer.WMTS; // Set DPI - default is 72 OpenLayers.DOTS_PER_INCH = 96; // tell the main code to run our function instead // of setting the map up itself fixmystreet.map_setup = init_zurich_map; // Give main code a new bbox_strategy that translates between // lat/lon and our swiss coordinates fixmystreet.bbox_strategy = new OpenLayers.Strategy.ZurichBBOX({ratio: 1}); } OpenLayers.Strategy.ZurichBBOX = OpenLayers.Class(OpenLayers.Strategy.BBOX, { getMapBounds: function() { // Get the map bounds but return them in lat/lon, not // Swiss coordinates if (this.layer.map === null) { return null; } var swissBounds = this.layer.map.getExtent(); // Transform bound corners into WGS84 - note x/y arrangement of // values from the current bounding box, it seems wrong but is not. var topLeft = OpenLayers.Projection.CH1903.projectInverseSwiss( {y: swissBounds.left, x: swissBounds.top} ); var bottomRight = OpenLayers.Projection.CH1903.projectInverseSwiss( {y: swissBounds.right, x: swissBounds.bottom} ); return new OpenLayers.Bounds(topLeft.x, bottomRight.y, bottomRight.x, topLeft.y); }, CLASS_NAME: "OpenLayers.Strategy.ZurichBBOX" });