计算两个坐标点之间的球面距离

def calcDistance(t1, t2):'''计算两个坐标点之间的球面距离Parameters----------t1: A点坐标[lat,Lon]t2: B点坐标[lat,Lon]Returns-------distance: distance(m)'''if float(t1[0]) - float(t2[0]) == 0 and float(t1[1]) - float(t2[1]) == 0:distance = 0else:RA = 6378.140  # 赤道半径 (km)RB = 6356.755  # 极半径 (km)flatten = (RA - RB) / RA  # 地球扁率rad_lat_A = radians(float(t1[0]))rad_lng_A = radians(float(t1[1]))rad_lat_B = radians(float(t2[0]))rad_lng_B = radians(float(t2[1]))pA = atan(RB / RA * tan(rad_lat_A))pB = atan(RB / RA * tan(rad_lat_B))xx = acos(sin(pA) * sin(pB) + cos(pA) * cos(pB) * cos(rad_lng_A - rad_lng_B))if xx == 0:xx = 0.001c1 = (sin(xx) - xx) * (sin(pA) + sin(pB)) ** 2 / cos(xx / 2) ** 2c2 = (sin(xx) + xx) * (sin(pA) - sin(pB)) ** 2 / sin(xx / 2) ** 2dr = flatten / 8 * (c1 - c2)distance = RA * (xx + dr) * 1000else:c1 = (sin(xx) - xx) * (sin(pA) + sin(pB)) ** 2 / cos(xx / 2) ** 2c2 = (sin(xx) + xx) * (sin(pA) - sin(pB)) ** 2 / sin(xx / 2) ** 2dr = flatten / 8 * (c1 - c2)distance = RA * (xx + dr) * 1000return distance

计算任意两个向量之间的夹角

def angle(v1, v2):'''计算任意两个向量之间的夹角Parameters----------v1: 向量v1两点坐标[[x1,y1],[x2,y2]]v2: 向量v2两点坐标[[x3,y3],[x4,y4]]Returns-------included_angle: 夹角,区间为0-180'''dx1 = float(v1[1][0]) - float(v1[0][0])dy1 = float(v1[1][1]) - float(v1[0][1])dx2 = float(v2[1][0]) - float(v2[0][0])dy2 = float(v2[1][1]) - float(v2[0][1])angle1 = math.atan2(dy1, dx1)angle1 = int(angle1 * 180/math.pi)angle2 = math.atan2(dy2, dx2)angle2 = int(angle2 * 180/math.pi)if angle1*angle2 >= 0:included_angle = abs(angle1-angle2)else:included_angle = abs(angle1) + abs(angle2)if included_angle > 180:included_angle = 360 - included_anglereturn included_angle

计算多个坐标点构成的多变形的面积

def st_area(wkt_list):'''计算多个坐标点构成的多变形的面积Parameters----------wkt_list: 坐标点集。格式:[[lng1, lat1],[lng2, lat2],[lng3, lat3],[lng1, lat1]]  不闭合的也可以Returns-------区域面积: 单位:平方千米'''# 弧度radian = pi / 180.0# 地球半径radius = 6378137# 地球弧度earth_radian = radius * radian# 面积area = 0length = len(wkt_list)if length < 3 :return 0for index in range(0,length-1):front_point = wkt_list[index]rear_point = wkt_list[index+1]front_sector = front_point[0] * earth_radian * cos(front_point[1] * radian)front_line = front_point[1] * earth_radianrear_sector = rear_point[0] * earth_radian * cos(rear_point[1] * radian)area += (front_sector * rear_point[1] * earth_radian - rear_sector * front_line)wkt_rear = wkt_list[length-1]wkt_front = wkt_list[0]wkt_rear_sector = wkt_rear[0] * earth_radian * cos(wkt_rear[1] * radian)wkt_rear_line = wkt_rear[1] * earth_radianwkt_front_sector = wkt_front[0] * earth_radian * cos(wkt_front[1] * radian)area += wkt_rear_sector * wkt_front[1] * earth_radian - wkt_front_sector * wkt_rear_linereturn 0.5 * abs(area)/1000000def format_wkt(wkt):point_list = wkt.split(',')wkt_list=[]for point in point_list:lng,lat = point.split(' ')wkt_list.append([float(lng),float(lat)])return wkt_list

