35
35
from processing .parameters .ParameterBoolean import ParameterBoolean
36
36
from processing .parameters .ParameterVector import ParameterVector
37
37
from processing .parameters .ParameterString import ParameterString
38
+ from processing .parameters .ParameterSelection import ParameterSelection
38
39
from processing .tools import dataobjects
39
40
40
41
from processing .admintools import postgis_utils
@@ -48,15 +49,18 @@ class ImportIntoPostGIS(GeoAlgorithm):
48
49
INPUT = 'INPUT'
49
50
OVERWRITE = 'OVERWRITE'
50
51
CREATEINDEX = 'CREATEINDEX'
52
+ GEOMETRY_COLUMN = 'GEOMETRY_COLUMN'
53
+ LOWERCASE_NAMES = 'LOWERCASE_NAMES'
51
54
52
55
def getIcon (self ):
53
56
return QIcon (os .path .dirname (__file__ ) + '/../images/postgis.png' )
54
57
55
58
def processAlgorithm (self , progress ):
56
- connection = self .getParameterValue (self .DATABASE )
59
+ connection = self .DB_CONNECTIONS [ self . getParameterValue (self .DATABASE )]
57
60
schema = self .getParameterValue (self .SCHEMA )
58
61
overwrite = self .getParameterValue (self .OVERWRITE )
59
62
createIndex = self .getParameterValue (self .CREATEINDEX )
63
+ convertLowerCase = self .getParameterValue (self .LOWERCASE_NAMES )
60
64
settings = QSettings ()
61
65
mySettings = '/PostgreSQL/connections/' + connection
62
66
try :
@@ -80,14 +84,19 @@ def processAlgorithm(self, progress):
80
84
raise GeoAlgorithmExecutionException (
81
85
"Couldn't connect to database:\n " + e .message )
82
86
87
+ geomColumn = self .getParameterValue (self .GEOMETRY_COLUMN )
88
+ if not geomColumn :
89
+ geomColumn = 'the_geom'
90
+
83
91
uri = QgsDataSourceURI ()
84
92
uri .setConnection (host , str (port ), database , username , password )
85
- uri .setDataSource (schema , table , 'the_geom' , '' )
93
+ uri .setDataSource (schema , table , geomColumn , '' )
86
94
87
95
options = {}
88
96
if overwrite :
89
97
options ['overwrite' ] = True
90
-
98
+ if convertLowerCase :
99
+ options ['lowercaseFieldNames' ] = True
91
100
layerUri = self .getParameterValue (self .INPUT )
92
101
layer = dataobjects .getObjectFromUri (layerUri )
93
102
(ret , errMsg ) = QgsVectorLayerImport .importLayer (
@@ -104,19 +113,31 @@ def processAlgorithm(self, progress):
104
113
'Error importing to PostGIS\n %s' % errMsg )
105
114
106
115
if createIndex :
107
- db .create_spatial_index (table , schema , 'the_geom' )
116
+ db .create_spatial_index (table , schema , geomColumn )
108
117
109
118
db .vacuum_analyze (table , schema )
110
119
120
+ def dbConnectionNames (self ):
121
+ settings = QSettings ()
122
+ settings .beginGroup ('/PostgreSQL/connections/' )
123
+ return settings .childGroups ()
124
+
111
125
def defineCharacteristics (self ):
112
126
self .name = 'Import into PostGIS'
113
127
self .group = 'PostGIS management tools'
114
128
self .addParameter (ParameterVector (self .INPUT , 'Layer to import' ))
115
- self .addParameter (ParameterString (self .DATABASE ,
116
- 'Database (connection name)' ))
129
+
130
+ self .DB_CONNECTIONS = self .dbConnectionNames ()
131
+ self .addParameter (ParameterSelection (self .DATABASE , 'Database (connection name)' ,
132
+ self .DB_CONNECTIONS ))
133
+
117
134
self .addParameter (ParameterString (self .SCHEMA , 'Schema (schema name)' ))
118
135
self .addParameter (ParameterString (self .TABLENAME , 'Table to import to'
119
136
))
137
+ self .addParameter (ParameterString (self .GEOMETRY_COLUMN , 'Geometry column' , 'the_geom'
138
+ ))
120
139
self .addParameter (ParameterBoolean (self .OVERWRITE , 'Overwrite' , True ))
121
140
self .addParameter (ParameterBoolean (self .CREATEINDEX ,
122
141
'Create spatial index' , True ))
142
+ self .addParameter (ParameterBoolean (self .LOWERCASE_NAMES ,
143
+ 'Convert field names to lowercase' , False ))
0 commit comments