[OpenLayers-Dev] Get distance from point to point in meters

Tim Schaub tschaub at opengeo.org
Tue Mar 9 14:11:09 EST 2010


gingerbbm wrote:
> Are you familiar with the documentation? I've never had to do what you're
> asking but I've just seen the following which sounds like it might be useful
> to you.
> 
> http://dev.openlayers.org/releases/OpenLayers-2.8/doc/apidocs/files/OpenLayers/Geometry/Point-js.html#OpenLayers.Geometry.Point.distanceTo
> 

Yes, geometry.distanceTo is it.  This will return the distance between 
two geometries in map units (the units for the coordinates of your 
geometry).  If you want to convert to meters, you can do the conversion 
manually.  The distanceTo calculation is a planar measure (treating the 
coordinates of your geometry as Cartesian coordinates).

If you want to calculate the distance between two points on a spheriod 
(one approximating the earth's surface) instead of a plane (your 
coordinate reference system), then you want the geodesic distance.  This 
requires that you also have defined the projection (your coordinate 
reference system) and that coordinates can be transformed to a 
geographic projection client-side.

If you are using EPSG:4326, EPSG:900913, or if you have included the 
proj4js definition of your projection, then you can calculate the 
geodesic length of a linestring as follows:

     var dist = line.getGeodesicLength(projection);

The default projection is what you get from new 
OpenLayers.Projection("EPSG:4326").  The getGeodesicLength method 
returns a distance in *meters* (regardless of the units of your geometry 
coordinates).

If you have two point geometries and you want to do this calculation, 
you could do the following:

     var line = new OpenLayers.Geometry.LineString([p1, p2]);
     var dist = line.getGeodesicLength(projection);

Find the getGeodesicLength docs on the same page linked above.

Tim
> 


-- 
Tim Schaub
OpenGeo - http://opengeo.org
Expert service straight from the developers.



More information about the Dev mailing list