测试:

#计算面积(平方千米)
wkt='120.354031 36.087167,120.354115 36.087909,120.354957 36.087826,120.355799 36.087743,120.356641 36.08766,120.35714559998833 36.08761020000115,120.359166 36.087411,120.35911699999977 36.086375333328434,120.359093 36.085858,120.359056 36.085081,120.359019 36.084304,120.359023 36.0843,120.358994 36.083605,120.358979 36.083257,120.358935 36.082214,120.358951 36.082169,120.359095 36.080996,120.359085 36.080979,120.359133 36.080605,120.359378 36.080598,120.36050766667202 36.080597,120.361073 36.080597,120.36192 36.080596,120.362767 36.080595,120.363676 36.080596,120.364585 36.080597,120.36519033332759 36.080597,120.366402 36.080598,120.366459 36.080194,120.366522 36.079716,120.366638 36.078857,120.366675 36.078636,120.366683 36.078618,120.366666 36.078496,120.361055 36.077322,120.363937 36.071039,120.3548 36.071238,120.353963 36.071355,120.353954 36.071359,120.353139 36.071297,120.35262905586639 36.07125883240227,120.351917 36.071205,120.35151 36.071174,120.35120494413361 36.071151167597726,120.34988 36.071051,120.348912 36.070956,120.347944 36.070862,120.347662 36.070347,120.34738 36.069832,120.346704 36.069321,120.346027 36.06881,120.344534 36.070062,120.34395900000082 36.070923999998776,120.343767 36.071211,120.343384 36.071786,120.342174 36.0723075,120.341771 36.072481,120.340964 36.072829,120.34097033333336 36.07396633333873,120.340973 36.074535,120.340978 36.075388,120.340983 36.076241,120.340987 36.077919,120.340989 36.078758,120.340991 36.079597,120.340987 36.079605,120.3410005 36.082922,120.341002 36.083396,120.341006 36.084344,120.34101 36.085291,120.341014 36.086239,120.341871 36.086075,120.342788 36.085976,120.342706 36.086005,120.341923 36.086419,120.341204 36.086954,120.340721 36.087217,120.340238 36.08748,120.339847 36.087724,120.339152 36.088059,120.338652 36.088429,120.338151 36.088799,120.337816 36.089584,120.33748 36.090369,120.337145 36.091154,120.337068 36.092,120.337404 36.092892,120.33774 36.093785,120.338075 36.094677,120.338411 36.09557,120.338747 36.096462,120.339083 36.097354,120.339418 36.098247,120.339754 36.099139,120.34009 36.100032,120.340426 36.100924,120.340761 36.101817,120.341097 36.102709,120.341701 36.102609,120.342434 36.102127,120.343076 36.101704,120.343718 36.101281,120.344359 36.100858,120.345001 36.100435,120.345645 36.100004,120.34629 36.099573,120.347213 36.09934,120.348136 36.099107,120.34906 36.098874,120.349983 36.098641,120.350906 36.098408,120.351509 36.098259,120.352112 36.098109,120.352883 36.097884,120.353653 36.09766,120.354424 36.097435,120.355194 36.09721,120.355174 36.097058,120.355058 36.096075,120.354943 36.095093,120.354827 36.09411,120.354712 36.093128,120.354596 36.092145,120.354481 36.091163,120.354365 36.09018,120.35425 36.089198,120.354134 36.088215,120.354122 36.088185,120.354028 36.087338,120.354031 36.087167'
print(round(st_area(format_wkt(wkt)),2))

输出:
5.41

