开发者

How to transform a distance from degrees to metres?

I'm using OpenLayers with an ordinary mercator map and I'm trying to sample a bounding box by finding a grid of points in latlong. The bbox is expressed in latlon, e.g.

48.1388,-15.3616,55.2057,-3.9359

I can define a distance in degrees (e.g. x: 2.5, y: 2.4) and work out the points from there. But I'd like to ex开发者_C百科press this distance in metres (e.g. 50000) in order to relate it to the user mindset (people understand metres, not degrees). How can I convert this distance? I know how to reproject a point, but not a distance.

Thanks for any hints! Mulone


Use the haversine formula to get the distance between two points of lat/long. This assumes the earth is a sphere (which is, for most cases, "good enough").

A Javascript implementation of it (shamelessly stolen from here) looks like this:

var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
        Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;


Without allowing for the slightly non-spherical shape of the earth,

One minute of latitude North to south = 1 Nautical Mile = 6075 feet So One degree = 60 Minutes = 60 * 6075 feet There are 3.28 Feet in a meter so One degree = 60 * 6075 / 3.28 Meters = 111,128 meters

Alternatively, one minute of Latitude = 1,852 Meters So One degree = 60 * 1852 meters = 111,120 meters

I'm not sure which is more accurate...

For One degree of Longitude, do the same thing, but multiply by the Cosine(Latitude) since the Longitude lines converge, (get closer together), as you move north.

Note: if you're using a calculator or computer, make sure you use the right units for the latitude (degrees or radians) that your device requires or is set to use.


The transformation between degrees and metres varies across the Earth's surface.

Assuming a spherical Earth, degrees latitude = distance * 360 / (2*PI * 6400000)

Note that longitude will vary according to the latitude:

Degrees longitude = distance *360 * / (2*PI* cos(latitude) )

The above is for the Earth's surface, and does not use the Mercator projection. If you wish to work with projected linear distance, then you will need to use the Mercator projection.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