tbl_gis_visualization.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * handles creation of the GIS visualizations.
  5. *
  6. * @package PhpMyAdmin
  7. */
  8. require_once 'libraries/common.inc.php';
  9. // Runs common work
  10. require_once 'libraries/db_common.inc.php';
  11. $url_params['goto'] = $cfg['DefaultTabDatabase'];
  12. $url_params['back'] = 'sql.php';
  13. // Import visualization functions
  14. require_once 'libraries/gis_visualization.lib.php';
  15. $response = PMA_Response::getInstance();
  16. // Throw error if no sql query is set
  17. if (! isset($sql_query) || $sql_query == '') {
  18. $response->isSuccess(false);
  19. $response->addHTML(
  20. PMA_Message::error(__('No SQL query was set to fetch data.'))
  21. );
  22. exit;
  23. }
  24. // Execute the query and return the result
  25. $result = PMA_DBI_try_query($sql_query);
  26. // Get the meta data of results
  27. $meta = PMA_DBI_get_fields_meta($result);
  28. // Find the candidate fields for label column and spatial column
  29. $labelCandidates = array(); $spatialCandidates = array();
  30. foreach ($meta as $column_meta) {
  31. if ($column_meta->type == 'geometry') {
  32. $spatialCandidates[] = $column_meta->name;
  33. } else {
  34. $labelCandidates[] = $column_meta->name;
  35. }
  36. }
  37. // Get settings if any posted
  38. $visualizationSettings = array();
  39. if (PMA_isValid($_REQUEST['visualizationSettings'], 'array')) {
  40. $visualizationSettings = $_REQUEST['visualizationSettings'];
  41. }
  42. if (! isset($visualizationSettings['labelColumn']) && isset($labelCandidates[0])) {
  43. $visualizationSettings['labelColumn'] = '';
  44. }
  45. // If spatial column is not set, use first geometric colum as spatial column
  46. if (! isset($visualizationSettings['spatialColumn'])) {
  47. $visualizationSettings['spatialColumn'] = $spatialCandidates[0];
  48. }
  49. // Convert geometric columns from bytes to text.
  50. $modified_query = PMA_GIS_modifyQuery($sql_query, $visualizationSettings);
  51. $modified_result = PMA_DBI_try_query($modified_query);
  52. $data = array();
  53. while ($row = PMA_DBI_fetch_assoc($modified_result)) {
  54. $data[] = $row;
  55. }
  56. if (isset($_REQUEST['saveToFile'])) {
  57. $response->disable();
  58. $file_name = $_REQUEST['fileName'];
  59. if ($file_name == '') {
  60. $file_name = $visualizationSettings['spatialColumn'];
  61. }
  62. $save_format = $_REQUEST['fileFormat'];
  63. PMA_GIS_saveToFile($data, $visualizationSettings, $save_format, $file_name);
  64. exit();
  65. }
  66. $header = $response->getHeader();
  67. $scripts = $header->getScripts();
  68. $scripts->addFile('openlayers/OpenLayers.js');
  69. $scripts->addFile('jquery/jquery.svg.js');
  70. $scripts->addFile('tbl_gis_visualization.js');
  71. $scripts->addFile('OpenStreetMap.js');
  72. // If all the rows contain SRID, use OpenStreetMaps on the initial loading.
  73. if (! isset($_REQUEST['displayVisualization'])) {
  74. $visualizationSettings['choice'] = 'useBaseLayer';
  75. foreach ($data as $row) {
  76. if ($row['srid'] == 0) {
  77. unset($visualizationSettings['choice']);
  78. break;
  79. }
  80. }
  81. }
  82. $svg_support = (PMA_USR_BROWSER_AGENT == 'IE' && PMA_USR_BROWSER_VER <= 8)
  83. ? false : true;
  84. $format = $svg_support ? 'svg' : 'png';
  85. // get the chart and settings after chart generation
  86. $visualization = PMA_GIS_visualizationResults(
  87. $data, $visualizationSettings, $format
  88. );
  89. /**
  90. * Displays the page
  91. */
  92. ?>
  93. <!-- Display visualization options -->
  94. <div id="div_view_options">
  95. <fieldset>
  96. <legend><?php echo __('Display GIS Visualization'); ?></legend>
  97. <div style="width: 400px; float: left;">
  98. <form method="post" action="tbl_gis_visualization.php">
  99. <?php echo PMA_generate_common_hidden_inputs($url_params); ?>
  100. <table class="gis_table">
  101. <tr><td><label for="labelColumn"><?php echo __("Label column"); ?></label></td>
  102. <td><select name="visualizationSettings[labelColumn]" id="labelColumn">
  103. <option value=""><?php echo __("-- None --"); ?></option>
  104. <?php
  105. foreach ($labelCandidates as $labelCandidate) {
  106. echo('<option value="' . htmlspecialchars($labelCandidate) . '"');
  107. if ($labelCandidate == $visualizationSettings['labelColumn']) {
  108. echo(' selected="selected"');
  109. }
  110. echo('>' . htmlspecialchars($labelCandidate) . '</option>');
  111. }
  112. ?>
  113. </select></td>
  114. </tr>
  115. <tr><td><label for="spatial Column"><?php echo __("Spatial column"); ?></label></td>
  116. <td><select name="visualizationSettings[spatialColumn]" id="spatialColumn">
  117. <?php
  118. foreach ($spatialCandidates as $spatialCandidate) {
  119. echo('<option value="' . htmlspecialchars($spatialCandidate) . '"');
  120. if ($spatialCandidate == $visualizationSettings['spatialColumn']) {
  121. echo(' selected="selected"');
  122. }
  123. echo('>' . htmlspecialchars($spatialCandidate) . '</option>');
  124. }
  125. ?>
  126. </select></td>
  127. </tr>
  128. <tr><td></td>
  129. <td class="button"><input type="submit" name="displayVisualizationBtn" value="<?php echo __('Redraw'); ?>" /></td>
  130. </tr>
  131. <?php
  132. if (! $GLOBALS['PMA_Config']->isHttps()) {
  133. ?>
  134. <tr><td class="choice" colspan="2">
  135. <input type="checkbox" name="visualizationSettings[choice]" id="choice" value="useBaseLayer"
  136. <?php
  137. if (isset($visualizationSettings['choice'])) {
  138. echo(' checked="checked"');
  139. }
  140. ?>
  141. />
  142. <label for="choice"><?php echo __("Use OpenStreetMaps as Base Layer"); ?></label>
  143. </td></tr>
  144. <?php
  145. }
  146. ?>
  147. </table>
  148. <input type="hidden" name="displayVisualization" value="redraw">
  149. <input type="hidden" name="sql_query" value="<?php echo htmlspecialchars($sql_query); ?>" />
  150. </form>
  151. </div>
  152. <div style="float:left;">
  153. <form method="post" class="disableAjax" action="tbl_gis_visualization.php">
  154. <?php echo PMA_generate_common_hidden_inputs($url_params); ?>
  155. <table class="gis_table">
  156. <tr><td><label for="fileName"><?php echo __("File name"); ?></label></td>
  157. <td><input type="text" name="fileName" id="fileName" /></td>
  158. </tr>
  159. <tr><td><label for="fileFormat"><?php echo __("Format"); ?></label></td>
  160. <td><select name="fileFormat" id="fileFormat">
  161. <option value="png">PNG</option>
  162. <option value="pdf">PDF</option>
  163. <?php
  164. if ($svg_support) {
  165. echo ('<option value="svg" selected="selected">SVG</option>');
  166. }
  167. ?>
  168. </select></td>
  169. </tr>
  170. <tr><td></td>
  171. <td class="button"><input type="submit" name="saveToFileBtn" value="<?php echo __('Download'); ?>" /></td>
  172. </tr>
  173. </table>
  174. <input type="hidden" name="saveToFile" value="download">
  175. <input type="hidden" name="sql_query" value="<?php echo htmlspecialchars($sql_query); ?>" />
  176. </form>
  177. </div>
  178. <div style="clear:both;">&nbsp;</div>
  179. <div id="placeholder" style="width:<?php echo htmlspecialchars($visualizationSettings['width']); ?>px;height:<?php echo htmlspecialchars($visualizationSettings['height']); ?>px;">
  180. <?php echo $visualization; ?>
  181. </div>
  182. <div id="openlayersmap"></div>
  183. <input type="hidden" id="pmaThemeImage" value="<?php echo($GLOBALS['pmaThemeImage']); ?>" />
  184. <script language="javascript" type="text/javascript">
  185. function drawOpenLayers()
  186. {
  187. <?php
  188. if (! $GLOBALS['PMA_Config']->isHttps()) {
  189. echo (PMA_GIS_visualizationResults($data, $visualizationSettings, 'ol'));
  190. }
  191. ?>
  192. }
  193. </script>
  194. </fieldset>
  195. </div>