经纬度筛查距离计算 v1.0
运行环境:windows 7/8/10
编译写语言go语言
编译工具GoLand
llnet
2021-03-17
1.本软件使用go语言编写;
2.使用需求:因工作需要,经常要筛选点位,特此在业余时间搞了个小工具;
3.功能:根据事例可以计算两点经纬度距离,十进制经纬度,也可以进行批量执行。
根据事例语法:
file1 file2 d 参数 name
文件1 文件2 范围(米) 参数 导出文件名

语法:文件1 文件2 范围(米) 参数(n/a/all)
eg1: file1.txt file2.txt 200000 n 按指定范围导出到站点名称.txt
eg2: file1.txt file2.txt 200000 a 按指定范围导出到outfile.txt
*声明: 本程序在使用过程中有可能有bug,或者带来数据丢失风险,请备份重要数据后使用,使用本程序所造成的一切后果,与本作者无关。*
部分源代码: //经纬度
func latitude_longitude_distance(lon1, lat1, lon2, lat2 float64) (distance float64) {
//赤道半径(单位m)
//const EARTH_RADIUS = 6378137
//极地半径(单位m)
//const EARTH_RADIUS = 6356755
//地球平均半径
const EARTH_RADIUS = 6371004
rad_lat1 := rads(lat1)
rad_lon1 := rads(lon1)
rad_lat2 := rads(lat2)
rad_lon2 := rads(lon2)
if rad_lat1 < 0 {
rad_lat1 = math.Pi/2 + math.Abs(rad_lat1)
}
if rad_lat1 > 0 {
rad_lat1 = math.Pi/2 - math.Abs(rad_lat1)
}
if rad_lon1 < 0 {
rad_lon1 = math.Pi*2 - math.Abs(rad_lon1)
}
if rad_lat2 < 0 {
rad_lat2 = math.Pi/2 + math.Abs(rad_lat2)
}
if rad_lat2 > 0 {
rad_lat2 = math.Pi/2 - math.Abs(rad_lat2)
}
if rad_lon2 < 0 {
rad_lon2 = math.Pi*2 - math.Abs(rad_lon2)
}
x1 := EARTH_RADIUS * math.Cos(rad_lon1) * math.Sin(rad_lat1)
y1 := EARTH_RADIUS * math.Sin(rad_lon1) * math.Sin(rad_lat1)
z1 := EARTH_RADIUS * math.Cos(rad_lat1)
x2 := EARTH_RADIUS * math.Cos(rad_lon2) * math.Sin(rad_lat2)
y2 := EARTH_RADIUS * math.Sin(rad_lon2) * math.Sin(rad_lat2)
z2 := EARTH_RADIUS * math.Cos(rad_lat2)
d := math.Sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) + (z1-z2)*(z1-z2))
theta := math.Acos((EARTH_RADIUS*EARTH_RADIUS + EARTH_RADIUS*EARTH_RADIUS - d*d) / (2 * EARTH_RADIUS * EARTH_RADIUS))
distance = theta * EARTH_RADIUS
return
}
© 版权声明
THE END
暂无评论内容