I know two latlng points and also can get distance between 2 points. But how do I can get a latlng point on 1/3 of the distance of 2 points. latlng1 = [37.7052918, -8.8420179] latlng2 = [37.7062884, -8.8425087]
var point1 = new OpenLayers.Geometry.Point(latlng1.lon, latlng1.lat);
var point2 = new OpenLayers.Geometry.Point(latlng2.lon, latlng2.lat);
var line = new OpenLayers.Geometry.LineString([p1, p2]);
alert(line.getGeodesicLength(new OpenLayers.Projection("EPSG:4326")));
Answer
I found a better solution.
http://www.movable-type.co.uk/scripts/latlong.html
LatLon.prototype.destinationPoint = function(distance, bearing, radius) {
radius = (radius === undefined) ? 6371e3 : Number(radius);
var delta = Number(distance) / radius;
var Theta = Number(bearing).toRadians();
var Phi1 = this.lat.toRadians();
var Lambda1 = this.lon.toRadians();
var sinPhi1 = Math.sin(Phi1), cosPhi1 = Math.cos(Phi1);
var sindelta = Math.sin(delta), cosdelta = Math.cos(delta);
var sinTheta = Math.sin(Theta), cosTheta = Math.cos(Theta);
var sinPhi2 = sinPhi1 * cosdelta + cosPhi1 * sindelta * cosTheta;
var Phi2 = Math.asin(sinPhi2);
var y = sinTheta * sindelta * cosPhi1;
var x = cosdelta - sinPhi1 * sinPhi2;
var Lambda2 = Lambda1 + Math.atan2(y, x);
return new LatLon(Phi2.toDegrees(), (Lambda2.toDegrees()+540)%360-180);
// normalise to −180..+180°
};
No comments:
Post a Comment