[gdal-dev] Where is the projection info stored in a GDAL dataset?

Joaquim Manuel Freire Luís jluis at ualg.pt
Sun Mar 28 11:50:32 PDT 2021


Thanks Even,

That led me to OGR_L_GetSpatialRef()

julia> Gdal.OGR_L_GetSpatialRef(getlayer(ds2,0).ptr)
Ptr{Nothing} @0x0000000067ce4610

and

julia> toWKT(Gdal.SpatialRef(p))
"GEOGCS[\"unknown\",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[\"Longitude\",EAST],AXIS[\"Latitude\",NORTH]]"

Just have to make this a bit more smooth.


From: Even Rouault <even.rouault at spatialys.com>
Sent: Sunday, March 28, 2021 7:14 PM
To: Joaquim Manuel Freire Luís <jluis at ualg.pt>; gdal-dev at lists.osgeo.org
Subject: Re: [gdal-dev] Where is the projection info stored in a GDAL dataset?


Joaquim,

ogr2ogr -t_srs passes the CRS object as an argument of the GDALDataset::CreateLayer() API

GDALDataset::SetProjection() / GDALSetProjection() is (at least in all implementations of in-tree drivers) reserved for the raster API, and raster drivers that support the Create() API.

Similarly GDALDataset::GetSpatialRef() / GDALGetSpatialRef() is for the raster API

For the vector API, use OGRLayer::GetSpatialRef() (different layers in a same dataset could have different CRS)

Best regards,

Even
Le 28/03/2021 à 19:57, Joaquim Manuel Freire Luís a écrit :
Hi,

I am trying to use the GDAL shared lib directly from Julia and there are things that keep breaking my head. For example, the lines below use a mix of GMT and GDAL wrapper functions calls that WORK. First command creates a GMT dataset with two UTM points type with an assigned coordinate system. Next, in 2), I create a GDAL dataset of a LineString, convert it to geog in 3) and save it to file using the OGR_GMT driver in 4)

1) D2 = mat2ds([588977.324434907 4095339.69117669; 579551.921920776 4150721.71333039], proj="+proj=utm +zone=29");
2) ds = gmt2gd(D2);
3) ds2=ogr2ogr(ds, ["-t_srs", "+proj=longlat", "-overwrite"])
4) ogr2ogr(ds2, dest="lixo2.gmt")

Now the troubles. When I tried to use GDALSetProjection() I got an error like this

ERROR 6: /vsimem/##269: Dataset does not support the SetSpatialRef() method.

So I found that I could set the CRS with GDALDatasetCreateLayer() while creating a layer on the dataset (using the Memory driver)
(https://github.com/GenericMappingTools/GMT.jl/blob/master/src/gdal_utils.jl#L254)

But oddly trying to inquiry the *ds* with GDALGetSpatialRef() returns an empty pointer. I.e.:

julia> Gdal.GDALGetSpatialRef(ds.ptr)
Ptr{Nothing} @0x0000000000000000

However the CSR was well sored in some place because the ="lixo2.gmt" is correct (it has this)

# @VGMT1.0 @GLINESTRING
# @R-8.1/-8/37/37.5
# @Jp"+proj=longlat +datum=WGS84 +no_defs"
# @Jw"GEOGCS[\"unknown\",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[\"Longitude\",EAST],AXIS[\"Latitude\",NORTH]]"
# FEATURE_DATA
>
-8 37.0
-8.1 37.5

But my trouble is that I want to fish the CRS from the ogr2ogr dataset (the ds2 above) so that I can convert back from GDAL to GMT (which I already can) without having to save to a file in disk.

So basically my question is where is that CRS stored and how can I access it?

Thanks

Joaquim



_______________________________________________

gdal-dev mailing list

gdal-dev at lists.osgeo.org<mailto:gdal-dev at lists.osgeo.org>

https://lists.osgeo.org/mailman/listinfo/gdal-dev

--

http://www.spatialys.com

My software is free, but my time generally not.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20210328/a1ee5562/attachment-0001.html>


More information about the gdal-dev mailing list