经纬度和坐标之间的相互转换

经纬度转坐标

经纬度(Latitude and Longitude)和坐标(Cartesian coordinate system)之间的转换可以通过数学公式来实现。

将经纬度转换成坐标:

假设需要将经纬度(latitude,longitude)转换成平面坐标(x,y),其中经度为 longitude,纬度为 latitude,地球半径为 R(6371km),则可以使用以下公式:

x = R * cos(latitude) * cos(longitude)
y = R * cos(latitude) * sin(longitude)

其中,经度和纬度都是用弧度表示的。这个公式假设地球为一个完美的球体(尽管实际上地球的形状是略微扁平的),但对于大多数应用来说,这个假设足够精确了。

例如,将经度为 30.2672,纬度为 -97.7431 的坐标转换为平面坐标,假设地球半径为 6371km,则可以通过以下代码实现:

代码

const lat = -97.7431 * Math.PI / 180;
const lng = 30.2672 * Math.PI / 180;
const R = 6371;
const x = R * Math.cos(lat) * Math.cos(lng);
const y = R * Math.cos(lat) * Math.sin(lng);
console.log(x, y); // 输出 2565.6721748380895, 4291.611282443771

坐标转经纬度

将坐标转换成经纬度:

假设需要将平面坐标(x,y)转换成经纬度(latitude,longitude),同样假设地球半径为 R(6371km),则可以使用以下公式:

latitude = asin(y / R)
longitude = atan2(x, y)

其中,asin 函数的值为弧度制,所以需要将其转化为角度(degrees)制;atan2 函数的值为角度制。经度的范围是 -180 到 180 度,纬度的范围是 -90 到 90 度。

例如,假设已知坐标 (2565.6721748380895, 4291.611282443771),将其转换为经度为 30.2672,纬度为 -97.7431 的坐标:

const x = 2565.6721748380895;
const y = 4291.611282443771;
const R = 6371;
const lat = Math.asin(y / R) * 180 / Math.PI;
const lng = Math.atan2(x, y) * 180 / Math.PI;
console.log(lat, lng); // 输出 -97.74307975452085, 30.26720173968211
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