Skip to content

Commit c1e1a7e

Browse files
committedFeb 24, 2015
Merge branch 'ogr-tools'
2 parents 8ab014d + b4f2568 commit c1e1a7e

File tree

5 files changed

+520
-1
lines changed

5 files changed

+520
-1
lines changed
 

‎python/plugins/processing/algs/gdal/GdalOgrAlgorithmProvider.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@
7272
from ogr2ogrclipextent import Ogr2OgrClipExtent
7373
from ogr2ogrtopostgis import Ogr2OgrToPostGis
7474
from ogr2ogrtopostgislist import Ogr2OgrToPostGisList
75+
from ogr2ogrpointsonlines import Ogr2OgrPointsOnLines
76+
from ogr2ogrbuffer import Ogr2OgrBuffer
77+
from ogr2ogrdissolve import Ogr2OgrDissolve
78+
from ogr2ogronesidebuffer import Ogr2OgrOneSideBuffer
7579
from ogrinfo import OgrInfo
7680
from ogrsql import OgrSql
7781

@@ -126,7 +130,8 @@ def createAlgsList(self):
126130
GridDataMetrics(), gdaltindex(), gdalcalc(),
127131
# ----- OGR tools -----
128132
OgrInfo(), Ogr2Ogr(), Ogr2OgrClip(), Ogr2OgrClipExtent(),
129-
Ogr2OgrToPostGis(), Ogr2OgrToPostGisList(), OgrSql(),
133+
Ogr2OgrToPostGis(), Ogr2OgrToPostGisList(), Ogr2OgrPointsOnLines(),
134+
Ogr2OgrBuffer(), Ogr2OgrDissolve(), Ogr2OgrOneSideBuffer(), OgrSql(),
130135
]
131136

