diff options
| author | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
|---|---|---|
| committer | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
| commit | b62676ca5d3d6f6ba3f019ea3f99722e165a98d8 (patch) | |
| tree | 86722cb80f07d4569f90088eeaea2fc2f6e2ef94 /hugo/tbl_gis_visualization.php | |
Diffstat (limited to '')
| -rw-r--r-- | hugo/tbl_gis_visualization.php | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/hugo/tbl_gis_visualization.php b/hugo/tbl_gis_visualization.php new file mode 100644 index 0000000..f272417 --- /dev/null +++ b/hugo/tbl_gis_visualization.php @@ -0,0 +1,220 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * handles creation of the GIS visualizations. + * + * @package PhpMyAdmin + */ + +require_once 'libraries/common.inc.php'; + +// Runs common work +require_once 'libraries/db_common.inc.php'; +$url_params['goto'] = $cfg['DefaultTabDatabase']; +$url_params['back'] = 'sql.php'; + +// Import visualization functions +require_once 'libraries/gis_visualization.lib.php'; + +$response = PMA_Response::getInstance(); +// Throw error if no sql query is set +if (! isset($sql_query) || $sql_query == '') { + $response->isSuccess(false); + $response->addHTML( + PMA_Message::error(__('No SQL query was set to fetch data.')) + ); + exit; +} + +// Execute the query and return the result +$result = PMA_DBI_try_query($sql_query); +// Get the meta data of results +$meta = PMA_DBI_get_fields_meta($result); + +// Find the candidate fields for label column and spatial column +$labelCandidates = array(); $spatialCandidates = array(); +foreach ($meta as $column_meta) { + if ($column_meta->type == 'geometry') { + $spatialCandidates[] = $column_meta->name; + } else { + $labelCandidates[] = $column_meta->name; + } +} + +// Get settings if any posted +$visualizationSettings = array(); +if (PMA_isValid($_REQUEST['visualizationSettings'], 'array')) { + $visualizationSettings = $_REQUEST['visualizationSettings']; +} + +if (! isset($visualizationSettings['labelColumn']) && isset($labelCandidates[0])) { + $visualizationSettings['labelColumn'] = ''; +} + +// If spatial column is not set, use first geometric colum as spatial column +if (! isset($visualizationSettings['spatialColumn'])) { + $visualizationSettings['spatialColumn'] = $spatialCandidates[0]; +} + +// Convert geometric columns from bytes to text. +$modified_query = PMA_GIS_modifyQuery($sql_query, $visualizationSettings); +$modified_result = PMA_DBI_try_query($modified_query); + +$data = array(); +while ($row = PMA_DBI_fetch_assoc($modified_result)) { + $data[] = $row; +} + +if (isset($_REQUEST['saveToFile'])) { + $response->disable(); + $file_name = $_REQUEST['fileName']; + if ($file_name == '') { + $file_name = $visualizationSettings['spatialColumn']; + } + + $save_format = $_REQUEST['fileFormat']; + PMA_GIS_saveToFile($data, $visualizationSettings, $save_format, $file_name); + exit(); +} + +$header = $response->getHeader(); +$scripts = $header->getScripts(); +$scripts->addFile('openlayers/OpenLayers.js'); +$scripts->addFile('jquery/jquery.svg.js'); +$scripts->addFile('tbl_gis_visualization.js'); +$scripts->addFile('OpenStreetMap.js'); + +// If all the rows contain SRID, use OpenStreetMaps on the initial loading. +if (! isset($_REQUEST['displayVisualization'])) { + $visualizationSettings['choice'] = 'useBaseLayer'; + foreach ($data as $row) { + if ($row['srid'] == 0) { + unset($visualizationSettings['choice']); + break; + } + } +} + +$svg_support = (PMA_USR_BROWSER_AGENT == 'IE' && PMA_USR_BROWSER_VER <= 8) + ? false : true; +$format = $svg_support ? 'svg' : 'png'; + +// get the chart and settings after chart generation +$visualization = PMA_GIS_visualizationResults( + $data, $visualizationSettings, $format +); + +/** + * Displays the page + */ +?> +<!-- Display visualization options --> +<div id="div_view_options"> +<fieldset> + <legend><?php echo __('Display GIS Visualization'); ?></legend> + <div style="width: 400px; float: left;"> + <form method="post" action="tbl_gis_visualization.php"> + <?php echo PMA_generate_common_hidden_inputs($url_params); ?> + <table class="gis_table"> + <tr><td><label for="labelColumn"><?php echo __("Label column"); ?></label></td> + <td><select name="visualizationSettings[labelColumn]" id="labelColumn"> + <option value=""><?php echo __("-- None --"); ?></option> + <?php + +foreach ($labelCandidates as $labelCandidate) { + echo('<option value="' . htmlspecialchars($labelCandidate) . '"'); + if ($labelCandidate == $visualizationSettings['labelColumn']) { + echo(' selected="selected"'); + } + echo('>' . htmlspecialchars($labelCandidate) . '</option>'); +} + ?> + </select></td> + </tr> + + <tr><td><label for="spatial Column"><?php echo __("Spatial column"); ?></label></td> + <td><select name="visualizationSettings[spatialColumn]" id="spatialColumn"> + <?php + +foreach ($spatialCandidates as $spatialCandidate) { + echo('<option value="' . htmlspecialchars($spatialCandidate) . '"'); + if ($spatialCandidate == $visualizationSettings['spatialColumn']) { + echo(' selected="selected"'); + } + echo('>' . htmlspecialchars($spatialCandidate) . '</option>'); +} + ?> + </select></td> + </tr> + <tr><td></td> + <td class="button"><input type="submit" name="displayVisualizationBtn" value="<?php echo __('Redraw'); ?>" /></td> + </tr> +<?php +if (! $GLOBALS['PMA_Config']->isHttps()) { + ?> + <tr><td class="choice" colspan="2"> + <input type="checkbox" name="visualizationSettings[choice]" id="choice" value="useBaseLayer" + <?php + if (isset($visualizationSettings['choice'])) { + echo(' checked="checked"'); + } + ?> + /> + <label for="choice"><?php echo __("Use OpenStreetMaps as Base Layer"); ?></label> + </td></tr> + <?php +} +?> + </table> + <input type="hidden" name="displayVisualization" value="redraw"> + <input type="hidden" name="sql_query" value="<?php echo htmlspecialchars($sql_query); ?>" /> + </form> + </div> + + <div style="float:left;"> + <form method="post" class="disableAjax" action="tbl_gis_visualization.php"> + <?php echo PMA_generate_common_hidden_inputs($url_params); ?> + <table class="gis_table"> + <tr><td><label for="fileName"><?php echo __("File name"); ?></label></td> + <td><input type="text" name="fileName" id="fileName" /></td> + </tr> + <tr><td><label for="fileFormat"><?php echo __("Format"); ?></label></td> + <td><select name="fileFormat" id="fileFormat"> + <option value="png">PNG</option> + <option value="pdf">PDF</option> + <?php + +if ($svg_support) { + echo ('<option value="svg" selected="selected">SVG</option>'); +} + ?> + </select></td> + </tr> + <tr><td></td> + <td class="button"><input type="submit" name="saveToFileBtn" value="<?php echo __('Download'); ?>" /></td> + </tr> + </table> + <input type="hidden" name="saveToFile" value="download"> + <input type="hidden" name="sql_query" value="<?php echo htmlspecialchars($sql_query); ?>" /> + </form> + </div> + + <div style="clear:both;"> </div> + + <div id="placeholder" style="width:<?php echo htmlspecialchars($visualizationSettings['width']); ?>px;height:<?php echo htmlspecialchars($visualizationSettings['height']); ?>px;"> + <?php echo $visualization; ?> + </div> + <div id="openlayersmap"></div> + <input type="hidden" id="pmaThemeImage" value="<?php echo($GLOBALS['pmaThemeImage']); ?>" /> + <script language="javascript" type="text/javascript"> + function drawOpenLayers() + { + <?php + if (! $GLOBALS['PMA_Config']->isHttps()) { + echo (PMA_GIS_visualizationResults($data, $visualizationSettings, 'ol')); + } + ?> + } + </script> +</fieldset> +</div> |
