# Projecting point on feature in PyQGIS?

In ArcGIS the `IProximityOperator.QueryNearestPoint` method is available to get the nearest point.

Is there any similar function available in PyQGIS?

There is no ready-made solution, you need to program but it is a simple problem of analytical geometry (Nearest neighbor) and the solution was given by Paul Bourke in 1998 (Points, lines, and planes).

Several versions of his algorithm have been proposed in various languages ​​including Python:

The script with shapely can be easily converted to PyQGIS

1) The solution of IProximityOperator.QueryNearestPoint Method) with ArcGIS (figure from IProximityOperator.QueryNearestPoint Method)

2) one solution with PyQGIS adapting the script of scw to PyQGIS;

• Thanks for your reply. I checked that reference links. But all these were seems to applicable for a line with two vertex. I am having a polyline with more vertex. If I create a loop(in programming) for each segment, then it consumes more execution time. Is there anyother option available? – Dharmarajan Dec 3 '13 at 8:59

By using shapely, I accomplish this [http://toblerity.org/shapely/manual.html]

code snippet:

``````dist = lineStr.project(refPt)

np = lineStr.interpolate(dist) # using shapely
``````

You can use Spatialite [1] and its `ClosestPoint( geom1 Geometry , geom2 Geometry ) : Point`. As the docs [2] say:

Returns the Point on geom1 that is closest to geom2.

You can try it in QGIS DB Manager connected to any Spatialite database:

``````SELECT AsText(ClosestPoint(GeomFromText('LINESTRING(0 0, 0 4)') , GeomFromText('POINT(2 2)') ))
``````

which returns:

``````POINT(0 2)
``````

Or use it in QGIS Python console:

``````from pyspatialite import dbapi2
conn = dbapi2.connect('path_to_your_database/db.sqlite')
cur = conn.cursor()
qry = "SELECT AsText(ClosestPoint(GeomFromText('LINESTRING(0 0, 0 4)'), GeomFromText('POINT(2 2)') ))"
cur.execute(qry)
cur.fetchone()[0]
``````

Good luck!