当前位置:  开发笔记 > 编程语言 > 正文

如何将纬度或经度转换为米?

如何解决《如何将纬度或经度转换为米?》经验,为你挑选了7个好方法。

如果我有标准NMEA格式的纬度或经度读数有一个简单的方法/公式将该读数转换为米,然后我可以用Java(J9)实现?

编辑:好吧似乎我想做的事情不容易,但我真正想做的是:

假设我有一个lat和一个长途的点和一个lat和很长的用户有一个简单的方法来比较它们来决定何时告诉用户他们在一个合理的距离点的方式点?我觉得合理是主题,但是这很容易做到还是仍然过于数学?



1> b-h-..:

这是一个javascript函数:

function measure(lat1, lon1, lat2, lon2){  // generally used geo measurement function
    var R = 6378.137; // Radius of earth in KM
    var dLat = lat2 * Math.PI / 180 - lat1 * Math.PI / 180;
    var dLon = lon2 * Math.PI / 180 - lon1 * Math.PI / 180;
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
    Math.sin(dLon/2) * Math.sin(dLon/2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    var d = R * c;
    return d * 1000; // meters
}

说明:https://en.wikipedia.org/wiki/Haversine_formula

根据其经度和纬度,半正公式确定球体上两点之间的大圆距离.


对于那些寻找图书馆在wgs和utm之间转换的人:https://github.com/urbanetic/utm-converter
如果有人可以对上述代码添加一些解释性评论,真的很感激.提前致谢!

2> Ben..:

鉴于你正在寻找一个简单的公式,这可能是最简单的方法,假设地球是一个40075公里的周长球.

纬度1°的长度(以米为单位)=始终为111.32 km

以1°经度为单位的长度= 40075 km*cos(纬度)/ 360


纬度在赤道处为0°,在极点处为90°(而不是相反).对于赤道,公式给出40075 km*cos(0°)/ 360 = 111 km.对于极点,公式给出40075*cos(90°)/ 360 = 0 km.

3> JJones..:

为了近似两个坐标之间的短距离,我使用了http://en.wikipedia.org/wiki/Lat-lon中的公式 :

m_per_deg_lat = 111132.954 - 559.822 * cos( 2 * latMid ) + 1.175 * cos( 4 * latMid);
m_per_deg_lon = 111132.954 * cos ( latMid );

.

在下面的代码中,我留下了原始数字,以显示它们与维基百科公式的关系.

double latMid, m_per_deg_lat, m_per_deg_lon, deltaLat, deltaLon,dist_m;

latMid = (Lat1+Lat2 )/2.0;  // or just use Lat1 for slightly less accurate estimate


m_per_deg_lat = 111132.954 - 559.822 * cos( 2.0 * latMid ) + 1.175 * cos( 4.0 * latMid);
m_per_deg_lon = (3.14159265359/180 ) * 6367449 * cos ( latMid );

deltaLat = fabs(Lat1 - Lat2);
deltaLon = fabs(Lon1 - Lon2);

dist_m = sqrt (  pow( deltaLat * m_per_deg_lat,2) + pow( deltaLon * m_per_deg_lon , 2) );

维基百科条目指出,纵向100km的距离计算在0.6m范围内,纬度100km处的距离计算在1cm范围内,但我没有证实这一点,因为我的使用精度很高.


请注意,2017年维基百科页面有另一个(似乎是精炼的)公式.
是的,维基百科中的公式略有不同,但似乎[其他维基百科](https://en.wikipedia.org/wiki/Geographic_coordinate_system#Expressing_latitude_and_longitude_as_linear_units)公式基于此类似的结果[很棒的答案] (https://gis.stackexchange.com/a/75535/46435),有人实际完成了计算.

4> John Feminel..:

纬度和经度指定点,而不是距离,所以你的问题有点荒谬.如果你问的是两个(纬度,经度)点之间的最短距离,请参阅这篇关于大圆距离的维基百科文章.


他正在谈论参考转换,所以你的答案不是重点(没有双关语)
他想知道每米多少度,以便可以找到2点之间的距离。字里行间。

5> T.E.D...:

地球是一个令人讨厌的不规则表面,所以没有简单的公式可以做到这一点.你必须使用地球的近似模型,并将坐标投射到它上面.我通常看到用于此的模型是WGS 84.这就是GPS设备通常用来解决完全相同的问题.

NOAA有一些软件可以在他们的网站上下载以帮助解决这个问题.



6> Reed Copsey..:

有许多工具可以使这很容易.有关涉及的内容的详细信息,请参阅monjardin的答案.

但是,这样做并不一定困难.听起来你正在使用Java,所以我建议你研究类似GDAL的东西.它为它们的例程提供了java包装器,它们具有从Lat/Lon(地理坐标)转换为UTM(投影坐标系)或其他一些合理的地图投影所需的所有工具.

UTM很好,因为它是米,所以很容易使用.但是,您需要获得适当的UTM区域才能做得很好.通过谷歌搜索可以获得一些简单的代码,以便为纬度/经度对找到合适的区域.



7> Rodrigo..:

这是bh函数的R版本,以防万一:

measure <- function(lon1,lat1,lon2,lat2) {
    R <- 6378.137                                # radius of earth in Km
    dLat <- (lat2-lat1)*pi/180
    dLon <- (lon2-lon1)*pi/180
    a <- sin((dLat/2))^2 + cos(lat1*pi/180)*cos(lat2*pi/180)*(sin(dLon/2))^2
    c <- 2 * atan2(sqrt(a), sqrt(1-a))
    d <- R * c
    return (d * 1000)                            # distance in meters
}

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有