经纬度转换-----度分秒以及经纬度和米

经纬度互换

度(DDD):E 108.90593度    N 34.21630度

如何将度(DDD):: 108.90593度换算成度分秒(DMS)东经E 108度54分22.2秒?转换方法是将108.90593整数位不变取108(度),用0.90593*60=54.3558,取整数位54(分),0.3558*60=21.348再取整数位21(秒),故转化为108度54分21秒.

同样将度分秒(DMS):东经E 108度54分22.2秒 换算成度(DDD)的方法如下:108度54分22.2秒=108+(54/60)+(22.2/3600)=108.90616度

因为计算时小数位保留的原因,导致正反计算存在一定误差,但误差影响不是很大。1秒的误差就是几米的样子。GPS车友可以用上述方法换算成自己需要的单位坐标。

经纬度换算成米

纬度分为60分,每一分再分为60秒以及秒的小数。

纬度线投射在图上看似水平的平行线,但实际上是不同半径的圆。有相同特定纬度的所有位置都在同一个纬线上。 
赤道的纬度为0°,将行星平分为南半球和北半球。 
纬度是指某点与地球球心的连线和地球赤道面所成的线面角,其数值在0至90度之间。位于赤道以北的点的纬度叫北纬,记为N,位于赤道以南的点的纬度称南纬,记为S。
纬度数值在0至30度之间的地区称为低纬地区,纬度数值在30至60度之间的地区称为中纬地区,纬度数值在60至90度之间的地区称为高纬地区。
赤道、南回归线、北回归线、南极圈和北极圈是特殊的纬线。
纬度1秒的长度
地球的子午线总长度大约40008km。平均:
纬度1度 = 大约111km 
纬度1分 = 大约1.85km 
纬度1秒 = 大约30.9m

所以:经度120.00001,精确的距离计算方式是:先进0.00001*111*1000=1.11m。

根据两点计算距离

球面上任意两点之间的距离计算公式可以参考维基百科上的下述文章。

值得一提的是,维基百科推荐使用Haversine公式,理由是Great-circle distance公式用到了大量余弦函数, 而两点间距离很短时(比如地球表面上相距几百米的两点),余弦函数会得出0.999...的结果, 会导致较大的舍入误差。而Haversine公式采用了正弦函数,即使距离很小,也能保持足够的有效数字。 以前采用三角函数表计算时的确会有这个问题,但经过实际验证,采用计算机来计算时,两个公式的区别不大。 稳妥起见,这里还是采用Haversine公式。

其中

  • R为地球半径,可取平均值 6371km;
  • φ1, φ2 表示两点的纬度;
  • Δλ 表示两点经度的差值。

根据2个经纬度坐标,距离计算函数

var getDistance = function(p1, p2) {   //角度转换为弧度
var getRad = function(d) {
return d * Math.PI / 180.0;  
}
var radLat1 = getRad(p1.lat);
var radLat2 = getRad(p2.lat);

var a = radLat1 - radLat2;
var b = getRad(p1.lng) - getRad(p2.lng);
var Haversin = function(c) {
var v = Math.sin(c / 2);    
return Math.pow(v,2);  
}
var h = Haversin(a) + Math.cos(radLat1) * Math.cos(radLat2) * Haversin(b);  
var distance = 2 * 6378137 * Math.asin(Math.sqrt(h));
distance = Math.round(distance * 10000) / 10000.0;
return distance;

}

  

时间: 2024-08-01 04:15:48

经纬度转换-----度分秒以及经纬度和米的相关文章

C#: 数字经纬度和度分秒经纬度间的转换

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

Java转Double类型经纬度为度分秒格式

public static String DDtoDMS(Double d){ String[] array=d.toString().split("[.]"); String degrees=array[0];//得到度 Double m=Double.parseDouble("0."+array[1])*60; String[] array1=m.toString().split("[.]"); String minutes=array1[0

度分秒转换十进制度 之Excel实现

我们都知道,1°=60′,1′=60″,1°=3600″.那么,轻而易举容易计算:112°18′37.6″=112+18/60+37.6/3600≈112.3104444°这当然是有参考价值的,比如爬下一张只有度分秒形式的经纬度表格,但是,我们的GIS软件只认十进制度(原因无非就是十进制好算),那么通过Excel的字符串操作函数,就可以轻松转换为十进制度. [注意]伸手党(划掉)急着要结果的同学可以看第4小节,拉最后有完整的公式给出,不必看1.2.3小节这些过程. 1 预备知识(三个函数) 1.

Excel中使用VBA进行度分秒与十进制度的转换

发现Excel的VBA功能真是批量处理的一把利刃,工作中小试牛刀了一把,将Excel中度分秒形式的坐标批量处理成十进制度形式,处理完后用于GIS展点制图. 原Excel数据如下: VBA代码如下: 1 Sub Coorder() 2 Dim Longitude, Latitude As String, arr 3 Dim num As Integer 4 Dim LongColIdx As Integer 5 Dim latColIdx As Integer 6 LongColIdx = 3 7

根据经纬度和半径计算经纬度范围,根据两点经纬度计算距离

这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”.在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”:构成这些圆圈的线段,叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬.北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬,两极和高纬度地区无夏,中纬度地区

地球经纬 度与度分秒格式的转化

经纬度转换成为度分秒 double dd = Convert.ToDouble(txtLB.Text); double du=0, fen=0, sec=0; double du_y = 0, fen_y = 0; du =(int)dd; du_y = dd %1; fen = (int)(du_y * 60); fen_y = (du_y*60) % 1; sec = (int)(fen_y * 60); label53.Text = string.Format("{0} {1} {2}&q

java android 将小数度数转换为度分秒格式

/** * 将小数度数转换为度分秒格式 * @param numStr (主要用于图片中存储经纬度) * @return */ public static String convertToSexagesimal(String numStr){ double num = Double.parseDouble(numStr); int du=(int)Math.floor(Math.abs(num)); //获取整数部分 double temp=getdPoint(Math.abs(num))*60

PHP版根据经纬度和半径计算出经纬度的范围

百度地图提供了范围搜索的功能,但是它使用的是百度自己的数据,但是有时候我们需要使用自己的数据,显示在地图上.比如给定两个参数:指定位置(某一处的经纬度lnglat)和搜索半径(r),搜索指定范围内的数据.针对这样的需求,基本有三种方法可以解决:1:根据map提供的计算两个坐标之间距离的方法,逐一计算指定位置和我们DB库中的位置的距离s,用s和r进行比较,如果s<r,则在搜索范围内,返给前段标注在地图上.这种方法如果数据量小,可以尝试,如果数据量大,没测试过,但可以想象-- 2:使用搜索引擎自带的

将秒数转换为时分秒的形式java形式

将一个秒数转换为时分秒形式,例如91秒=00:01:31 public class Main { public static void main(String[] args) { System.out.println(transfom(3665)); } public static String transfom(final int time) { int hh = time / 3600; int mm = (time % 3600) / 60; int ss = (time % 3600)