Thank you for your response Yann,
I tried your idea in the QGIS Python Console in both 3.10.5 and 3.12.2.
I was able to create a one part connection string URI by copying the details
from a manually added raster. Note that the two step layer addition procedure
causes QGIS to crash. The one step iface method does not work either but at
least it does not crash QGIS:
uri = QgsDataSourceUri("PG: dbname='my_database' host=my:host:address port=5432
sslmode=verify-full mode=2 schema='public' column='rast'
table='my_raster_table'")uri.setConnection(' my:host:address', '5432',
'my_database', 'my_user_name', None, QgsDataSourceUri.SslVerifyFull,
'my_qgis_authentication_id')rlayer = iface.addRasterLayer(uri.uri(False), "my
layer label", "postgres") # one step add
That resulted in the following:
Messages:
2020-04-30T16:02:01 CRITICAL Invalid Layer : Raster layer Cannot
instantiate the 'postgres' data provider
PostGIS Messages:
2020-04-30T16:02:01 WARNING Field rast ignored, because of unsupported
type b
2020-04-30T16:02:01 WARNING NOTICE: row number 0 is out of range 0..-1
-Thayer
================================================
Message: 5
Date: Thu, 30 Apr 2020 09:59:04 +0200
From: Yann Voté <[email protected]>
To: [email protected]
Subject: Re: [Qgis-user] PyQGIS to add PostGIS raster layer?
Message-ID: <[email protected]>
Content-Type: text/plain; charset=utf-8; format=flowed
Sorry, I read too fast. Didn't see it was about raster layers.
But here is a clue : load the raster layer manually, then look at the
tooltip appearing when you hover the cursor on the layer. It will
contain the connection string.
Le 30/04/2020 à 09:45, Yann Voté a écrit :
> Hi,
>
> Something like this should do.
>
> pg_layer = QgsVectorLayer(
> "host=db.priv.example.org port=5432 authcfg=expauth srid=4326 "
> "dbname=exampledb table='schema'.'table_name' (geometry) "
> "type=MULTIPOLYGON sql=",
> baseName='table_name',
> providerLib='postgres',
> )
> QgsProject.instance().addMapLayer(pg_layer)
>
> Of course, adapt with your values. In particular, authcfg is the 7-chars
> identifier of the auth configuration that contains your login and
> password (or cert) to authenticate to PostgreSQL.
>
> See https://qgis.org/pyqgis/master/core/QgsVectorLayer.html
>
> See also
> https://qgis.org/pyqgis/master/core/QgsDataSourceUri.html#qgis.core.QgsDataSourceUri
>
> for more options to build database connection strings.
>
> Regards.
>
> Yann
>
>
> Le 30/04/2020 à 00:24, thayeray a écrit :
>> Is it possible to add a PostGIS raster layer to a project using PyQGIS?
>> The PyQGIS Developer Cookbook mentions adding rasters from files,
>> geopackages and WCS services.
>> If I try using a QgsDataSourceUri by feeding it a raster column
>> instead of a
>> geometry column, the PostGIS error that is generated shows that is not
>> going
>> to work because raster is not a geometry:
>> WARNING Erroneous query: SELECT 0, array_agg(DISTINCT
>> st_srid("rast")::text || ':' || UPPER(geometrytype("rast"))) FROM
>> "public"."indicators__g_economic_rebal_r_62ft" returned 7 [ERROR:
>> function
>> geometrytype(raster) does not exist
>>
>> Any ideas of what I can do? Do I just have to give up on PostGIS
>> rasters and
>> just turn it into WCS on the server?
_______________________________________________
Qgis-user mailing list
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user