批量计算两经纬度点间的距离、方位角、中点坐标

本文介绍了一种无需编程和专业GIS软件即可批量计算两点间经纬度距离的方法。通过使用小O地图EXE版,可以轻松地导入和导出数据,并进行高效计算。

前言

如何批量计算两点间距离,下面介绍一个简单的方法。不需要编写代码,不需要专业GIS软件。下面详细介绍过程。

首先,在EXCEL软件中整理需要计算的经纬度坐标,如下图格式。

计算过程

新建任务

启动小O地图EXE版。

新建“计算两点坐标”任务

导入数据

选择导入数据菜单,批量导入事先准备的数据

导入设置选择数据所在行列号

可设置导入开始行号,可选择导入列,带颜色的为必须设置的列。

请按要求设置,否则影响计算结果。

设置完毕点击确

这道题需要知道一些地理计算的知识,包括经纬度和平面坐标的转换、地球半径等等。下面是一个可能的解法,仅供参考。 ``` #include <iostream> #include <cmath> using namespace std; const double R = 6371000; // 地球半径,单位是米 // 经纬度转平面坐标 void ll2xy(double lat, double lon, double& x, double& y) { x = R * cos(lat) * lon; y = R * lat; } // 平面坐标经纬度 void xy2ll(double x, double y, double& lat, double& lon) { lat = y / R; lon = x / (R * cos(lat)); } // 计算两点距离 double distance(double lat1, double lon1, double lat2, double lon2) { double x1, y1, x2, y2; ll2xy(lat1, lon1, x1, y1); ll2xy(lat2, lon2, x2, y2); double dx = x2 - x1; double dy = y2 - y1; return sqrt(dx * dx + dy * dy); } int main() { double lat1 = 31.2314; // ab中点纬度 double lon1 = 121.4701; // ab中点经度 double lat2 = 31.2316; // cd中点纬度 double lon2 = 121.4705; // cd中点经度 double len = 6; // ab长度,单位是米 double dist = distance(lat1, lon1, lat2, lon2); // 计算cd和ab中点距离 double angle = atan2(lon2 - lon1, lat2 - lat1); // 计算cd和ab中点方位角 double lat3 = lat1 + len / (2 * R); // 计算ac线段中点的纬度 double lon3 = lon1 + len / (2 * R * cos(lat3)); // 计算ac线段中点的经度 double lat4 = lat3 + dist / (2 * R) * cos(angle + M_PI / 2); // 计算ad线段中点的纬度 double lon4 = lon3 + dist / (2 * R) * sin(angle + M_PI / 2) / cos(lat4); // 计算ad线段中点的经度 double x1, y1, x2, y2, x3, y3, x4, y4; ll2xy(lat1, lon1, x1, y1); ll2xy(lat2, lon2, x2, y2); ll2xy(lat3, lon3, x3, y3); ll2xy(lat4, lon4, x4, y4); double dx = x3 - x1; double dy = y3 - y1; double ux = dx / len; double uy = dy / len; double vx = -uy; double vy = ux; double ax = x3 - ux * len / 2; double ay = y3 - uy * len / 2; double bx = x3 + ux * len / 2; double by = y3 + uy * len / 2; double cx = ax + vx * dist / 2; double cy = ay + vy * dist / 2; double dx = bx + vx * dist / 2; double dy = by + vy * dist / 2; double lat_a, lon_a, lat_b, lon_b, lat_c, lon_c, lat_d, lon_d; xy2ll(ax, ay, lat_a, lon_a); xy2ll(bx, by, lat_b, lon_b); xy2ll(cx, cy, lat_c, lon_c); xy2ll(dx, dy, lat_d, lon_d); cout << "(" << lat_a << ", " << lon_a << ")" << endl; cout << "(" << lat_b << ", " << lon_b << ")" << endl; cout << "(" << lat_c << ", " << lon_c << ")" << endl; cout << "(" << lat_d << ", " << lon_d << ")" << endl; return 0; } ``` 这个程序中用到了经纬度和平面坐标的转换、计算两点距离计算方位角等等地理计算的知识。最终输出的是abcd四个顶的纬度和经度。注意这里的坐标系是平面坐标系,与实际地球表面的形状不完全一致,但可以近似地表示一个小区域的形状。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值