[gdal-dev] Reading an OSM file
Even Rouault
even.rouault at spatialys.com
Sun Jun 21 05:51:31 PDT 2015
Le dimanche 21 juin 2015 14:35:13, vous avez écrit :
> Hi Even,
>
> On 2015-06-21 14:25, Even Rouault wrote:
> > Le dimanche 21 juin 2015 14:07:28, Gökçen Eraslan a écrit :
> >> Hi everyone,
> >>
> >> I am trying to read an OSM file which I downloaded from geofabrik.
> >> Although I can get the OSM driver by name (readonly), I get nothing when
> >> I try to open the data source in which several .osm and osm.bz2 files
> >
> >> present:
> > Gökçen,
>
> Thanks for your very fast reply.
>
> > For .osm files, you must build GDAL against the Expat library to have XML
> > support.
>
> I am using my distro package. I think my gdal is already built with the
> expat support,
Ah yes, it should.
> otherwise it wouldn't show OSM in the "ogrinfo --formats"
> output, would it?
It would appear, but with reduced functionnality (only .pbf reading)
>
> In addition, when I try:
>
> OGRSFDriverRegistrar *reg = OGRSFDriverRegistrar::GetRegistrar();
> OGRSFDriver *osmdrv = reg->GetDriverByName("OSM");
> OGRDataSource *myosm = osmdrv->Open("myfile.osm");
>
> last line returns successfully, which is good, but I still don't get why
> OGRSFDriverRegistrar::Open() returns NULL always.
I didn't look closely at your initial message but in 'poDS =
OGRSFDriverRegistrar::Open( ".", FALSE );' you need to give a .osm filename,
not "."
>
> > For .osm.bz2, you have to uncompress them priorly to ingesting into GDAL.
> > You can potentially do it on-the-fly, with something like "cat
> > your.osm.bz2 | bunzip2 | your_program /vsistdin/"
>
> OK, but I am already using a plain XML .osm file. I also have .osm.pbf
> files in the same directory but OGRSFDriverRegistrar::Open() always
> returns NULL. My gdal library has sqlite support built-in.
>
> > You must also be aware that proper reading of "big" osm files require to
> > turn on "interleaved reading" mode, as explained in
> > http://gdal.org/drv_osm.html
>
> That I didn't know. Thanks for pointing out. My .osm file is 60M and
> .osm.pbf is just 3M. Compared to the planet.osm file, they really tiny :)
You'll see. There's a warning emitted if you need to use interleave reading.
>
> > Even
>
> Gokcen.
>
> >> ----
> >> #include "ogrsf_frmts.h"
> >>
> >> int main()
> >>
> >> {
> >>
> >> OGRRegisterAll();
> >>
> >> OGRDataSource *poDS;
> >> OGRSFDriverRegistrar *reg = OGRSFDriverRegistrar::GetRegistrar();
> >> OGRSFDriver *osmdrv = reg->GetDriverByName("OSM");
> >>
> >> if( osmdrv == NULL )
> >> {
> >>
> >> printf( "OSM driver open failed.\n" );
> >> exit( 1 );
> >>
> >> }
> >>
> >> poDS = OGRSFDriverRegistrar::Open( ".", FALSE );
> >> if( poDS == NULL )
> >> {
> >>
> >> printf( "Open failed.\n" );
> >> exit( 1 );
> >>
> >> }
> >> return 0;
> >>
> >> }
> >> ----
> >>
> >> Program only prints the message "Open failed". I can also see OSM
> >> (readonly) in "ogrinfo --formats" output. I would appreciate if someone
> >> could help me out.
> >>
> >> PS: I am using gdal 1.11.2. Actually, what I would like to do is to read
> >> the file from within R through rgdal but it seems I cannot even read the
> >> file at C level via libgdal.
> >>
> >> Thanks in advance.
> >>
> >> Best regards.
> >> Gokcen.
> >> _______________________________________________
> >> gdal-dev mailing list
> >> gdal-dev at lists.osgeo.org
> >> http://lists.osgeo.org/mailman/listinfo/gdal-dev
--
Spatialys - Geospatial professional services
http://www.spatialys.com
-------------------------------------------------------
--
Spatialys - Geospatial professional services
http://www.spatialys.com
More information about the gdal-dev
mailing list