[gdal-dev] A question of eficiency

Even Rouault even.rouault at spatialys.com
Fri Jul 21 10:32:19 PDT 2023


Abel,

OK, I now better understand what you meant. Well, no, there's no way for 
the writing part of a driver to know how many features there are in the 
source layer, because in the general case, there is no source layer... 
Users could potentially call CreateFeature() without any source layer 
and without knowing in advance how many features they are going to 
write. Ideally your driver wouldn't need to know that, but I don't know 
the specificities of your format. If you really need to know the number 
of features before being able to write the file, the strategy would be 
that the ICreateFeature() method of your driver actually delegates 
writing those features to another GDAL driver (e.g GeoPackage) in a 
temporary file, and upon layer closing, you read back that temporary 
file to actually write your own file.

In some cases, ogr2ogr could potentially know in advance the number of 
features to be written and pass them to the output driver(as well as the 
extent typically), but:

- knowing the number of features can be a pretty slow operation for some 
input drivers , or when using a SQL statement

- and there's no such infrastructure currently

Even

Le 21/07/2023 à 19:23, Abel Pau a écrit :
>
> Hello!
>
> I’ve been trying to use the OGRLayer::GetFeatureCount() when I am 
> reading another format inside the ICreateFeature() but I think it’s 
> impossible. At this point I don’t have access to the layer info, so to 
> the GetFeatureCount().
>
> In fact I don’t mind where to call this function but I need to call it 
> in order to write our format efficiently (at least in most of cases).
>
> So the question is, in my driver, when I read a format I get some 
> information about the layer but I can’t acces to the count of the 
> features of the layer. I am right? If not, how I do that?
>
> Thanks but before sending this mail I’ve been like hours trying to 
> find it out debbuging and consulting the call stack from all points 
> and nothing seems to indicate I can do that. But perhaps I am wrong.
>
> It would be very helpful knowing that information. I not my writting 
> strategy with change radically. Thankssssss!
>
> *De:*gdal-dev <gdal-dev-bounces at lists.osgeo.org> *En nombre de *Abel Pau
> *Enviado el:* divendres, 7 de juliol de 2023 12:44
> *Para:* Even Rouault <even.rouault at spatialys.com>; 
> gdal-dev at lists.osgeo.org
> *Asunto:* Re: [gdal-dev] A question of eficiency
>
> Hi again,
>
> I can totally give this number in GetFeatureCount(). No problem from 
> my driver to other.
>
> Then I understand that in one way (efficient) or in another (no 
> efficient) I can always get the number of features with the 
> GetFeatureCount(). True?
>
> About the other question imagine a multiline shape with two lines of 
> two parts every line. I need to know the total count of individual 
> lines (cause my driver doesn’t have multiline and I have to convert 
> every multiline to N lines). It is 4 (2+2). Can I get this number 
> without asking every feature how many parts it have? I doubt that, but...
>
> Thanks for your kind anwser!
>
> *De:*Even Rouault <even.rouault at spatialys.com>
> *Enviado el:* divendres, 7 de juliol de 2023 12:32
> *Para:* Abel Pau <a.pau at creaf.uab.cat>; gdal-dev at lists.osgeo.org
> *Asunto:* Re: [gdal-dev] A question of eficiency
>
> Abel,
>
> At the minimum for the reading side of a vector driver, you need to 
> implement GetNextFeature().
>
> If there is an efficient way of knowing the number of features without 
> iterating over the whole file (typically a field in a header giving 
> that number), you may implement GetFeatureCount(). If you don't 
> implement it, and code using your driver needs the feature count, the 
> generic implementation of OGRLayer::GetFeatureCount() will call 
> GetNextFeature() repeatdly until it returns NULL.
>
> Not totally sure to understand your question about multielements. If 
> you have an instance of OGRGeometryCollection or any deriving class, 
> there's a getNumGeometries() method to get the number of parts
>
> Even
>
> Le 07/07/2023 à 11:33, Abel Pau a écrit :
>
>     Hi,
>
>     I would like to know if when we use the code of GDAL to program a
>     driver (or whatever) in vectors (so, ogr) we can assume that we
>     can know the number of elements we are going to import in any way
>     or it would be possible not knowing that until NextFeature is
>     empty (or something like that). So, there is any way to obtain
>     this number of elements without doing a while? And in case of
>     multielements its possible to know how many parts are there in total?
>
>     I need that to write my format (I don’t explain the details cause
>     I don’t get you bored :) )
>
>     If anyone know that I’d appreciate an answer. Thanks in advance.
>
>     Abel.
>
>     _______________________________________________
>
>     gdal-dev mailing list
>
>     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.

-- 
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/20230721/b2f8e42b/attachment-0001.htm>


More information about the gdal-dev mailing list