计算两坐标点球面距离、两向量夹角及多边形面积相关推荐

  1. matlab求两向量夹角_初学讲义之高中数学十四:向量的数量积

    上篇讲了向量的基本概念和简单的加减运算,这部分的数学运算与几何图形变换之间的联系是非常直观的,理解起来非常容易 本篇讲的内容在数学运算与几何图形变换之间的联系不那么直观,需要花功夫反复琢磨运算的数学意 ...

  2. matlab求两向量夹角_高中数学《平面向量的数量积》说课稿

    高中数学<平面向量的数量积>说课稿 作为一位无私奉献的人民教师,有必要进行细致的说课稿准备工作,借助说课稿可以让教学工作更科学化.那么写说课稿需要注意哪些问题呢?以下是小编为大家收集的高中 ...

  3. matlab求两向量夹角_高等数学之向量代数与空间解析几何知识点与题型总结

    向量代数与空间解析几何知识点: (1)向量代数知识点 (2)两平面夹角与两直线夹角公式 两平面夹角和两直线夹角公式 (3)点到直线的距离公式 点到直线的距离 (4)常见二次曲线 常见二次曲线 题型一: ...

  4. c++做一个计算两向量夹角的程序

    请测试,结果正好是90度#include<iostream> #include<cmath> using namespace std; #define PI 3.1415926 ...

  5. matlab求两向量夹角_高考数学解题技巧:专题21 平面向量中最值、范围问题高中数学黄金解题模板...

    ↑ 点击上方"红色笔记"关注我们 高中各科解题技巧下载  回复数字:800009 高考数学解题技巧:专题24 数列求和方法高中数学黄金解题模板 高考数学解题技巧:专题26 含参不等 ...

  6. matlab求两向量夹角_【求精干货】高中数学知识点总结归纳高一学生必须掌握

    高中数学高考知识点总结高一必高中数学高一的学生离高考还有两年的时间,别看这两年感觉很长,其实时间一晃就过了,高中数学学习成绩不太好的同学该加油好好学习了.别等到最后一年累死累活的搞,还不一定有效果,今 ...

  7. matlab求两向量夹角_Matlab-自动化控制系统设计4频域分析

    本文内容:系统的频域分析 操作环境:matlab2019b 简单说一下频域法,时域分析法可以用来测试控制系统的性能,但是高阶系统的时域特性很难确定,科学家们就通过频率特性间接研究系统的动态响应,避免了 ...

  8. matlab求两向量夹角_MATLAB教程-台大郭彦甫-第十二节,含练习答案

    12-线性方程式与线性系统 一.Linear equation(线性方程式) (一)Linear equation 1.Suppose you are given linear equations: ...

  9. 已知法线,两向量夹角和一向量,求另一向量

    /// <summary>        /// 获取垂直法线的平面的一条线,P2        /// </summary>        /// <param nam ...

最新文章

  1. 深度学习解决多视图非线性数据特征融合问题
  2. 移动web开发ajax缓存操作
  3. Linux ifconfig命令
  4. 一种压缩图片的方法---Machine learning 之 K-Means
  5. AI2想从常识测试开始让AI理解物理世界,数据集已公布
  6. Atititjs javascript异常处理机制与java异常的转换.js exception process
  7. 客快物流大数据项目(二十九):下载CDH的安装包
  8. 百度网盘超大容量100t、500t操作方法,轻松扩容如此简单,扩容工具,占位文件,免虚拟机
  9. 机器学习|切比雪夫不等式(3sigma原则来源)|10mins入门|概统学习笔记(十)
  10. Mathmatica的学习打卡day 16
  11. Linux系统开机显示BusyBox v1.22.1 built-in shell(ash) 解决方法
  12. 解决百度网盘下载慢的方案
  13. MATLAB应用实战系列(六十)-MATLAB数学建模常用的四大模型
  14. ipad2018电池测试软件,苹果ipad 2018评测
  15. 安装一个apk引起的无法开机。
  16. 阿里云IoT投入智物智造战略 三年赋能10亿设备改造10万家数字工厂
  17. MTCNN源码详细解读(1)- PNet/RNet/ONet的网络结构和损失函数
  18. HihoCoder 1830 Cheat ICPC2018 北京网络赛
  19. 在windows上通过vnc实现远程虚拟界面控制jenson tx2
  20. app地推方案 地推活动策划方案 地推方案怎么写 地推吸粉方案

热门文章

  1. slowfast代码实现和论文理解
  2. rust php 扩展,在PHP程序中使用Rust扩展的方法_php技巧
  3. Android Instant App调研报告
  4. APUE读书笔记-第十章-信号
  5. 泛微OA使用笔记-测试
  6. sql 取第一条数据
  7. 讲讲语言转换程序:将一种语言转换为另一种语言的程序
  8. ffmpeg + cuda(cuvid) 硬解码+像素格式转换(cpu主导)实战
  9. debian安装 Debian的一些常用命令
  10. 经历了几天台湾地震的影响,MSN终于可以上了~~~