[gdal-dev] Intersection of two Layers

Ari Jolma ari.jolma at gmail.com
Mon Jan 18 23:40:30 PST 2016


18.01.2016, 11:56, Kai Muehlbauer kirjoitti:
> Hi,
>
> at the moment I calculate the intersection of two OGR Layers (A, B) by 
> iterating over features/geometries (GA) of layer A and then calling 
> GA.Intersection(GB) for every Feature/Geometry (GB) of B. I set a 
> spatial filter for layer B with every GA. The intersections 
> features/geometries are written to a result layer (C).
>
> In my use case the features/geometries of layer B are much smaller 
> than the features of layer A. Means that quite a big number of B's 
> geometries are fully contained in A's geometries.
>
> To speed things up, I check for containment GA.contains(GB). If GB is 
> contained in GA, I just copy GB to C, otherwise I calculate 
> GA.Intersection(GB) and write this to C.
>
> I found that I also could use the layer intersection function 
> (OGRLayer::Intersection). Unfortunately the intersection is calculated 
> for every feature/geometry.
>
> Would it be possible to extend the layer intersection function to 
> allow for containment check (eg. as an option) and just copy the 
> contained geometries without calculation of expensive intersection? 
> Suggestions, opinions?

There's the Options argument, which could be used. Something like 
"PRETEST=CONTAINMENT" could indicate a wish to test containment before 
intersection.

A test dataset and a patch would be useful.

Ari

>
> In my use case I get improvements of around 20% of processing time.
>
> Cheers,
> Kai
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/gdal-dev



More information about the gdal-dev mailing list