tbl_gis_visualization.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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/tbl_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 = $GLOBALS['dbi']->tryQuery($sql_query);
  26. // Get the meta data of results
  27. $meta = $GLOBALS['dbi']->getFieldsMeta($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 = $GLOBALS['dbi']->tryQuery($modified_query);
  52. $data = array();
  53. while ($row = $GLOBALS['dbi']->fetchAssoc($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. $html = PMA_getHtmlForGisVisualization(
  93. $url_params, $labelCandidates, $spatialCandidates,
  94. $visualizationSettings, $sql_query, $visualization, $svg_support,
  95. $data
  96. );
  97. $response->addHTML($html);
  98. ?>