[gdal-dev] OSR Python: nearest polygon distance from each point feature?

Even Rouault even.rouault at mines-paris.org
Sun Dec 23 14:19:53 PST 2012


Le samedi 22 décembre 2012 17:17:38, David Verbyla a écrit :
> > I am a newbie to OGR/OSR using Python 2.7.2, please excuse my ignorance:
> > I am trying to find the distance to the closest polygon for each point.
> > Is there a more efficient way than simply computing the distance to all
> 
> > polygons for each point?  For example:
> nPts = pointsLayer.GetFeatureCount()
> nPolys = polysLayer.GetFeatureCount()
> 
> for pt in range(0,nPts):
>       minDist = 1000000
>       pointFeature = pointsLayer.GetFeature(pt)
>       for poly in range(0,nPolys):
>             polyFeature = polysLayer.GetFeature(poly)
>             Dist = pointFeature.GetGeometryRef().Distance(
> polyFeature.GetGeometryRef() )
>             if (Dist < minDist):
>                   minDist = Dist
>       print (pt,minDist)

Several points to keep in mind : GetFeature() is not always efficiently 
implemented depending on the capability of the format and/or driver. For 
shapefiles, it is OK, but for some other formats, GetFeature() might be slow. 
If you need to iterate over all the features of a layer, using 
GetNextFeature() is recommanded.

If the layer you're querying has a spatial index ( PostGIS database with 
spatial index, shapefiles with .qix files), you could try to set a spatial filter 
around the target point. But you might need to have a strategy where you start 
with a small radius and increase it until the spatial query isn't empty.

> 
> Thank you.
> 
> Dave Verbyla


More information about the gdal-dev mailing list