132137
# And then we add those that are created as python scripts
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""
4+
***************************************************************************
5+
ogr2ogrbuffer.py
6+
---------------------
7+
Date : Janaury 2015
8+
Copyright : (C) 2015 by Giovanni Manghi
9+
Email : giovanni dot manghi at naturalgis dot pt
10+
***************************************************************************
11+
* *
12+
* This program is free software; you can redistribute it and/or modify *
13+
* it under the terms of the GNU General Public License as published by *
14+
* the Free Software Foundation; either version 2 of the License, or *
15+
* (at your option) any later version. *
16+
* *
17+
***************************************************************************
18+
"""
19+
20+
__author__ = 'Giovanni Manghi'
21+
__date__ = 'January 2015'
22+
__copyright__ = '(C) 2015, Giovanni Manghi'
23+
24+
# This will get replaced with a git SHA1 when you do a git archive
25+
26+
__revision__ = '$Format:%H$'
27+
28+
from processing.core.parameters import ParameterVector
29+
from processing.core.parameters import ParameterString
30+
from processing.core.parameters import ParameterNumber
31+
from processing.core.parameters import ParameterBoolean
32+
from processing.core.parameters import ParameterTableField
33+
from processing.core.outputs import OutputVector
34+
35+
from processing.tools.system import isWindows
36+
37+
from processing.algs.gdal.OgrAlgorithm import OgrAlgorithm
38+
from processing.algs.gdal.GdalUtils import GdalUtils
39+
40+
class Ogr2OgrBuffer(OgrAlgorithm):
41+
42+
OUTPUT_LAYER = 'OUTPUT_LAYER'
43+
INPUT_LAYER = 'INPUT_LAYER'
44+
GEOMETRY = 'GEOMETRY'
45+
DISTANCE = 'DISTANCE'
46+
DISSOLVEALL = 'DISSOLVEALL'
47+
FIELD = 'FIELD'
48+
MULTI = 'MULTI'
49+
OPTIONS = 'OPTIONS'
50+
51+
def defineCharacteristics(self):
52+
self.name = 'Buffer vectors'
53+
self.group = '[OGR] Geoprocessing'
54+
55+
self.addParameter(ParameterVector(self.INPUT_LAYER,
56+
self.tr('Input layer'), [ParameterVector.VECTOR_TYPE_ANY], False))
57+
self.addParameter(ParameterString(self.GEOMETRY,
58+
self.tr('Geometry column name ("geometry" for Shapefiles, may be different for other formats)'),
59+
'geometry', optional=False))
60+
self.addParameter(ParameterString(self.DISTANCE,
61+
self.tr('Buffer distance'), '1000', optional=False))
62+
self.addParameter(ParameterBoolean(self.DISSOLVEALL,
63+
self.tr('Dissolve all results'), False))
64+
self.addParameter(ParameterTableField(self.FIELD,
65+
self.tr('Dissolve by attribute'), self.INPUT_LAYER, optional=True))
66+
self.addParameter(ParameterBoolean(self.MULTI,
67+
self.tr('Output as singlepart geometries (only used when dissolving by attribute)'), False))
68+
self.addParameter(ParameterString(self.OPTIONS,
69+
self.tr('Additional creation options (see ogr2ogr manual)'),
70+
'', optional=True))
71+
72+
self.addOutput(OutputVector(self.OUTPUT_LAYER, self.tr('Output layer')))
73+
74+
def processAlgorithm(self, progress):
75+
inLayer = self.getParameterValue(self.INPUT_LAYER)
76+
ogrLayer = self.ogrConnectionString(inLayer)[1:-1]
77+
layername = "'" + self.ogrLayerName(inLayer) + "'"
78+
geometry = unicode(self.getParameterValue(self.GEOMETRY))
79+
distance = unicode(self.getParameterValue(self.DISTANCE))
80+
dissolveall = self.getParameterValue(self.DISSOLVEALL)
81+
field = unicode(self.getParameterValue(self.FIELD))
82+
multi = self.getParameterValue(self.MULTI)
83+
84+
output = self.getOutputFromName(self.OUTPUT_LAYER)
85+
outFile = output.value
86+
87+
output = self.ogrConnectionString(outFile)
88+
options = unicode(self.getParameterValue(self.OPTIONS))
89+
90+
arguments = []
91+
arguments.append(output)
92+
arguments.append(ogrLayer)
93+
arguments.append(self.ogrLayerName(inLayer))
94+
if dissolveall or field != 'None':
95+
arguments.append('-dialect sqlite -sql "SELECT ST_Union(ST_Buffer(')
96+
else:
97+
arguments.append('-dialect sqlite -sql "SELECT ST_Buffer(')
98+
arguments.append(geometry)
99+
arguments.append(',')
100+
arguments.append(distance)
101+
if dissolveall or field != 'None':
102+
arguments.append(')),*')
103+
else:
104+
arguments.append('),*')
105+
arguments.append('FROM')
106+
arguments.append(layername)
107+
if field != 'None':
108+
arguments.append('GROUP')
109+
arguments.append('BY')
110+
arguments.append(field)
111+
arguments.append('"')
112+
if field != 'None' and multi:
113+
arguments.append('-explodecollections')
114+
115+
if len(options) > 0:
116+
arguments.append(options)
117+
118+
commands = []
119+
if isWindows():
120+
commands = ['cmd.exe', '/C ', 'ogr2ogr.exe',
121+
GdalUtils.escapeAndJoin(arguments)]
122+
else:
123+
commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
124+
125+
GdalUtils.runGdal(commands, progress)
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""
4+
***************************************************************************
5+
ogr2ogrdissolve.py
6+
---------------------
7+
Date : Janaury 2015
8+
Copyright : (C) 2015 by Giovanni Manghi
9+
Email : giovanni dot manghi at naturalgis dot pt
10+
***************************************************************************
11+
* *
12+
* This program is free software; you can redistribute it and/or modify *
13+
* it under the terms of the GNU General Public License as published by *
14+
* the Free Software Foundation; either version 2 of the License, or *
15+
* (at your option) any later version. *
16+
* *
17+
***************************************************************************
18+
"""
19+
20+
__author__ = 'Giovanni Manghi'
21+
__date__ = 'January 2015'
22+
__copyright__ = '(C) 2015, Giovanni Manghi'
23+
24+
# This will get replaced with a git SHA1 when you do a git archive
25+
26+
__revision__ = '$Format:%H$'
27+
28+
from processing.core.parameters import ParameterVector
29+
from processing.core.parameters import ParameterString
30+
from processing.core.parameters import ParameterNumber
31+
from processing.core.parameters import ParameterBoolean
32+
from processing.core.parameters import ParameterTableField
33+
from processing.core.outputs import OutputVector
34+
35+
from processing.tools.system import isWindows
36+
37+
from processing.algs.gdal.OgrAlgorithm import OgrAlgorithm
38+
from processing.algs.gdal.GdalUtils import GdalUtils
39+
40+
class Ogr2OgrDissolve(OgrAlgorithm):
41+
42+
OUTPUT_LAYER = 'OUTPUT_LAYER'
43+
INPUT_LAYER = 'INPUT_LAYER'
44+
GEOMETRY = 'GEOMETRY'
45+
FIELD = 'FIELD'
46+
MULTI = 'MULTI'
47+
COUNT = 'COUNT'
48+
STATS = 'STATS'
49+
STATSATT = 'STATSATT'
50+
AREA = 'AREA'
51+
FIELDS = 'FIELDS'
52+
OPTIONS = 'OPTIONS'
53+
54+
def defineCharacteristics(self):
55+
self.name = 'Dissolve polygons'
56+
self.group = '[OGR] Geoprocessing'
57+
58+
self.addParameter(ParameterVector(self.INPUT_LAYER,
59+
self.tr('Input layer'), [ParameterVector.VECTOR_TYPE_POLYGON], False))
60+
self.addParameter(ParameterString(self.GEOMETRY,
61+
self.tr('Geometry column name ("geometry" for Shapefiles, may be different for other formats)'),
62+
'geometry', optional=False))
63+
self.addParameter(ParameterTableField(self.FIELD,
64+
self.tr('Dissolve field'), self.INPUT_LAYER))
65+
self.addParameter(ParameterBoolean(self.MULTI,
66+
self.tr('Output as multipart geometries'), True))
67+
self.addParameter(ParameterBoolean(self.FIELDS,
68+
self.tr('Keep input attributes'), False))
69+
self.addParameter(ParameterBoolean(self.COUNT,
70+
self.tr('Count dissolved features'), False))
71+
self.addParameter(ParameterBoolean(self.AREA,
72+
self.tr('Compute area and perimeter of dissolved features'), False))
73+
self.addParameter(ParameterBoolean(self.STATS,
74+
self.tr('Compute min/max/sum/mean for the following numeric attribute'), False))
75+
self.addParameter(ParameterTableField(self.STATSATT,
76+
self.tr('Numeric attribute to compute dissolved features stats'), self.INPUT_LAYER))
77+
self.addParameter(ParameterString(self.OPTIONS,
78+
self.tr('Additional creation options (see ogr2ogr manual)'),
79+
'', optional=True))
80+
81+
self.addOutput(OutputVector(self.OUTPUT_LAYER, self.tr('Output layer')))
82+
83+
def processAlgorithm(self, progress):
84+
inLayer = self.getParameterValue(self.INPUT_LAYER)
85+
ogrLayer = self.ogrConnectionString(inLayer)[1:-1]
86+
layername = "'" + self.ogrLayerName(inLayer) + "'"
87+
geometry = unicode(self.getParameterValue(self.GEOMETRY))
88+
field = unicode(self.getParameterValue(self.FIELD))
89+
statsatt = unicode(self.getParameterValue(self.STATSATT))
90+
stats = self.getParameterValue(self.STATS)
91+
area = self.getParameterValue(self.AREA)
92+
multi = self.getParameterValue(self.MULTI)
93+
count = self.getParameterValue(self.COUNT)
94+
fields = self.getParameterValue(self.FIELDS)
95+
querystart = '-dialect sqlite -sql "SELECT ST_Union(' + geometry + ')'
96+
queryend = ' FROM ' + layername + ' GROUP BY ' + field + '"'
97+
if fields:
98+
queryfields = ",*"
99+
else:
100+
queryfields = "," + field
101+
if count:
102+
querycount = ", COUNT(" + geometry + ") AS count"
103+
else:
104+
querycount = ""
105+
if stats:
106+
querystats = ", SUM(" + statsatt + ") AS sum_diss, MIN(" + statsatt + ") AS min_diss, MAX(" + statsatt + ") AS max_diss, AVG(" + statsatt + ") AS avg_diss"
107+
else:
108+
querystats = ""
109+
if area:
110+
queryarea = ", SUM(ST_area(" + geometry + ")) AS area_diss, ST_perimeter(ST_union(" + geometry + ")) AS peri_diss"
111+
else:
112+
queryarea = ""
113+
114+
query = querystart + queryfields + querycount + querystats + queryarea + queryend
115+
output = self.getOutputFromName(self.OUTPUT_LAYER)
116+
outFile = output.value
117+
118+
output = self.ogrConnectionString(outFile)
119+
options = unicode(self.getParameterValue(self.OPTIONS))
120+
121+
arguments = []
122+
arguments.append(output)
123+
arguments.append(ogrLayer)
124+
arguments.append(self.ogrLayerName(inLayer))
125+
arguments.append(query)
126+
127+
if not multi:
128+
arguments.append('-explodecollections')
129+
130+
if len(options) > 0:
131+
arguments.append(options)
132+
133+
commands = []
134+
if isWindows():
135+
commands = ['cmd.exe', '/C ', 'ogr2ogr.exe',
136+
GdalUtils.escapeAndJoin(arguments)]
137+
else:
138+
commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
139+
140+
GdalUtils.runGdal(commands, progress)
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""
4+
***************************************************************************
5+
ogr2ogronesidebuffer.py
6+
---------------------
7+
Date : Janaury 2015
8+
Copyright : (C) 2015 by Giovanni Manghi
9+
Email : giovanni dot manghi at naturalgis dot pt
10+
***************************************************************************
11+
* *
12+
* This program is free software; you can redistribute it and/or modify *
13+
* it under the terms of the GNU General Public License as published by *
14+
* the Free Software Foundation; either version 2 of the License, or *
15+
* (at your option) any later version. *
16+
* *
17+
***************************************************************************
18+
"""
19+
20+
__author__ = 'Giovanni Manghi'
21+
__date__ = 'January 2015'
22+
__copyright__ = '(C) 2015, Giovanni Manghi'
23+
24+
# This will get replaced with a git SHA1 when you do a git archive
25+
26+
__revision__ = '$Format:%H$'
27+
28+
from processing.core.parameters import ParameterVector
29+
from processing.core.parameters import ParameterString
30+
from processing.core.parameters import ParameterNumber
31+
from processing.core.parameters import ParameterBoolean
32+
from processing.core.parameters import ParameterTableField
33+
from processing.core.parameters import ParameterSelection
34+
from processing.core.outputs import OutputVector
35+
36+
from processing.tools.system import isWindows
37+
38+
from processing.algs.gdal.OgrAlgorithm import OgrAlgorithm
39+
from processing.algs.gdal.GdalUtils import GdalUtils
40+
41+
class Ogr2OgrOneSideBuffer(OgrAlgorithm):
42+
43+
OUTPUT_LAYER = 'OUTPUT_LAYER'
44+
INPUT_LAYER = 'INPUT_LAYER'
45+
OPERATION = 'OPERATION'
46+
OPERATIONLIST = ['Single Side Buffer','Offset Curve']
47+
GEOMETRY = 'GEOMETRY'
48+
RADIUS = 'RADIUS'
49+
LEFTRIGHT = 'LEFTRIGHT'
50+
LEFTRIGHTLIST = ['Right','Left']
51+
DISSOLVEALL = 'DISSOLVEALL'
52+
FIELD = 'FIELD'
53+
MULTI = 'MULTI'
54+
OPTIONS = 'OPTIONS'
55+
56+
def defineCharacteristics(self):
57+
self.name = 'Single sided buffers (and offset lines) for lines'
58+
self.group = '[OGR] Geoprocessing'
59+
60+
self.addParameter(ParameterVector(self.INPUT_LAYER,
61+
self.tr('Input layer'), [ParameterVector.VECTOR_TYPE_LINE], False))
62+
self.addParameter(ParameterSelection(self.OPERATION,
63+
self.tr('Operation'),self.OPERATIONLIST, 0))
64+
self.addParameter(ParameterString(self.GEOMETRY,
65+
self.tr('Geometry column name ("geometry" for Shapefiles, may be different for other formats)'),
66+
'geometry', optional=False))
67+
self.addParameter(ParameterString(self.RADIUS,
68+
self.tr('Buffer distance'), '1000', optional=False))
69+
self.addParameter(ParameterSelection(self.LEFTRIGHT,
70+
self.tr('Buffer side'),self.LEFTRIGHTLIST, 0))
71+
self.addParameter(ParameterBoolean(self.DISSOLVEALL,
72+
self.tr('Dissolve all results'), False))
73+
self.addParameter(ParameterTableField(self.FIELD,
74+
self.tr('Dissolve by attribute'), self.INPUT_LAYER, optional=True))
75+
self.addParameter(ParameterBoolean(self.MULTI,
76+
self.tr('Output as singlepart geometries (only used when dissolving by attribute)'), False))
77+
self.addParameter(ParameterString(self.OPTIONS,
78+
self.tr('Additional creation options (see ogr2ogr manual)'),
79+
'', optional=True))
80+
81+
self.addOutput(OutputVector(self.OUTPUT_LAYER, self.tr('Output layer')))
82+
83+
def processAlgorithm(self, progress):
84+
inLayer = self.getParameterValue(self.INPUT_LAYER)
85+
ogrLayer = self.ogrConnectionString(inLayer)[1:-1]
86+
layername = "'" + self.ogrLayerName(inLayer) + "'"
87+
operation = self.OPERATIONLIST[self.getParameterValue(self.OPERATION)]
88+
geometry = unicode(self.getParameterValue(self.GEOMETRY))
89+
distance = unicode(self.getParameterValue(self.RADIUS))
90+
leftright = self.LEFTRIGHTLIST[self.getParameterValue(self.LEFTRIGHT)]
91+
dissolveall = self.getParameterValue(self.DISSOLVEALL)
92+
field = unicode(self.getParameterValue(self.FIELD))
93+
multi = self.getParameterValue(self.MULTI)
94+
95+
output = self.getOutputFromName(self.OUTPUT_LAYER)
96+
outFile = output.value
97+
98+
output = self.ogrConnectionString(outFile)
99+
options = unicode(self.getParameterValue(self.OPTIONS))
100+
101+
arguments = []
102+
arguments.append(output)
103+
arguments.append(ogrLayer)
104+
arguments.append(self.ogrLayerName(inLayer))
105+
if dissolveall or field != 'None':
106+
if operation == 'Single Side Buffer':
107+
arguments.append('-dialect sqlite -sql "SELECT ST_Union(ST_SingleSidedBuffer(')
108+
else:
109+
arguments.append('-dialect sqlite -sql "SELECT ST_Union(ST_OffsetCurve(')
110+
else:
111+
if operation == 'Single Side Buffer':
112+
arguments.append('-dialect sqlite -sql "SELECT ST_SingleSidedBuffer(')
113+
else:
114+
arguments.append('-dialect sqlite -sql "SELECT ST_OffsetCurve(')
115+
arguments.append(geometry)
116+
arguments.append(',')
117+
arguments.append(distance)
118+
if dissolveall or field != 'None':
119+
if leftright == 'Left':
120+
arguments.append(',0)),*')
121+
else:
122+
arguments.append(',1)),*')
123+
else:
124+
if leftright == 'Left':
125+
arguments.append(',0),*')
126+
else:
127+
arguments.append(',1),*')
128+
arguments.append('FROM')
129+
arguments.append(layername)
130+
if field != 'None':
131+
arguments.append('GROUP')
132+
arguments.append('BY')
133+
arguments.append(field)
134+
arguments.append('"')
135+
if field != 'None' and multi:
136+
arguments.append('-explodecollections')
137+
138+
if len(options) > 0:
139+
arguments.append(options)
140+
141+
commands = []
142+
if isWindows():
143+
commands = ['cmd.exe', '/C ', 'ogr2ogr.exe',
144+
GdalUtils.escapeAndJoin(arguments)]
145+
else:
146+
commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
147+
148+
GdalUtils.runGdal(commands, progress)
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""
4+
***************************************************************************
5+
ogr2ogrpointsonlines.py
6+
---------------------
7+
Date : Janaury 2015
8+
Copyright : (C) 2015 by Giovanni Manghi
9+
Email : giovanni dot manghi at naturalgis dot pt
10+
***************************************************************************
11+
* *
12+
* This program is free software; you can redistribute it and/or modify *
13+
* it under the terms of the GNU General Public License as published by *
14+
* the Free Software Foundation; either version 2 of the License, or *
15+
* (at your option) any later version. *
16+
* *
17+
***************************************************************************
18+
"""
19+
20+
__author__ = 'Giovanni Manghi'
21+
__date__ = 'January 2015'
22+
__copyright__ = '(C) 2015, Giovanni Manghi'
23+
24+
# This will get replaced with a git SHA1 when you do a git archive
25+
26+
__revision__ = '$Format:%H$'
27+
28+
from processing.core.parameters import ParameterVector
29+
from processing.core.parameters import ParameterString
30+
from processing.core.parameters import ParameterNumber
31+
from processing.core.parameters import ParameterBoolean
32+
from processing.core.outputs import OutputVector
33+
34+
from processing.tools.system import isWindows
35+
36+
from processing.algs.gdal.OgrAlgorithm import OgrAlgorithm
37+
from processing.algs.gdal.GdalUtils import GdalUtils
38+
39+
class Ogr2OgrPointsOnLines(OgrAlgorithm):
40+
41+
OUTPUT_LAYER = 'OUTPUT_LAYER'
42+
INPUT_LAYER = 'INPUT_LAYER'
43+
DISTANCE = 'DISTANCE'
44+
GEOMETRY = 'GEOMETRY'
45+
OPTIONS = 'OPTIONS'
46+
47+
def defineCharacteristics(self):
48+
self.name = 'Create points along lines'
49+
self.group = '[OGR] Geoprocessing'
50+
51+
self.addParameter(ParameterVector(self.INPUT_LAYER,
52+
self.tr('Input layer'), [ParameterVector.VECTOR_TYPE_LINE], False))
53+
self.addParameter(ParameterString(self.GEOMETRY,
54+
self.tr('Geometry column name ("geometry" for Shapefiles, may be different for other formats)'),
55+
'geometry', optional=False))
56+
self.addParameter(ParameterNumber(self.DISTANCE,
57+
self.tr('Distance from line start represented as fraction of line length'), 0, 1, 0.5))
58+
self.addParameter(ParameterString(self.OPTIONS,
59+
self.tr('Additional creation options (see ogr2ogr manual)'),
60+
'', optional=True))
61+
62+
self.addOutput(OutputVector(self.OUTPUT_LAYER, self.tr('Output layer')))
63+
64+
def processAlgorithm(self, progress):
65+
inLayer = self.getParameterValue(self.INPUT_LAYER)
66+
ogrLayer = self.ogrConnectionString(inLayer)[1:-1]
67+
layername = "'" + self.ogrLayerName(inLayer) + "'"
68+
distance = unicode(self.getParameterValue(self.DISTANCE))
69+
geometry = unicode(self.getParameterValue(self.GEOMETRY))
70+
71+
output = self.getOutputFromName(self.OUTPUT_LAYER)
72+
outFile = output.value
73+
74+
output = self.ogrConnectionString(outFile)
75+
options = unicode(self.getParameterValue(self.OPTIONS))
76+
77+
arguments = []
78+
arguments.append(output)
79+
arguments.append(ogrLayer)
80+
arguments.append(self.ogrLayerName(inLayer))
81+
82+
arguments.append('-dialect sqlite -sql "SELECT ST_Line_Interpolate_Point(')
83+
arguments.append(geometry)
84+
arguments.append(',')
85+
arguments.append(distance)
86+
arguments.append('),*')
87+
arguments.append('FROM')
88+
arguments.append(layername)
89+
arguments.append('"')
90+
91+
if len(options) > 0:
92+
arguments.append(options)
93+
94+
commands = []
95+
if isWindows():
96+
commands = ['cmd.exe', '/C ', 'ogr2ogr.exe',
97+
GdalUtils.escapeAndJoin(arguments)]
98+
else:
99+
commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
100+
101+
GdalUtils.runGdal(commands, progress)

0 commit comments

Comments
 (0)
Please sign in to comment.