Pages: 1
- Sujet précédent - QGIS/PyQGIS: Affecter une reference spatiale a un Dataset - Sujet suivant
#1 Wed 17 May 2023 11:44
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
QGIS/PyQGIS: Affecter une reference spatiale a un Dataset
Bonjour,
J'ai un dataset (ds) auquel je veux affecter une référence spatiale :
Code:
srs = osr.SpatialReference() srs.ImportFromEPSG(4326) srs.SetAxisMappingStrategy(gdal.osr.OAMS_TRADITIONAL_GIS_ORDER) print(srs) ds.SetSpatialRef(srs)
Avec l'instruction print, j'ai bien la description du srs:
Code:
GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.0174532925199433, AUTHORITY["EPSG","9122"]], AXIS["Latitude",NORTH], AXIS["Longitude",EAST], AUTHORITY["EPSG","4326"]]
Mais quand je lance l'instruction :
Code:
print(ds.GetSpatialRef())
J'ai comme réponse : None
Qu'est ce qui cloche?
Merci, Nico
Hors ligne
#2 Wed 17 May 2023 17:53
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: QGIS/PyQGIS: Affecter une reference spatiale a un Dataset
Bonjour,
La méthode SetSpatialRef n'existe pas sur le DataSource comme vous semblez être en train de faire.
Il faut que vous alliez chercher la référence à la définition du champ géométrique de votre Layer.
Voici un exemple de code qui devrait faire ce que vous souhaitez si j'ai bien compris votre question (j'ai pris un shapefile pour l'exemple):
Code:
ds = ogr.Open('C:/some/path/to/layer.shp') layer = ds.GetLayer() print(layer.GetSpatialRef()) # --> None, if no spatial ref are set for this layer srs = osr.SpatialReference() srs.ImportFromEPSG(4326) srs.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER) l_defn = layer.GetLayerDefn() geom_defn = l_defn.GetGeomFieldDefn(0) # get the definition of the geom field geom_defn.SetSpatialRef(srs) # apply the srs print(layer.GetSpatialRef())
Hors ligne
#3 Mon 22 May 2023 12:37
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: QGIS/PyQGIS: Affecter une reference spatiale a un Dataset
Bonjour,
J'ai un message d'erreur :
Code:
AttributeError: 'NoneType' object has no attribute 'GetSpatialRef' Traceback (most recent call last): File "C:\Users/ngabar/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\s100\S100.py", line 275, in runS102 print(layer.GetSpatialRef()) # --> None, if no spatial ref are set for this layer AttributeError: 'NoneType' object has no attribute 'GetSpatialRef'
Dans mon cas, je ne part pas d'un shapefile, je lit un raster avec GDAL, et si je fais un print(ds), j'ai :
Code:
<osgeo.gdal.Dataset; proxy of <Swig Object of type 'GDALDatasetShadow *' at 0x000002154EB03180> >
Donc pourquoi ds.GetLayer() renvoie None ?
Nico
Hors ligne
#4 Mon 22 May 2023 15:38
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: QGIS/PyQGIS: Affecter une reference spatiale a un Dataset
Bonjour,
Si vous travaillez sur un raster, votre code semble correct.
Le code que je vous ai proposé concerne un jeu de données vecteur. Comme vous n'aviez pas précisé, j'ai cru que vous étiez sur des vecteurs.
Hors ligne
Pages: 1
- Sujet précédent - QGIS/PyQGIS: Affecter une reference spatiale a un Dataset - Sujet suivant