From 6ae969a5ee3d2e30ccf3d95aefa7f641a3ccd2db Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Sun, 31 Jul 2011 14:04:12 +0530 Subject: [PATCH] Serve OpenStreetMap.js locally --- js/OpenStreetMap.js | 125 ++++++++++++++++++++++++++++++++++++++ sql.php | 8 +++ tbl_change.php | 13 ++-- tbl_gis_visualization.php | 2 +- tbl_select.php | 9 +++ 5 files changed, 149 insertions(+), 8 deletions(-) create mode 100644 js/OpenStreetMap.js diff --git a/js/OpenStreetMap.js b/js/OpenStreetMap.js new file mode 100644 index 0000000000..aebfa65db0 --- /dev/null +++ b/js/OpenStreetMap.js @@ -0,0 +1,125 @@ +/** + * 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://www.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; + } +}; + +/** + * Class: OpenLayers.Layer.OSM.Mapnik + * + * Inherits from: + * - + */ +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/${z}/${x}/${y}.png", + "http://b.tile.openstreetmap.org/${z}/${x}/${y}.png", + "http://c.tile.openstreetmap.org/${z}/${x}/${y}.png" + ]; + options = OpenLayers.Util.extend({ + numZoomLevels: 19, + buffer: 0, + transitionEffect: "resize" + }, 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.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/${z}/${x}/${y}.png", + "http://b.tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png", + "http://c.tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png" + ]; + options = OpenLayers.Util.extend({ + numZoomLevels: 18, + buffer: 0, + transitionEffect: "resize" + }, 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.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.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png", + "http://b.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png", + "http://c.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png" + ]; + options = OpenLayers.Util.extend({ + numZoomLevels: 19, + buffer: 0, + transitionEffect: "resize" + }, options); + var newArguments = [name, url, options]; + OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); + }, + + CLASS_NAME: "OpenLayers.Layer.OSM.CycleMap" +}); diff --git a/sql.php b/sql.php index 94a0b0d1e5..51521730cf 100644 --- a/sql.php +++ b/sql.php @@ -17,6 +17,14 @@ require_once './libraries/bookmark.lib.php'; $GLOBALS['js_include'][] = 'jquery/jquery-ui-1.8.custom.js'; $GLOBALS['js_include'][] = 'tbl_change.js'; +// required for GIS editor loaded via AJAX +$GLOBALS['js_include'][] = 'jquery/jquery.svg.js'; +$GLOBALS['js_include'][] = 'jquery/jquery.mousewheel.js'; +$GLOBALS['js_include'][] = 'jquery/jquery.event.drag-2.0.min.js'; +$GLOBALS['js_include'][] = 'tbl_gis_visualization.js'; +$GLOBALS['js_include'][] = 'openlayers/OpenLayers.js'; +$GLOBALS['js_include'][] = 'OpenStreetMap.js'; + if (isset($_SESSION['profiling'])) { $GLOBALS['js_include'][] = 'highcharts/highcharts.js'; /* Files required for chart exporting */ diff --git a/tbl_change.php b/tbl_change.php index 07d6b082e6..32dcbd669e 100644 --- a/tbl_change.php +++ b/tbl_change.php @@ -116,13 +116,17 @@ if ($GLOBALS['cfg']['ShowPropertyComments']) { */ $GLOBALS['js_include'][] = 'functions.js'; $GLOBALS['js_include'][] = 'tbl_change.js'; +$GLOBALS['js_include'][] = 'jquery/jquery-ui-1.8.custom.js'; +$GLOBALS['js_include'][] = 'jquery/timepicker.js'; + +// required for GIS editor $GLOBALS['js_include'][] = 'jquery/jquery.svg.js'; $GLOBALS['js_include'][] = 'jquery/jquery.mousewheel.js'; $GLOBALS['js_include'][] = 'jquery/jquery.event.drag-2.0.min.js'; $GLOBALS['js_include'][] = 'tbl_gis_visualization.js'; $GLOBALS['js_include'][] = 'openlayers/OpenLayers.js'; -$GLOBALS['js_include'][] = 'jquery/jquery-ui-1.8.custom.js'; -$GLOBALS['js_include'][] = 'jquery/timepicker.js'; +$GLOBALS['js_include'][] = 'OpenStreetMap.js'; + /** * HTTP and HTML headers */ @@ -968,7 +972,6 @@ foreach ($rows as $row_id => $vrow) { } } if (in_array($field['pma_type'], $gis_data_types)) { - $gis_exists = true; $data_val = isset($vrow[$field['Field']]) ? $vrow[$field['Field']] : ''; $_url_params = array( 'field' => $field['Field_title'], @@ -994,10 +997,6 @@ foreach ($rows as $row_id => $vrow) { echo '
'; } // end foreach on multi-edit -// Conditionally add OpenStreetMap.js if geometry columns exist -if (isset($gis_exists) && $gis_exists == true) { - echo('