精华内容
下载资源
问答
  • 地球是不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),地球中腰画一个与地轴垂直的大圆圈,使圈的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”。赤道的南北两边,画出许多和...

    这些经纬线是怎样定出来的呢?

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

    其次,从北极点到南极点,可以画出许多南北方向的与地球赤道垂直的大圆圈,这叫作“经圈”;构成这些圆圈的线段,就叫经线。公元1884平面坐标图年,国际上规定以通过英国伦敦近郊的格林尼治天文台的经线作为计算经度的起点,即经度零度零分零秒,也称“本初子午线”。在它东面的为东经,共180度;在它西面的为西经,共180度。因为地球是圆的,所以东经180度和西经180度的经线是同一条经线。各国公定180度经线为“国际日期变更线”。为了避免同一地区使用两个不同的日期,国际日期变线在遇陆地时略有偏离。

    每一经度和纬度还可以再细分为60分,每一分再分为60秒以及秒的小数。利用经纬线,我们就可以确定地球上每一个地方的具体位置,并且把它在地图或地球仪上表示出来。例如问北京的经纬度是多少?我们很容易从地图上查出来是东经116度24分,北纬39度54分。在大海中航行的船只,只要把所在地的经度测出来,就可以确定船在海洋中的位置和前进方向。

    纬度共有90度。赤道为0度,向两极排列,圈子越小,度数越大。

    横线是纬度,竖线是经度。

    当然可以计算,四元二次方程。

    经度和纬度都是一种角度。

    经度是个两面角,是两个经线平面的夹角。因所有经线都是一样长,为了度量经度选取一个起点面,经1884年国际会议协商,决定以通过英国伦敦近郊、泰晤士河南岸的格林尼治皇家天文台(旧址)的一台主要子午仪十字丝的那条经线为起始经线,称为本初子午线。本初子午线平面是起点面,终点面是本地经线平面。某一点的经度,就是该点所在的经线平面与本初子午线平面间的夹角。在赤道上度量,自本初子午线平面作为起点面,分别往东往西度量,往东量值称为东经度,往西量值称为西经度。由此可见,一地的经度是该地对于本初子午线的方向和角距离。本初子午线是0°经度,东经度的最大值为180°,西经度的最大值为180°,东、西经180°经线是同一根经线,因此不分东经或西经,而统称180°经线。

    纬度是个线面角。起点面是赤道平面,线是本地的地面法线。所谓法线,即垂直于参考扁球体表面的线。某地的纬度就是该地的法线与赤道平面之间的夹角。纬度在本地经线上度量,由赤道向南、北度量,向北量值称为北纬度,向南量值称为南纬度。由此可见,一地的纬度是该地对于赤道的方向和角距离。赤道是0°纬线,北纬度的最大值为90°,即北极点;南纬度的最大值为90°,即南极点。

    经纬度互换

    度(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

    根据地球上任意两点的经纬度计算两点间的距离

    地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为 6356.755千米,平均半径6371.004千米。如果我们假设地球是一个完美的球体,那么它的半径就是地球的平均半径,记为R。如果以0度经线为基 准,那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离(这里忽略地球表面地形对计算带来的误差,仅仅是理论上的估算值)。设第一点A的经 纬度为(LonA, LatA),第二点B的经纬度为(LonB, LatB),按照0度经线的基准,东经取经度的正值(Longitude),西经取经度负值(-Longitude),北纬取90-纬度值(90- Latitude),南纬取90+纬度值(90+Latitude),则经过上述处理过后的两点被计为(MLonA, MLatA)和(MLonB, MLatB)。那么根据三角推导,可以得到计算两点距离的如下公式:

    C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)

    Distance = R*Arccos(C)*Pi/180

    这里,R和Distance单位是相同,如果是采用6371.004千米作为半径,那么Distance就是千米为单位,如果要使用其他单位,比如mile,还需要做单位换算,1千米=0.621371192mile

    如果仅对经度作正负的处理,而不对纬度作90-Latitude(假设都是北半球,南半球只有澳洲具有应用意义)的处理,那么公式将是:

    C = sin(LatA)*sin(LatB) + cos(LatA)*cos(LatB)*cos(MLonA-MLonB)

    Distance = R*Arccos(C)*Pi/180

    以上通过简单的三角变换就可以推出。

    如果三角函数的输入和输出都采用弧度值,那么公式还可以写作:

    C = sin(LatA*Pi/180)*sin(LatB*Pi/180) + cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180)

    Distance = R*Arccos(C)*Pi/180

    也就是:

    C = sin(LatA/57.2958)*sin(LatB/57.2958) + cos(LatA/57.2958)*cos(LatB/57.2958)*cos((MLonA-MLonB)/57.2958)

    Distance = R*Arccos(C) = 6371.004*Arccos(C) kilometer = 0.621371192*6371.004*Arccos(C) mile = 3958.758349716768*Arccos(C) mile

    在实际应用当中,一般是通过一个个体的邮政编码来查找该邮政编码对应的地区中心的经纬度,然 后再根据这些经纬度来计算彼此的距离,从而估算出某些群体之间的大致距离范围(比如酒店旅客的分布范围-各个旅客的邮政编码对应的经纬度和酒店的经纬度所 计算的距离范围-等等),所以,通过邮政编码查询经纬度这样一个数据库是一个很有用的资源。

    附:C#代码:

    private const double EARTH_RADIUS = 6378.137;//地球半径

    private static double rad(double d)

    {

    return d * Math.PI / 180.0;

    }

    public static double GetDistance(double lat1, double lng1, double lat2, double lng2)

    {

    double radLat1 = rad(lat1);

    double radLat2 = rad(lat2);

    double a = radLat1 - radLat2;

    double b = rad(lng1) - rad(lng2);

    double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +

    Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));

    s = s * EARTH_RADIUS;

    s = Math.Round(s * 10000) / 10000;

    return s;

    }

    展开全文
  • 地球是不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),地球中腰画一个与地轴垂直的大圆圈,使圈的每一点都#coding: utf-8#封装函数import mathdef cal_dis(latitude1, longitude1,latitude...

    [简介这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都

    #coding: utf-8

    #封装函数

    import math

    def cal_dis(latitude1, longitude1,latitude2, longitude2):

    latitude1 = (Math.PI/180)*latitude1

    latitude2 = (Math.PI/180)*latitude2

    longitude1 = (Math.PI/180)*longitude1

    longitude2= (Math.PI/180)*longitude2

    #因此AB两点的球面距离为:{arccos[sinb*siny+cosb*cosy*cos(a-x)]}*R

    #地球半径

    global R = 6378.1;

    d = math.acos(math.sin(latitude1)*math.sin(latitude2)+\

    math.cos(latitude1)*math.cos(latitude2)*math.cos(longitude2-longitude1))*R

    return d;

    }

    实现了根据输入两点经纬度,计算这两点距离的函数,但是在实际操作过程中,出现了报错:

    ValueError: math domain error

    下面是测试数据,这部分是正确的数据

    print cal_dis(39.762146, -104.98248,39.758066, -104.902431)

    print cal_dis(39.77455175, -105.01426466666665,39.76241472, -104.90343176000002)

    print "横向一个纬度的距离:",cal_dis(39, -104,40, -104)

    print "纵向一个经度的距离:",cal_dis(39, -105,39, -104)

    print cal_dis(39.772779500000006, -104,39.762146, -104)下面是会报错的数据集:

    print "error"

    print cal_dis(-6.174444, 106.829444, -6.174444, 106.82944400000001)

    print cal_dis(59.439339, 24.74682, 59.439339, 24.74682)

    print cal_dis(59.439339, 24.74682, 59.439339, 24.74682)

    print cal_dis(59.439339, 24.74682, 59.439339, 24.74682)

    print cal_dis(37.647464, -77.624973, 37.647464, -77.624973)经过搜索相关文章,最终发现是由于acos(x)中的x越界引起的。

    语法

    以下是acos()方法的语法:

    ? 1

    acos(x)

    注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用这个函数。

    参数

    x -- 这必须是在范围内的数字值-1到1,如果x大于1,则它会产生一个错误。

    返回值

    此方法返回的X反余弦,以弧度表示。[  double hypot(double x, double y) ...{      return sqrt(x * x + y * y);}double distance(double wd1, double jd1, double wd2, double jd2) ...{// 根据经纬度坐标

    解决方案:

    查看越界代码,使用repr将数字转化为字符串显示、查看

    temp = math.sin(latitude1)*math.sin(latitude2)+\

    math.cos(latitude1)*math.cos(latitude2)*math.cos(longitude2-longitude1)

    temp=math.sin(latitude1)*math.sin(latitude2)+\

    math.cos(latitude1)*math.cos(latitude2)*\

    math.cos(longitude2-longitude1)

    print temp,repr(temp)

    发现打印结果是:1.0 1.0000000000000002

    也就是实际的acos()函数的自变量是1.0000000000000002, 已经超出1的范围,由于精度问题只显示了1.0。

    if temp>1.0:

    print format(temp,".19e")

    可看出在科学计数法下的输出 >>1.0000000000000002220e+00

    推导公式本身出问题的机率很小,但计算机中的浮点数舍入误差会放大、缩小数据,从而溢出。因此代码改为:

    #coding: utf-8

    #封装函数

    import math

    def cal_dis(latitude1, longitude1,latitude2, longitude2):

    latitude1 = (math.pi/180.0)*latitude1

    latitude2 = (math.pi/180.0)*latitude2

    longitude1 = (math.pi/180.0)*longitude1

    longitude2= (math.pi/180.0)*longitude2

    #因此AB两点的球面距离为:{arccos[sina*sinx+cosb*cosx*cos(b-y)]}*R (a,b,x,y)

    #地球半径

    R = 6378.1

    temp=math.sin(latitude1)*math.sin(latitude2)+\

    math.cos(latitude1)*math.cos(latitude2)*math.cos(longitude2-longitude1)

    if repr(temp)>1.0:

    temp = 1.0

    d = math.acos(temp)*R

    return d;

    [php 根据两点的经纬度计算距离]

    展开全文
  • Microsoft C# Windows程序设计(下册)

    热门讨论 2011-08-05 10:28:13
    11.9 图像绘制 11.10 关于image类的更多内容 11.11 bitmap类 11.12 使用位图的hello world 11.13 阴影位图 11.14 二进制资源 11.15 动画 11.16 图像列表 11.17 图片框 第十二章 按钮、标签和...
  • C#.net_经典编程例子400

    热门讨论 2013-05-17 09:25:30
    311 7.9 程序控制 312 实例222 打开控制面板中的程序 313 实例223 添加程序托盘 314 实例224 不出现任务栏的程序 314 实例225 怎样调用外部的Exe文件 315 实例226 关闭外部已开启...
  • Nehe的OpenGL教程电子书

    2018-04-07 12:25:03
    一个教程的基础,我们添加了一个三角形和一个四边形。也许你认为这很简单,但你已经迈出了一大步,要知道任何OpenGL中绘制的模型都会被分解为这两种简单的图形。 读完了这一课,你会学到如何空间放置...
  • PT80-NEAT开发指南v1.1

    2014-06-24 18:38:34
    建立一个应用程序 ................................................................................................................................ 17 应用程序的关闭 .......................................
  • OPenGL编程书籍

    2013-07-22 16:38:01
    一个教程的基础,我们添加了一个三角形和一个四边形。也许你认为这很简单,但你已经迈出了一大步,要知道任何OpenGL中绘制的模型都会被分解为这两种简单的图形。 读完了这一课,你会学到如何空间放置模型...
  • 一个教程的基础,我们添加了一个三角形和一个四边形。也许你认为这很简单,但你已经迈出了一大步,要知道任何OpenGL中绘制的模型都会被分解为这两种简单的图形。 读完了这一课,你会学到如何空间放置...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    0039 在函数的定义中正确使用var 25 0040 如何实现类的转形 26 0041 如何实现数据加密与解密算法 27 0042 如何继承父类的方法 27 0043 如何实现函数重载 28 0044 类中多态的应用 28 0045 将函数作为...
  • 0039 在函数的定义中正确使用var 25 0040 如何实现类的转形 26 0041 如何实现数据加密与解密算法 27 0042 如何继承父类的方法 27 0043 如何实现函数重载 28 0044 类中多态的应用 28 0045 将函数作为...
  • 0039 在函数的定义中正确使用var 25 0040 如何实现类的转形 26 0041 如何实现数据加密与解密算法 27 0042 如何继承父类的方法 27 0043 如何实现函数重载 28 0044 类中多态的应用 28 0045 将函数作为...
  • 0039 在函数的定义中正确使用var 25 0040 如何实现类的转形 26 0041 如何实现数据加密与解密算法 27 0042 如何继承父类的方法 27 0043 如何实现函数重载 28 0044 类中多态的应用 28 0045 将函数作为...
  • 0039 在函数的定义中正确使用var 25 0040 如何实现类的转形 26 0041 如何实现数据加密与解密算法 27 0042 如何继承父类的方法 27 0043 如何实现函数重载 28 0044 类中多态的应用 28 0045 将函数作为...
  • 0039 在函数的定义中正确使用var 25 0040 如何实现类的转形 26 0041 如何实现数据加密与解密算法 27 0042 如何继承父类的方法 27 0043 如何实现函数重载 28 0044 类中多态的应用 28 0045 将函数作为...
  • C++MFC教程

    热门讨论 2013-05-21 13:37:15
    例如有两个窗口共用一个窗口过程代码,你窗口一按下鼠标时消息就会通过窗口一的句柄被发送到窗口一而不是窗口二。 5、示例:下面有一段伪代码演示如何窗口过程中处理消息 LONG yourWndProc(HWND hWnd,UINT ...
  • 40 理解声明:在函数调用中声明一个变量 41 理解声明:函数的原型化 42 理解#define编译器指令:定义常数 43 理解#define编译器指令:定义宏 44 理解存储类变量:自动变量 45 理解存储类变量:寄存器变量 46 理解...
  • 40 理解声明:在函数调用中声明一个变量 41 理解声明:函数的原型化 42 理解#define编译器指令:定义常数 43 理解#define编译器指令:定义宏 44 理解存储类变量:自动变量 45 理解存储类变量:寄存器变量 46 理解...
  • 40 理解声明:在函数调用中声明一个变量 41 理解声明:函数的原型化 42 理解#define编译器指令:定义常数 43 理解#define编译器指令:定义宏 44 理解存储类变量:自动变量 45 理解存储类变量:寄存器变量 46 理解...
  • 40 理解声明:在函数调用中声明一个变量 41 理解声明:函数的原型化 42 理解#define编译器指令:定义常数 43 理解#define编译器指令:定义宏 44 理解存储类变量:自动变量 45 理解存储类变量:寄存器变量 46 理解...
  • 如何画一个1/4 如何画箭头 如何避免屏幕闪烁 如何产生复杂线条 如何显示JPG和GIF图像 怎样定制通用打印对话框CPrintDialog来实现打印功能 如何简易实现所见即所得的打印 如何确定当前打印机的页面大小和方向 如何...
  • 这一节只讲述怎样在的菜单栏里添加菜单和图标。 1.新建Qt4 Gui Application 工程,将工程命名为MainWindow,其他选项默认 即可。 生成的窗口界面如下图。其中最上面的为菜单栏。 2.我们在Type Here 那里双击,...
  • flash shiti

    2014-03-14 10:32:41
    清楚当前位置或选定的关键时间线插入一个新的关键 20.Flash 菜单Modify→Group的快捷操作是? A. Ctrl+G B. Ctrl+Shift+G C. Ctrl+B D. Ctrl+Shift+P 21.Flash中如果想要测试完整的互动功能和动画功能...
  • 一个程序通常很简单,但最终要通过某些工具屏幕绘制出来。现在,这些工具已经存在并且很容易获取。1992年, Silicon Graphics 公司推出了OpenGL。现在它已经成为最广泛使用的图形应用编程接口(API)之一。...
  • python3.x Opencv Toturial

    2018-03-01 12:59:34
    为了一个小问 题就让他们去学习 C++ 这么深奥的语言几乎是不可能的。而 Python 的悄 然兴起给他们带来的希望,如果说 C++ 是 tex 的话,那 Python 的易用性 相当于 word。他们可以很快的看懂本书的所有代码,并可以...
  • 深入浅出 Koa 原理

    2021-01-08 14:41:42
    它其实是proto新建一个与Request和Response的方法名一样的函数,然后执行这个函数的时候,这个函数在去Request和Response上去找对应的方法并执行。 简单来个栗子 <pre><code> javascript var ...

空空如也

空空如也

1 2 3
收藏数 58
精华内容 23
关键字:

怎样在函数上画一个圆