123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866 |
- """
- ***************************************************************************
- GdalAlgorithmVectorTest.py
- ---------------------
- Date : January 2016
- Copyright : (C) 2016 by Matthias Kuhn
- Email : matthias@opengis.ch
- ***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************
- """
- __author__ = 'Matthias Kuhn'
- __date__ = 'January 2016'
- __copyright__ = '(C) 2016, Matthias Kuhn'
- import nose2
- import os
- import shutil
- import tempfile
- from qgis.core import (QgsProcessingContext,
- QgsProcessingFeedback,
- QgsCoordinateReferenceSystem,
- QgsRectangle)
- from qgis.testing import (start_app,
- unittest)
- import AlgorithmsTestBase
- from processing.algs.gdal.ogr2ogr import ogr2ogr
- from processing.algs.gdal.ogrinfo import ogrinfo
- from processing.algs.gdal.Buffer import Buffer
- from processing.algs.gdal.Dissolve import Dissolve
- from processing.algs.gdal.OffsetCurve import OffsetCurve
- from processing.algs.gdal.OgrToPostGis import OgrToPostGis
- from processing.algs.gdal.OneSideBuffer import OneSideBuffer
- from processing.algs.gdal.PointsAlongLines import PointsAlongLines
- testDataPath = os.path.join(os.path.dirname(__file__), 'testdata')
- class TestGdalVectorAlgorithms(unittest.TestCase, AlgorithmsTestBase.AlgorithmsTest):
- @classmethod
- def setUpClass(cls):
- start_app()
- from processing.core.Processing import Processing
- Processing.initialize()
- cls.cleanup_paths = []
- @classmethod
- def tearDownClass(cls):
- for path in cls.cleanup_paths:
- shutil.rmtree(path)
- def test_definition_file(self):
- return 'gdal_algorithm_vector_tests.yaml'
- def testOgr2Ogr(self):
- context = QgsProcessingContext()
- feedback = QgsProcessingFeedback()
- source = os.path.join(testDataPath, 'polys.gml')
- multi_source = os.path.join(testDataPath, 'multi_layers.gml')
- alg = ogr2ogr()
- alg.initAlgorithm()
- with tempfile.TemporaryDirectory() as outdir:
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- '-f "ESRI Shapefile" ' + outdir + '/check.shp ' +
- source + ' polys2'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'OUTPUT': outdir + '/check.kml'}, context, feedback),
- ['ogr2ogr',
- '-f "LIBKML" ' + outdir + '/check.kml ' +
- source + ' polys2'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'OUTPUT': outdir + '/my out/check.kml'}, context, feedback),
- ['ogr2ogr',
- '-f "LIBKML" "' + outdir + '/my out/check.kml" ' +
- source + ' polys2'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'OUTPUT': outdir + '/check.gpkg'}, context, feedback),
- ['ogr2ogr',
- '-f "GPKG" ' + outdir + '/check.gpkg ' +
- source + ' polys2'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': multi_source + '|layername=lines',
- 'CONVERT_ALL_LAYERS': False,
- 'OUTPUT': outdir + '/check.gpkg'}, context, feedback),
- ['ogr2ogr',
- '-f "GPKG" ' + outdir + '/check.gpkg ' +
- multi_source + ' lines'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': multi_source + '|layername=lines',
- 'CONVERT_ALL_LAYERS': True,
- 'OUTPUT': outdir + '/check.gpkg'}, context, feedback),
- ['ogr2ogr',
- '-f "GPKG" ' + outdir + '/check.gpkg ' +
- multi_source])
- def testOgrInfo(self):
- context = QgsProcessingContext()
- feedback = QgsProcessingFeedback()
- source = os.path.join(testDataPath, 'polys.gml')
- alg = ogrinfo()
- alg.initAlgorithm()
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'SUMMARY_ONLY': True,
- 'NO_METADATA': False}, context, feedback),
- ['ogrinfo',
- '-al -so ' +
- source + ' polys2'])
- source = os.path.join(testDataPath, 'filename with spaces.gml')
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'SUMMARY_ONLY': True,
- 'NO_METADATA': False}, context, feedback),
- ['ogrinfo',
- '-al -so "' +
- source + '" filename_with_spaces'])
- source = os.path.join(testDataPath, 'filename with spaces.gml')
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'SUMMARY_ONLY': False,
- 'NO_METADATA': False}, context, feedback),
- ['ogrinfo',
- '-al "' +
- source + '" filename_with_spaces'])
- source = os.path.join(testDataPath, 'filename with spaces.gml')
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'SUMMARY_ONLY': True,
- 'NO_METADATA': True}, context, feedback),
- ['ogrinfo',
- '-al -so -nomd "' +
- source + '" filename_with_spaces'])
- def testBuffer(self):
- context = QgsProcessingContext()
- feedback = QgsProcessingFeedback()
- source = os.path.join(testDataPath, 'polys.gml')
- source_with_space = os.path.join(testDataPath, 'filename with spaces.gml')
- alg = Buffer()
- alg.initAlgorithm()
- with tempfile.TemporaryDirectory() as outdir:
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DISTANCE': 5,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-dialect sqlite -sql "SELECT ST_Buffer(geometry, 5.0) AS geometry,* FROM """polys2"""" ' +
- '-f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DISTANCE': -5,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-dialect sqlite -sql "SELECT ST_Buffer(geometry, -5.0) AS geometry,* FROM """polys2"""" ' +
- '-f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DISTANCE': 5,
- 'DISSOLVE': True,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-dialect sqlite -sql "SELECT ST_Union(ST_Buffer(geometry, 5.0)) AS geometry,* FROM """polys2"""" ' +
- '-f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DISTANCE': 1,
- 'DISSOLVE': True,
- 'EXPLODE_COLLECTIONS': False,
- 'GEOMETRY': 'geom',
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-dialect sqlite -sql "SELECT ST_Union(ST_Buffer(geom, 1.0)) AS geom,* FROM """polys2"""" ' +
- '-f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DISTANCE': 5,
- 'EXPLODE_COLLECTIONS': True,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-dialect sqlite -sql "SELECT ST_Buffer(geometry, 5.0) AS geometry,* FROM """polys2"""" ' +
- '-explodecollections -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DISTANCE': 5,
- 'FIELD': 'total population',
- 'EXPLODE_COLLECTIONS': True,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-dialect sqlite -sql "SELECT ST_Union(ST_Buffer(geometry, 5.0)) AS geometry,* FROM """polys2""" GROUP BY """total population"""" ' +
- '-explodecollections -f "ESRI Shapefile"'])
- def testDissolve(self):
- context = QgsProcessingContext()
- feedback = QgsProcessingFeedback()
- source = os.path.join(testDataPath, 'polys.gml')
- source_with_space = os.path.join(testDataPath, 'filename with spaces.gml')
- alg = Dissolve()
- alg.initAlgorithm()
- with tempfile.TemporaryDirectory() as outdir:
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry FROM """polys2"""" ' +
- '-f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'my_field',
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry, """my_field""" FROM """polys2""" ' +
- 'GROUP BY """my_field"""" -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'total population',
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry, """total population""" FROM """polys2""" ' +
- 'GROUP BY """total population"""" -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source_with_space,
- 'FIELD': 'my_field',
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- '"' + source_with_space + '" ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry, """my_field""" FROM """filename_with_spaces""" ' +
- 'GROUP BY """my_field"""" -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'my_field',
- 'GEOMETRY': 'the_geom',
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(the_geom) AS the_geom, """my_field""" FROM """polys2""" ' +
- 'GROUP BY """my_field"""" -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'my_field',
- 'KEEP_ATTRIBUTES': False,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry, """my_field""" FROM """polys2""" ' +
- 'GROUP BY """my_field"""" -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'KEEP_ATTRIBUTES': False,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry FROM """polys2"""" ' +
- '-f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'my_field',
- 'EXPLODE_COLLECTIONS': True,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry, """my_field""" FROM """polys2""" ' +
- 'GROUP BY """my_field"""" -explodecollections -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'my_field',
- 'COUNT_FEATURES': True,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry, """my_field""", COUNT(geometry) AS count FROM """polys2""" ' +
- 'GROUP BY """my_field"""" -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'my_field',
- 'COUNT_FEATURES': True,
- 'GEOMETRY': 'the_geom',
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(the_geom) AS the_geom, """my_field""", COUNT(the_geom) AS count FROM """polys2""" ' +
- 'GROUP BY """my_field"""" -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'my_field',
- 'COMPUTE_AREA': True,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry, """my_field""", SUM(ST_Area(geometry)) AS area, ' +
- 'ST_Perimeter(ST_Union(geometry)) AS perimeter FROM """polys2""" ' +
- 'GROUP BY """my_field"""" -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'my_field',
- 'COMPUTE_AREA': True,
- 'GEOMETRY': 'the_geom',
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(the_geom) AS the_geom, """my_field""", SUM(ST_Area(the_geom)) AS area, ' +
- 'ST_Perimeter(ST_Union(the_geom)) AS perimeter FROM """polys2""" ' +
- 'GROUP BY """my_field"""" -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'my_field',
- 'COMPUTE_STATISTICS': True,
- 'STATISTICS_ATTRIBUTE': 'my_val',
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry, """my_field""", ' +
- 'SUM("""my_val""") AS sum, MIN("""my_val""") AS min, MAX("""my_val""") AS max, AVG("""my_val""") AS avg FROM """polys2""" ' +
- 'GROUP BY """my_field"""" -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'test field',
- 'COMPUTE_STATISTICS': True,
- 'STATISTICS_ATTRIBUTE': 'total population',
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry, """test field""", ' +
- 'SUM("""total population""") AS sum, MIN("""total population""") AS min, MAX("""total population""") AS max, ' +
- 'AVG("""total population""") AS avg FROM """polys2""" ' +
- 'GROUP BY """test field"""" -f "ESRI Shapefile"'])
- # compute stats without stats attribute, and vice versa (should be ignored)
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'my_field',
- 'COMPUTE_STATISTICS': True,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry, """my_field""" FROM """polys2""" ' +
- 'GROUP BY """my_field"""" -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'my_field',
- 'STATISTICS_ATTRIBUTE': 'my_val',
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry, """my_field""" FROM """polys2""" ' +
- 'GROUP BY """my_field"""" -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELD': 'my_field',
- 'OPTIONS': 'my opts',
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-nlt PROMOTE_TO_MULTI -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry, """my_field""" FROM """polys2""" ' +
- 'GROUP BY """my_field"""" "my opts" -f "ESRI Shapefile"'])
- def testOgr2PostGis(self):
- context = QgsProcessingContext()
- feedback = QgsProcessingFeedback()
- source = os.path.join(testDataPath, 'polys.gml')
- source_with_space = os.path.join(testDataPath, 'filename with spaces.gml')
- alg = OgrToPostGis()
- alg.initAlgorithm()
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source_with_space}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 "' + source_with_space + '" filename_with_spaces '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.filename_with_spaces -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'HOST': 'google.com'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=google.com port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'PORT': 3333}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=3333 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'USER': 'kevin_bacon'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public user=kevin_bacon" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DBNAME': 'secret_stuff'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 dbname=secret_stuff active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'PASSWORD': 'passw0rd'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 password=passw0rd active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'SCHEMA': 'desktop'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=desktop" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln desktop.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'TABLE': 'out_table'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.out_table -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'PK': ''}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'PK': 'new_fid'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=new_fid -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'PK': '',
- 'PRIMARY_KEY': 'objectid'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=objectid -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'PK': 'new_id',
- 'PRIMARY_KEY': 'objectid'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=new_id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'GEOCOLUMN': 'my_geom'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=my_geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DIM': 1}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=3 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'SIMPLIFY': 5}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -simplify 5 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'SEGMENTIZE': 4}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -segmentize 4 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'SPAT': QgsRectangle(1, 2, 3, 4)}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -spat 1.0 2.0 3.0 4.0 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'FIELDS': ['f1', 'f2']}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 -select "f1,f2" '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'WHERE': '0=1'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -where "0=1" -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'GT': 2}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -gt 2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'OVERWRITE': False}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'APPEND': True}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-append -overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'ADDFIELDS': True}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-addfields -overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'LAUNDER': True}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-lco LAUNDER=NO -overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'INDEX': True}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-lco SPATIAL_INDEX=OFF -overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'SKIPFAILURES': True}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -skipfailures -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'PROMOTETOMULTI': False}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'PRECISION': False}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI -lco PRECISION=NO'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'OPTIONS': 'blah'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI blah'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'SHAPE_ENCODING': 'blah'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES --config SHAPE_ENCODING blah -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'GTYPE': 4}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -nlt LINESTRING -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'A_SRS': 'EPSG:3111'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -a_srs EPSG:3111 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'A_SRS': QgsCoordinateReferenceSystem('EPSG:3111')}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -a_srs EPSG:3111 -nlt PROMOTE_TO_MULTI'])
- custom_crs = 'proj4: +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs'
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'A_SRS': custom_crs}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -a_srs EPSG:20936 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'T_SRS': 'EPSG:3111'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -t_srs EPSG:3111 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'T_SRS': QgsCoordinateReferenceSystem('EPSG:3111')}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -t_srs EPSG:3111 -nlt PROMOTE_TO_MULTI'])
- custom_crs = 'proj4: +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs'
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'T_SRS': custom_crs}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -t_srs EPSG:20936 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'S_SRS': 'EPSG:3111'}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -s_srs EPSG:3111 -nlt PROMOTE_TO_MULTI'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'S_SRS': QgsCoordinateReferenceSystem('EPSG:3111')}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -s_srs EPSG:3111 -nlt PROMOTE_TO_MULTI'])
- custom_crs = 'proj4: +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs'
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'S_SRS': custom_crs}, context, feedback),
- ['ogr2ogr',
- '-progress --config PG_USE_COPY YES -f PostgreSQL "PG:host=localhost port=5432 active_schema=public" '
- '-lco DIM=2 ' + source + ' polys2 '
- '-overwrite -lco GEOMETRY_NAME=geom -lco FID=id -nln public.polys2 -s_srs EPSG:20936 -nlt PROMOTE_TO_MULTI'])
- def testOffsetCurve(self):
- context = QgsProcessingContext()
- feedback = QgsProcessingFeedback()
- source = os.path.join(testDataPath, 'polys.gml')
- source_with_space = os.path.join(testDataPath, 'filename with spaces.gml')
- alg = OffsetCurve()
- alg.initAlgorithm()
- with tempfile.TemporaryDirectory() as outdir:
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DISTANCE': 5,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-dialect sqlite -sql "SELECT ST_OffsetCurve(geometry, 5.0) AS geometry,* FROM """polys2"""" ' +
- '-f "ESRI Shapefile"'])
- def testOneSidedBuffer(self):
- context = QgsProcessingContext()
- feedback = QgsProcessingFeedback()
- source = os.path.join(testDataPath, 'polys.gml')
- source_with_space = os.path.join(testDataPath, 'filename with spaces.gml')
- alg = OneSideBuffer()
- alg.initAlgorithm()
- with tempfile.TemporaryDirectory() as outdir:
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DISTANCE': 5,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-dialect sqlite -sql "SELECT ST_SingleSidedBuffer(geometry, 5.0, 0) AS geometry,* FROM """polys2"""" ' +
- '-f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DISTANCE': 5,
- 'DISSOLVE': True,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-dialect sqlite -sql "SELECT ST_Union(ST_SingleSidedBuffer(geometry, 5.0, 0)) AS geometry,* FROM """polys2"""" ' +
- '-f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DISTANCE': 5,
- 'EXPLODE_COLLECTIONS': True,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-dialect sqlite -sql "SELECT ST_SingleSidedBuffer(geometry, 5.0, 0) AS geometry,* FROM """polys2"""" ' +
- '-explodecollections -f "ESRI Shapefile"'])
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DISTANCE': 5,
- 'FIELD': 'total population',
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-dialect sqlite -sql "SELECT ST_Union(ST_SingleSidedBuffer(geometry, 5.0, 0)) AS geometry,* ' +
- 'FROM """polys2""" GROUP BY """total population"""" -f "ESRI Shapefile"'])
- def testPointsAlongLines(self):
- context = QgsProcessingContext()
- feedback = QgsProcessingFeedback()
- source = os.path.join(testDataPath, 'polys.gml')
- source_with_space = os.path.join(testDataPath, 'filename with spaces.gml')
- alg = PointsAlongLines()
- alg.initAlgorithm()
- with tempfile.TemporaryDirectory() as outdir:
- self.assertEqual(
- alg.getConsoleCommands({'INPUT': source,
- 'DISTANCE': 0.2,
- 'OUTPUT': outdir + '/check.shp'}, context, feedback),
- ['ogr2ogr',
- outdir + '/check.shp ' +
- source + ' ' +
- '-dialect sqlite -sql "SELECT ST_Line_Interpolate_Point(geometry, 0.2) AS geometry,* FROM """polys2"""" ' +
- '-f "ESRI Shapefile"'])
- if __name__ == '__main__':
- nose2.main()
|