Reputation: 123
How can one calculate the distance in OpenLayers between 2 points using Mercator projection?
Thanks
Upvotes: 12
Views: 27178
Reputation: 2485
try getLength
to get the spherical length of a geometry:
import LineString from 'ol/geom/LineString';
import {getLength} from 'ol/sphere';
const line = new LineString([coordStart, coordEnd]);
const distance = getLength(line);
API: https://openlayers.org/en/latest/apidoc/module-ol_sphere.html#.getLength
Upvotes: 3
Reputation: 12659
You can use that method if using openlayers3
Instanciate a ol.geom.LineString object between the two points and calculate the length of the line:
this.distanceBetweenPoints = function(latlng1, latlng2){
var line = new ol.geom.LineString([latlng1, latlng2]);
return Math.round(line.getLength() * 100) / 100;
};
You can then get a readable value using some formation:
this.formatDistance = function(length) {
if (length >= 1000) {
length = (Math.round(length / 1000 * 100) / 100) +
' ' + 'km';
} else {
length = Math.round(length) +
' ' + 'm';
}
return length;
}
Upvotes: 6
Reputation: 8322
use point1.distanceTo(point2)
var Geographic = new OpenLayers.Projection("EPSG:4326");
var Mercator = new OpenLayers.Projection("EPSG:900913");
function distanceBetweenPoints(latlng1, latlng2){
var point1 = new OpenLayers.Geometry.Point(latlng1.lon, latlng1.lat).transform(Geographic, Mercator);
var point2 = new OpenLayers.Geometry.Point(latlng2.lon, latlng2.lat).transform(Geographic, Mercator);
return point1.distanceTo(point2);
}
Upvotes: 17