diff --git a/README.md b/README.md
index a8ac074..ae23750 100644
--- a/README.md
+++ b/README.md
@@ -2,17 +2,17 @@
QGIS PgHydroTools Plugin is an interface used in QGIS to activate all functionality of PgHydro Extension for PostgreSQL/PostGIS.
-To use this plugin, you have to install the PgHydro 6.2 extension for PostgreSQL/PostGIS at https://github.com/pghydro/pghydro
+To use this plugin, you have to install the PgHydro 6.4 extension for PostgreSQL/PostGIS at https://github.com/pghydro/pghydro
# STATUS
## Branches
-The master branch has the latest minor release. (2.2)
+The master branch has the latest minor release. (2.4)
-The develop branch has the next minor release. (2.3-dev)
+The develop branch has the next minor release. (2.5-dev)
-Next LTR: version 2.4 (Julho 2018)
+Next LTR: version 2.6 (February 2022)
# INTRODUCTION
@@ -30,11 +30,11 @@ PostGIS version 2.0+
QGIS version 2.14+
-Pghydro 6.2
+Pghydro 6.4
-Pghydro Consistency 6.2
+Pghydro Consistency 6.4
-Pghydro Output 6.2
+Pghydro Output 6.4
## INSTALLATION
diff --git a/metadata.txt b/metadata.txt
index dba9f7e..591cc08 100644
--- a/metadata.txt
+++ b/metadata.txt
@@ -10,7 +10,7 @@
name=Pghydro Tools
qgisMinimumVersion=2.0
description=PgHydro Tools Interface for PgHydro Extension for PostgreSQL/PostGIS
-version=2.2
+version=2.4
author=PgHydro Team
email=pghydro.project@gmail.com
@@ -36,6 +36,14 @@ repository=www.github.com/pghydro/pghydrotools
- Insert of new version logo
- Resource_rc bug fixed including and not more deleting codes.
- ...
+ 2.4 - Rename "Connect" label button to "Test Connection"
+ - Update Version labels to version 2.4
+ - Uncheck "Add Pfafstetter Basin Coding Columns"
+ - Update port to 5432
+ - Insert offset to watercourse
+ - Create spatial index to drn_gm_point geometry column in the table pghydro.pghft_drainage_line after Consist "Drainage Line x Drainage Area" check
+ - Execution of Vacuum, Analyse and Reindex after each major processing
+ - ...
# Tags are comma separated with spaces allowed
tags=spatial database system, otto pfafstetter, drainage, hydrology, hydrography, hydro
@@ -47,5 +55,4 @@ icon=icon.png
experimental=False
# deprecated flag (applies to the whole plugin, not just a single version)
-deprecated=False
-
+deprecated=False
\ No newline at end of file
diff --git a/pghydro_tools.py b/pghydro_tools.py
index 4844184..89b0494 100644
--- a/pghydro_tools.py
+++ b/pghydro_tools.py
@@ -5,9 +5,9 @@
A QGIS plugin
This plugin create the pghydro schema and runs all the process to consist a drainage network
-------------------
- begin : 2015-10-07
+ begin : 2020-01-31
git sha : $Format:%H$
- copyright : (C) 2015 by Alexandre de Amorim Teixeira
+ copyright : (C) 2020 by Alexandre de Amorim Teixeira
email : pghydro.project@gmail.com
***************************************************************************/
@@ -227,56 +227,6 @@ def unload(self):
###Database Editing
- def execute_sql(self, sql):
- host = self.dlg.lineEdit_host.text()
- port = self.dlg.lineEdit_port.text()
- dbname = self.dlg.lineEdit_base.text()
- schema = self.dlg.lineEdit_schema.text()
- user = self.dlg.lineEdit_user.text()
- password = self.dlg.lineEdit_password.text()
- connection_str = 'host={0} port={1} dbname={2} user={3} password={4}'.format(host, port, dbname, user, password)
-
- try:
- conn = None
- conn = psycopg2.connect(connection_str)
- conn.autocommit = True
- cur = conn.cursor()
- cur.execute(sql)
- cur.close()
- conn.close()
-
- except:
- self.print_console_message('ERROR\nCheck Database Input Parameters!')
-
- def return_sql(self, sql):
- host = self.dlg.lineEdit_host.text()
- port = self.dlg.lineEdit_port.text()
- dbname = self.dlg.lineEdit_base.text()
- schema = self.dlg.lineEdit_schema.text()
- user = self.dlg.lineEdit_user.text()
- password = self.dlg.lineEdit_password.text()
- connection_str = 'host={0} port={1} dbname={2} user={3} password={4}'.format(host, port, dbname, user, password)
-
- try:
- conn = None
- conn = psycopg2.connect(connection_str)
- conn.autocommit = True
- cur = conn.cursor()
- cur.execute(sql)
- result = str(cur.fetchone()[0])
- cur.close()
- conn.close()
- return result
-
- except:
- self.print_console_message('ERROR\nCheck Database Input Parameters!')
-
- def print_console_message(self, message):
-
- self.dlg.console.append(time.strftime("\n%d.%m.%Y"+" - "+"%H"+":"+"%M"+":"+"%S"))
- self.dlg.console.append(message)
- self.dlg.console.repaint()
-
def create_database(self):
host = self.dlg.lineEdit_host.text()
port = self.dlg.lineEdit_port.text()
@@ -322,7 +272,7 @@ def create_database(self):
self.execute_sql(create_pghydro)
- self.print_console_message("PgHydro Extension successfully Created!\n")
+ self.print_console_message("PgHydro Extension Successfully Created!\n")
self.execute_sql(create_pgh_consistency)
@@ -357,6 +307,56 @@ def connect_database(self):
except:
self.print_console_message('ERROR\nCheck Database Input Parameters!')
+ def execute_sql(self, sql):
+ host = self.dlg.lineEdit_host.text()
+ port = self.dlg.lineEdit_port.text()
+ dbname = self.dlg.lineEdit_base.text()
+ schema = self.dlg.lineEdit_schema.text()
+ user = self.dlg.lineEdit_user.text()
+ password = self.dlg.lineEdit_password.text()
+ connection_str = 'host={0} port={1} dbname={2} user={3} password={4}'.format(host, port, dbname, user, password)
+
+ try:
+ conn = None
+ conn = psycopg2.connect(connection_str)
+ conn.autocommit = True
+ cur = conn.cursor()
+ cur.execute(sql)
+ cur.close()
+ conn.close()
+
+ except:
+ self.print_console_message('ERROR\nCheck Database Input Parameters!')
+
+ def return_sql(self, sql):
+ host = self.dlg.lineEdit_host.text()
+ port = self.dlg.lineEdit_port.text()
+ dbname = self.dlg.lineEdit_base.text()
+ schema = self.dlg.lineEdit_schema.text()
+ user = self.dlg.lineEdit_user.text()
+ password = self.dlg.lineEdit_password.text()
+ connection_str = 'host={0} port={1} dbname={2} user={3} password={4}'.format(host, port, dbname, user, password)
+
+ try:
+ conn = None
+ conn = psycopg2.connect(connection_str)
+ conn.autocommit = True
+ cur = conn.cursor()
+ cur.execute(sql)
+ result = str(cur.fetchone()[0])
+ cur.close()
+ conn.close()
+ return result
+
+ except:
+ self.print_console_message('ERROR\nCheck Database Input Parameters!')
+
+ def print_console_message(self, message):
+
+ self.dlg.console.append(time.strftime("\n%d.%m.%Y"+" - "+"%H"+":"+"%M"+":"+"%S"))
+ self.dlg.console.append(message)
+ self.dlg.console.repaint()
+
###Input Drainage Line
def import_drainage_line(self):
@@ -374,16 +374,18 @@ def import_drainage_line(self):
self.print_console_message('Importing Drainage Lines. Please, wait...\n')
self.dlg.console.append('SCHEMA: '+input_drainage_line_table_schema)
- self.dlg.console.append('TABELA GEOMETRICA: '+input_drainage_line_table)
- self.dlg.console.append('COLUNA COM NOME: '+input_drainage_line_table_attribute_name)
- self.dlg.console.append('COLUNA GEOMETRICA: '+input_drainage_line_table_attribute_geom)
+ self.dlg.console.append('GEOMETRY TABLE: '+input_drainage_line_table)
+ self.dlg.console.append('RIVER NAME COLUMN: '+input_drainage_line_table_attribute_name)
+ self.dlg.console.append('GEOMETRY COLUMN: '+input_drainage_line_table_attribute_geom)
- sql = """
+ sql= """
SELECT pghydro.pghfn_input_data_drainage_line('"""+input_drainage_line_table_schema+"""','"""+input_drainage_line_table+"""','"""+input_drainage_line_table_attribute_geom+"""','"""+input_drainage_line_table_attribute_name+"""');
"""
-
+
self.execute_sql(sql)
+ self.Vacuum_Database()
+
self.print_console_message('Drainage Lines Successfully Imported!\n')
except:
@@ -406,16 +408,18 @@ def import_drainage_area(self):
self.print_console_message('Updating Drainage Areas. Please, wait...\n')
self.dlg.console.append('SCHEME: '+input_drainage_area_table_schema)
- self.dlg.console.append('GEOMETRIC TABLE: '+input_drainage_area_table)
- self.dlg.console.append('GEOMETRIC COLUMN: '+input_drainage_area_table_attribute_geom)
+ self.dlg.console.append('GEOMETRY TABLE: '+input_drainage_area_table)
+ self.dlg.console.append('GEOMETRY COLUMN: '+input_drainage_area_table_attribute_geom)
self.dlg.console.repaint()
sql = """
SELECT pghydro.pghfn_input_data_drainage_area('"""+input_drainage_area_table_schema+"""','"""+input_drainage_area_table+"""','"""+input_drainage_area_table_attribute_geom+"""');
"""
+
self.execute_sql(sql)
-
-
+
+ self.Vacuum_Database()
+
self.print_console_message('Drainage Areas Successfully Imported!\n')
@@ -600,14 +604,19 @@ def Check_DrainageLineGeometryConsistencies(self):
"""
self.Turn_OFF_Audit()
+
+ self.Vacuum_Database()
+
self.execute_sql(sql1)
self.execute_sql(sql2)
self.execute_sql(sql3)
self.execute_sql(sql4)
-
+
self.Check_DrainageLineIsNotSingle()
self.Check_DrainageLineIsNotSimple()
self.Check_DrainageLineIsNotValid()
+
+ self.Vacuum_Database()
self.print_console_message('Geometric Consistency Successfully Checked!\n')
@@ -715,11 +724,14 @@ def Check_DrainageLineTopologyConsistencies_1(self):
"""
self.Turn_OFF_Audit()
+
self.execute_sql(sql)
self.Check_DrainageLineWithinDrainageLine()
self.Check_DrainageLineOverlapDrainageLine()
self.Check_DrainageLineLoops()
+
+ self.Vacuum_Database()
self.print_console_message('Topological Consistency Part I Successfully Checked!\n')
@@ -788,12 +800,15 @@ def Check_DrainageLineTopologyConsistencies_2(self):
sql = """
SELECT pgh_consistency.pghfn_UpdateDrainageLineConsistencyTopologyTables_2();
"""
-
+
self.Turn_OFF_Audit()
+
self.execute_sql(sql)
self.Check_DrainageLineCrossDrainageLine()
self.Check_DrainageLineTouchDrainageLine()
+
+ self.Vacuum_Database()
self.print_console_message('Topological Consistency Part II Successfully Checked!\n')
@@ -815,13 +830,8 @@ def BreakDrainageLines(self):
SELECT pgh_consistency.pghfn_BreakDrainageLine();
"""
- sql3 = """
- SELECT pgh_consistency.pghfn_ExplodeDrainageLine();
- """
-
self.execute_sql(sql1)
self.execute_sql(sql2)
- self.execute_sql(sql3)
self.print_console_message('Geometries Successfully Broken!\n')
@@ -910,7 +920,7 @@ def Execute_Network_Topology(self):
try:
self.print_console_message('Creating Drainage Line Network. Please, wait...\n')
-
+
sql1 = """
DROP INDEX IF EXISTS pghydro.drp_gm_idx;
@@ -944,14 +954,17 @@ def Execute_Network_Topology(self):
"""
self.Turn_OFF_Audit()
+
self.execute_sql(sql1)
self.execute_sql(sql2)
self.execute_sql(sql3)
self.execute_sql(sql4)
self.execute_sql(sql5)
-
+
self.Check_PointValenceValue2()
self.Check_PointValenceValue4()
+
+ self.Vacuum_Database()
self.print_console_message('Drainage Line Network Successfully Created!\n')
@@ -1076,6 +1089,7 @@ def Execute_Flow_Direction(self):
"""
self.Turn_OFF_Audit()
+
self.execute_sql(sql1)
self.execute_sql(sql2)
self.execute_sql(sql3)
@@ -1084,6 +1098,8 @@ def Execute_Flow_Direction(self):
self.Check_DrainageLineIsDisconnected()
self.Check_PointDivergent()
+
+ self.Vacuum_Database()
self.print_console_message('Flow Direction Successfully Calculated!\n')
@@ -1235,8 +1251,6 @@ def MakeDrainageAreaValid(self):
def Check_DrainageAreaGeometryConsistencies(self):
- self.print_console_message('Checking Geometric Consistency. Please, wait...\n')
-
DrainageAreaPrecision = self.dlg.lineEdit_DrainageAreaPrecision.text()
DrainageAreaOffset = self.dlg.lineEdit_DrainageAreaOffset.text()
@@ -1281,6 +1295,9 @@ def Check_DrainageAreaGeometryConsistencies(self):
"""
self.Turn_OFF_Audit()
+
+ self.Vacuum_Database()
+
self.execute_sql(sql1)
self.execute_sql(sql2)
self.execute_sql(sql3)
@@ -1292,6 +1309,8 @@ def Check_DrainageAreaGeometryConsistencies(self):
self.Check_DrainageAreaIsNotSingle()
self.Check_DrainageAreaIsNotSimple()
self.Check_DrainageAreaIsNotValid()
+
+ self.Vacuum_Database()
self.print_console_message('Geometric Consistency Successfully Checked!\n')
@@ -1402,10 +1421,13 @@ def Check_DrainageAreaTopologyConsistencies(self):
"""
self.Turn_OFF_Audit()
+
self.execute_sql(sql)
self.Check_DrainageAreaWithinDrainageArea()
self.Check_DrainageAreaOverlapDrainageArea()
+
+ self.Vacuum_Database()
self.print_console_message('Topological Geometry Successfully Checked!\n')
@@ -1550,6 +1572,10 @@ def Check_DrainageAreaDrainageLineConsistencies(self):
CREATE INDEX drn_gm_idx ON pghydro.pghft_drainage_line USING GIST(drn_gm);
+ DROP INDEX IF EXISTS pghydro.drn_gm_point_idx;
+
+ CREATE INDEX drn_gm_point_idx ON pghydro.pghft_drainage_line USING GIST(drn_gm_point);
+
DROP INDEX IF EXISTS pghydro.drp_gm_idx;
CREATE INDEX drp_gm_idx ON pghydro.pghft_drainage_point USING GIST(drp_gm);
@@ -1574,17 +1600,22 @@ def Check_DrainageAreaDrainageLineConsistencies(self):
"""
self.Turn_OFF_Audit()
+
+ self.Vacuum_Database()
+
self.execute_sql(sql1)
self.execute_sql(sql2)
self.execute_sql(sql3)
self.execute_sql(sql4)
self.execute_sql(sql5)
self.execute_sql(sql6)
-
+
self.Check_DrainageAreaMoreOneDrainageLine()
self.Check_DrainageLineNoDrainageArea()
self.Check_DrainageAreaNoDrainageLine()
self.Check_DrainageLineMoreOneDrainageArea()
+
+ self.Vacuum_Database()
self.print_console_message('Topological Consistency Successfully Checked!\n')
@@ -1601,18 +1632,18 @@ def Principal_Procedure(self):
distance_to_sea = self.dlg.lineEdit_distance_to_sea.text()
pfafstetter_basin_code = self.dlg.lineEdit_pfafstetter_basin_code.text()
pfafstetter_basin_code_level = len(pfafstetter_basin_code)
+ watershed_pfafstetter_max_code = self.dlg.lineEdit_watershed_pfafstetter_max_code.text()
- self.print_console_message('Turning Off Indexes. Please, wait...\n')
+ DrainageLineOffset = self.dlg.lineEdit_DrainageLineOffset.text()
+
+ WaterCourseOffset = (int(DrainageLineOffset)/2)+1
+
self.Turn_OFF_Audit()
- sql = """
- SELECT pghydro.pghfn_TurnOffKeysIndex();
- """
+ if self.dlg.checkBox_TurnOffKeysIndex.isChecked():
+
+ self.Turn_OFF_Keys_Index()
- self.execute_sql(sql)
-
- self.print_console_message('Indexes Successfully Turned Off!\n')
-
if self.dlg.checkBox_CalculateDrainageLineLength.isChecked():
self.print_console_message('Updating Drainage Line Length. Please, wait...\n')
@@ -1625,6 +1656,8 @@ def Principal_Procedure(self):
self.print_console_message('Drainage Line Length Successfully Updated!\n')
+ self.Vacuum_Database()
+
if self.dlg.checkBox_CalculateDrainageAreaArea.isChecked():
self.print_console_message('Updating Drainage Area Area. Please, wait...\n')
@@ -1636,7 +1669,9 @@ def Principal_Procedure(self):
self.execute_sql(sql)
self.print_console_message('Drainage Area Area Successfully Updated!\n')
-
+
+ self.Vacuum_Database()
+
if self.dlg.checkBox_CalculateDistanceToSea.isChecked():
self.print_console_message('Updating Sea Distance. Please, wait...\n')
@@ -1649,6 +1684,8 @@ def Principal_Procedure(self):
self.print_console_message('Sea Distance Successfully Updated!\n')
+ self.Vacuum_Database()
+
if self.dlg.checkBox_CalculateUpstreamArea.isChecked():
self.print_console_message('Updating Upstream Area. Please, wait...\n')
@@ -1661,6 +1698,8 @@ def Principal_Procedure(self):
self.print_console_message('Upstream Area Successfully Updated!\n')
+ self.Vacuum_Database()
+
if self.dlg.checkBox_CalculateUpstreamDrainageLine.isChecked():
self.print_console_message('Updating Upstream Drainage Line. Please, wait...\n')
@@ -1672,6 +1711,8 @@ def Principal_Procedure(self):
self.execute_sql(sql)
self.print_console_message('Upstream Drainage Line Successfully Updated!\n')
+
+ self.Vacuum_Database()
if self.dlg.checkBox_CalculateDownstreamDrainageLine.isChecked():
@@ -1685,6 +1726,8 @@ def Principal_Procedure(self):
self.print_console_message('Downstream Drainage Line Successfully Updated!\n')
+ self.Vacuum_Database()
+
if self.dlg.checkBox_Calculate_Pfafstetter_Codification.isChecked():
self.print_console_message('Calculating Pfafstetter Basin Coding. Please, wait...\n')
@@ -1697,6 +1740,8 @@ def Principal_Procedure(self):
self.print_console_message('Pfafstetter Basin Coding Successfully Calculated!\n')
+ self.Vacuum_Database()
+
if self.dlg.checkBox_UpdatePfafstetterBasinCode.isChecked():
self.print_console_message('Updating Pfafstetter Basin Coding. Please, wait...\n')
@@ -1709,6 +1754,8 @@ def Principal_Procedure(self):
self.print_console_message('Pfafstetter Basin Coding Successfully Updated!\n')
+ self.Vacuum_Database()
+
if self.dlg.checkBox_UpdatePfafstetterWatercourseCode.isChecked():
self.print_console_message('Updating Pfafstetter Water Course Coding. Please, wait...\n')
@@ -1721,17 +1768,21 @@ def Principal_Procedure(self):
self.print_console_message('Pfafstetter Water Course Coding Successfully Updated!\n')
+ self.Vacuum_Database()
+
if self.dlg.checkBox_UpdateWatercourse.isChecked():
self.print_console_message('Updating Water Course. Please, wait...\n')
sql = """
- SELECT pghydro.pghfn_UpdateWatercourse();
+ SELECT pghydro.pghfn_UpdateWatercourse("""+str(WaterCourseOffset)+""");
"""
self.execute_sql(sql)
- self.print_console_message('Water Course Successfully Updated!\n')
+ self.print_console_message("""Water Course Successfully Updated! Offset:"""+str(WaterCourseOffset)+"""\n""")
+
+ self.Vacuum_Database()
if self.dlg.checkBox_InsertColumnPfafstetterBasinCodeLevel.isChecked():
@@ -1745,6 +1796,8 @@ def Principal_Procedure(self):
self.print_console_message('Pfafstetter Basin Coding Columns Successfully Updated!\n')
+ self.Vacuum_Database()
+
if self.dlg.checkBox_UpdateWatercourse_Point.isChecked():
self.print_console_message('Updating Water Course Starting Point. Please, wait...\n')
@@ -1777,6 +1830,8 @@ def Principal_Procedure(self):
self.print_console_message('Outlet Sea Successfully Updated!\n')
+ self.Vacuum_Database()
+
if self.dlg.checkBox_calculatestrahlernumber.isChecked():
self.print_console_message('Updating Strahler Order. Please, wait...\n')
@@ -1789,6 +1844,8 @@ def Principal_Procedure(self):
self.print_console_message('Strahler Order Successfully Updated!\n')
+ self.Vacuum_Database()
+
if self.dlg.checkBox_updateshoreline.isChecked():
self.print_console_message('Updating Shoreline. Please, wait...\n')
@@ -1800,6 +1857,8 @@ def Principal_Procedure(self):
self.execute_sql(sql)
self.print_console_message('Shoreline Successfully Updated!\n')
+
+ self.Vacuum_Database()
if self.dlg.checkBox_UpdateDomainColumn.isChecked():
@@ -1813,17 +1872,11 @@ def Principal_Procedure(self):
self.print_console_message('Water Course Domain Successfully Updated!\n')
- if self.dlg.checkBox_TurnOnKeysIndex.isChecked():
-
- self.print_console_message('Turning On Indexes...\n')
-
- sql = """
- SELECT pghydro.pghfn_TurnOnKeysIndex();
- """
+ self.Vacuum_Database()
- self.execute_sql(sql)
+ if self.dlg.checkBox_TurnOnKeysIndex.isChecked():
- self.print_console_message('Indexes Successfully Turned On!\n')
+ self.Turn_ON_Keys_Index()
if self.dlg.checkBox_UpdateWatershed.isChecked():
@@ -1831,43 +1884,32 @@ def Principal_Procedure(self):
x=1
else:
- self.print_console_message('Turning On Indexes. Please, wait...\n')
-
- sql1 = """
- SELECT pghydro.pghfn_TurnOnKeysIndex();
- """
-
- self.execute_sql(sql1)
-
- self.print_console_message('Indexes Successfully Turned On!\n')
-
- sql_min = """
- SELECT pghydro.pghfn_PfafstetterBasinCodeLevelN(1);
- """
-
- sql_max = """
- SELECT pghydro.pghfn_PfafstetterBasinCodeLevelN((SELECT pghydro.pghfn_numPfafstetterBasinCodeLevel()::integer));
- """
+ self.Turn_ON_Keys_Index()
result_min = pfafstetter_basin_code_level
- result_max = self.return_sql(sql_max)
+ result_max = watershed_pfafstetter_max_code
try:
self.print_console_message("Updating Pfafstetter Basin Coding Level "+result_max+". Please, wait...")
- sql2 = """
+ sql = """
TRUNCATE TABLE pghydro.pghft_watershed;
"""
-
- sql3 = """
+
+ self.execute_sql(sql)
+
+ sql = """
+ SELECT setval(('pghydro.wts_pk_seq'::text)::regclass, 1, false);
+ """
+ self.execute_sql(sql)
+
+ sql = """
SELECT pghydro.pghfn_updatewatersheddrainagearea("""+str(result_max)+""");
"""
- self.execute_sql(sql2)
-
- self.execute_sql(sql3)
+ self.execute_sql(sql)
self.print_console_message("Pfafstetter Basin Coding Level "+result_max+" Successfully Updated!")
@@ -1883,11 +1925,11 @@ def Principal_Procedure(self):
self.print_console_message("Updating Pfafstetter Basin Coding Level "+str(count-1)+". Please, wait...")
- sql4 = """
+ sql = """
SELECT pghydro.pghfn_updatewatershed("""+str(count)+""");
"""
- self.execute_sql(sql4)
+ self.execute_sql(sql)
self.print_console_message("Pfafstetter Basin Coding Level "+str(count-1)+" Successfully Updated!")
@@ -1898,6 +1940,8 @@ def Principal_Procedure(self):
count = count -1
self.print_console_message("All Pfafstetter Basin Coding Level Successfully Updated!")
+
+ self.Vacuum_Database()
###Export Data
@@ -1905,60 +1949,44 @@ def UpdateExportTables(self):
self.print_console_message('Updating Output Geometry Tables. Please, wait...\n')
- self.print_console_message('Turning Off Indexes. Please, wait...\n')
-
sql = """
- SELECT pghydro.pghfn_TurnOffKeysIndex();
+ SELECT pgh_output.pghfn_UpdateExportTables();
"""
self.Turn_OFF_Audit()
- self.execute_sql(sql)
-
- self.print_console_message('Indexes Successfully Turned Off!\n')
-
- self.print_console_message('Turning On Indexes. Please, wait...\n')
-
- sql = """
- SELECT pghydro.pghfn_TurnOnKeysIndex();
- """
+ self.Turn_OFF_Keys_Index()
- self.execute_sql(sql)
+ self.Vacuum_Database()
- self.print_console_message('Indexes Successfully Turned Off!\n')
-
- sql = """
- SELECT pgh_output.pghfn_UpdateExportTables();
- """
+ self.Turn_ON_Keys_Index()
self.execute_sql(sql)
+
+ self.Vacuum_Database()
self.print_console_message('Output Geometry Tables Successfully Updated!\n')
def Start_Systematize_Hydronym(self):
try:
- self.print_console_message("Starting Hydronima Systematization. Please, wait...")
+ self.print_console_message("Starting Hydronymia Systematization. Please, wait...")
sql1 = """
- SELECT pghydro.pghfn_TurnOffKeysIndex();
- """
-
- sql2 = """
ALTER TABLE pghydro.pghft_drainage_line
DROP COLUMN IF EXISTS drn_dra_cd_pfafstetterbasin,
DROP COLUMN IF EXISTS drn_wtc_cd_pfafstetterwatercourse,
DROP COLUMN IF EXISTS drn_wtc_gm_area;
"""
- sql3 = """
+ sql2 = """
ALTER TABLE pghydro.pghft_drainage_line
ADD COLUMN drn_dra_cd_pfafstetterbasin varchar,
ADD COLUMN drn_wtc_cd_pfafstetterwatercourse varchar,
ADD COLUMN drn_wtc_gm_area numeric;
"""
- sql4 = """
+ sql3 = """
DROP INDEX IF EXISTS pghydro.drn_pk_idx;
CREATE INDEX drn_pk_idx ON pghydro.pghft_drainage_line(drn_pk);
@@ -1972,14 +2000,14 @@ def Start_Systematize_Hydronym(self):
CREATE INDEX dra_pk_idx ON pghydro.pghft_drainage_area(dra_pk);
"""
- sql5 = """
+ sql4 = """
UPDATE pghydro.pghft_drainage_line drn
SET drn_dra_cd_pfafstetterbasin = dra.dra_cd_pfafstetterbasin
FROM pghydro.pghft_drainage_area dra
WHERE drn.drn_dra_pk = dra.dra_pk;
"""
- sql6 = """
+ sql5 = """
DROP INDEX IF EXISTS pghydro.drn_wtc_pk_idx;
CREATE INDEX drn_wtc_pk_idx ON pghydro.pghft_drainage_line(drn_wtc_pk);
@@ -1989,21 +2017,21 @@ def Start_Systematize_Hydronym(self):
CREATE INDEX wtc_pk_idx ON pghydro.pghft_watercourse(wtc_pk);
"""
- sql7 = """
+ sql6 = """
UPDATE pghydro.pghft_drainage_line drn
SET drn_wtc_cd_pfafstetterwatercourse = wtc.wtc_cd_pfafstetterwatercourse
FROM pghydro.pghft_watercourse wtc
WHERE drn.drn_wtc_pk = wtc.wtc_pk;
"""
- sql8 = """
+ sql7 = """
UPDATE pghydro.pghft_drainage_line drn
SET drn_wtc_gm_area = wtc.wtc_gm_area
FROM pghydro.pghft_watercourse wtc
WHERE drn.drn_wtc_pk = wtc.wtc_pk;
"""
- sql9 = """
+ sql8 = """
DROP INDEX IF EXISTS pghydro.drn_pk_idx;
DROP INDEX IF EXISTS pghydro.drn_dra_pk_idx;
@@ -2022,6 +2050,11 @@ def Start_Systematize_Hydronym(self):
"""
self.Turn_OFF_Audit()
+
+ self.Turn_OFF_Keys_Index()
+
+ self.Vacuum_Database()
+
self.execute_sql(sql1)
self.execute_sql(sql2)
self.execute_sql(sql3)
@@ -2030,7 +2063,8 @@ def Start_Systematize_Hydronym(self):
self.execute_sql(sql6)
self.execute_sql(sql7)
self.execute_sql(sql8)
- self.execute_sql(sql9)
+
+ self.Vacuum_Database()
self.print_console_message("Hydronymia Systematization Successfully Started!")
@@ -2089,10 +2123,15 @@ def Systematize_Hydronym(self):
"""
self.Turn_OFF_Audit()
+
+ self.Vacuum_Database()
+
self.execute_sql(sql1)
self.execute_sql(sql2)
self.execute_sql(sql3)
self.execute_sql(sql4)
+
+ self.Vacuum_Database()
self.print_console_message("Names Successfully Systematized!")
@@ -2125,6 +2164,7 @@ def Update_OriginalHydronym(self):
"""
self.Turn_OFF_Audit()
+
self.execute_sql(sql1)
self.execute_sql(sql2)
@@ -2151,6 +2191,7 @@ def Check_ConfluenceHydronym(self):
"""
self.Turn_OFF_Audit()
+
self.execute_sql(sql1)
self.execute_sql(sql2)
@@ -2179,7 +2220,7 @@ def Stop_Systematize_Hydronym(self):
try:
self.print_console_message("Stoping Hydronymia Systematization. Please, wait...")
- sql1 = """
+ sql = """
DROP INDEX IF EXISTS pghydro.dra_cd_pfafstetterbasin_idx;
DROP INDEX IF EXISTS pghydro.wtc_cd_pfafstetterwatercourse_idx;
@@ -2190,20 +2231,17 @@ def Stop_Systematize_Hydronym(self):
DROP COLUMN IF EXISTS drn_wtc_gm_area;
"""
- sql2 = """
- SELECT pghydro.pghfn_turnoffkeysindex();
- """
+ self.Turn_OFF_Audit()
- sql3 = """
- SELECT pghydro.pghfn_turnonkeysindex();
- """
+ self.execute_sql(sql)
- self.Turn_OFF_Audit()
- self.execute_sql(sql1)
- self.execute_sql(sql2)
- self.execute_sql(sql3)
+ self.Turn_OFF_Keys_Index()
+
+ self.Vacuum_Database()
+
+ self.Turn_ON_Keys_Index()
- self.print_console_message("Hydronima Systematization Successfully Done!")
+ self.print_console_message("Hydronymia Systematization Successfully Done!")
except:
self.print_console_message('ERROR\nCheck Database Input Parameters!')
@@ -2415,7 +2453,58 @@ def input_drainage_line_table_attribute_name_select(self):
self.dlg.input_drainage_line_table_attribute_name_MapLayerComboBox.addItems(none)
fields = [field.name() for field in selectedLayer.pendingFields()]
self.dlg.input_drainage_line_table_attribute_name_MapLayerComboBox.addItems(fields)
+
+
+ def Vacuum_Database(self):
+
+ if self.dlg.checkBox_Vacuum_Database.isChecked():
+
+ self.print_console_message('Vacuuming Database. Please, wait...\n')
+ try:
+ sql = """
+ VACUUM(FULL, ANALYZE);
+ """
+
+ self.execute_sql(sql)
+
+ self.print_console_message('Database Successfully Vacuumed!\n')
+
+ except:
+ self.print_console_message('ERROR\nCheck Database Input Parameters!')
+
+ def Turn_ON_Keys_Index(self):
+
+ self.print_console_message('Turning On Indexes. Please, wait...\n')
+
+ try:
+ sql = """
+ SELECT pghydro.pghfn_turnonkeysindex();
+ """
+
+ self.execute_sql(sql)
+
+ self.print_console_message('Indexes Successfully Turned On!\n')
+
+ except:
+ self.print_console_message('ERROR\nCheck Database Input Parameters!')
+
+ def Turn_OFF_Keys_Index(self):
+
+ self.print_console_message('Turning Off Indexes. Please, wait...\n')
+
+ try:
+ sql = """
+ SELECT pghydro.pghfn_turnoffkeysindex();
+ """
+
+ self.execute_sql(sql)
+
+ self.print_console_message('Indexes Successfully Turned Off!\n')
+
+ except:
+ self.print_console_message('ERROR\nCheck Database Input Parameters!')
+
def run(self):
"""Run method that performs all the real work"""
self.dlg.input_drainage_line_table_MapLayerComboBox.clear()
diff --git a/pghydro_tools_dialog_base.ui b/pghydro_tools_dialog_base.ui
index b55ec41..fd810c8 100644
--- a/pghydro_tools_dialog_base.ui
+++ b/pghydro_tools_dialog_base.ui
@@ -136,7 +136,7 @@
- 5433
+ 5432
@@ -191,7 +191,7 @@
- Connect
+ Test Connection
@@ -2198,7 +2198,7 @@
- 5880
+ 3857
@@ -2211,7 +2211,7 @@
- 5880
+ 3857
@@ -2341,6 +2341,9 @@
+
+ true
+
10
@@ -2353,7 +2356,7 @@
Add Pfafstetter Basin Coding Columns
- true
+ false
@@ -2376,7 +2379,7 @@
430
- 20
+ 40
171
17
@@ -2392,7 +2395,7 @@
430
- 40
+ 60
181
20
@@ -2408,13 +2411,64 @@
430
- 60
+ 80
+ 171
+ 17
+
+
+
+ Update Watersheds <=
+
+
+ false
+
+
+
+
+
+ 570
+ 80
+ 21
+ 20
+
+
+
+ 6
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+ 430
+ 20
171
17
- Update Watersheds
+ Turn Off Indexes, PKs and FKs
+
+
+ true
+
+
+
+
+
+ 430
+ 100
+ 171
+ 17
+
+
+
+ Vacuum Database
+
+
+ false
@@ -2963,7 +3017,7 @@
- PgHydro Tools Version 2.2
+ PgHydro Tools Version 2.4
@@ -3005,7 +3059,7 @@
REQUIREMENTS:
-Postgresql version 9.1+
-PostGIS version 2.0+
- -PgHydro version 6.2: https://github.com/pghydro/pghydro/tree/master
+ -PgHydro version 6.4: https://github.com/pghydro/pghydro/tree/master
@@ -3034,8 +3088,5 @@
-
-
-