private final static double DEF_PI = 3.14159265359; // PI private final static double DEF_PI180 = 0.01745329252; // PI/180.0 private final static double DEF_R = 6370693.5; // radius of earth /** * 根据圆心、半径算出经纬度范围 * * @param lon 圆心经度 * @param lat 圆心纬度 * @param r 半径(米) * @return double[4] 南侧经度,北侧经度,西侧纬度,东侧纬度 */ public static double[] getRange(double lon, double lat, int r) { double[] range = new double[4]; // 角度转换为弧度 double ns = lat * DEF_PI180; double sinNs = Math.sin(ns); double cosNs = Math.cos(ns); double cosTmp = Math.cos(r / DEF_R); // 经度的差值 double lonDif = Math.acos((cosTmp - sinNs * sinNs) / (cosNs * cosNs)) / DEF_PI180; // 保存经度 range[0] = lon - lonDif; range[1] = lon + lonDif; double m = 0 - 2 * cosTmp * sinNs; double n = cosTmp * cosTmp - cosNs * cosNs; double o1 = (0 - m - Math.sqrt(m * m - 4 * (n))) / 2; double o2 = (0 - m + Math.sqrt(m * m - 4 * (n))) / 2; // 纬度 double lat1 = 180 / DEF_PI * Math.asin(o1); double lat2 = 180 / DEF_PI * Math.asin(o2); // 保存 range[2] = lat1; range[3] = lat2; return range; } /** * 计算地球面上两上坐标点之间距离 * @param lon1 位置1经度 * @param lat1 位置1纬度 * @param lon2 位置2经度 * @param lat2 位置2纬度 */ public static double getLongDistance(double lon1, double lat1, double lon2, double lat2) { double ew1, ns1, ew2, ns2; double distance; // 角度转换为弧度 ew1 = lon1 * DEF_PI180; ns1 = lat1 * DEF_PI180; ew2 = lon2 * DEF_PI180; ns2 = lat2 * DEF_PI180; // 求大圆劣弧与球心所夹的角(弧度) distance = Math.sin(ns1) * Math.sin(ns2) + Math.cos(ns1) * Math.cos(ns2) * Math.cos(ew1 - ew2); // 调整到[-1..1]范围内,避免溢出 if (distance > 1.0) distance = 1.0; else if (distance < -1.0) distance = -1.0; // 求大圆劣弧长度 distance = DEF_R * Math.acos(distance); return distance; } public static void main(String args[]) { double x1 = 13.957503; double y1 = 49.77837; double r[] = getRange(x1, y1, 100000); System.out.println(r[0]); System.out.println(r[1]); System.out.println(r[2]); System.out.println(r[3]); System.out.println(getLongDistance(x1, y1, r[0], y1)); System.out.println(getLongDistance(x1, y1, r[1], y1)); System.out.println(getLongDistance(x1, y1, x1, r[2])); System.out.println(getLongDistance(x1, y1, x1, r[3])); }
相关推荐
提供经纬度和距离计算经纬度
java:给定一个经纬度,求R半径内的经纬度范围,并随机出一个经纬度,按照实际情况计算,使用三角公式,余弦,等等算法
根据经纬度来计算地球球面上两点之间的球面距离~
设两个已知点(A、B点 )经纬度为(α1,β1),(α2,β2),其距离为D,地球半径为R, 行距为H,第三点的经纬度为(α3,β3),向左时θ=3π/ 2,向右时θ=π/ 2 第三点:距离前述已知两点(A、B点)组成的直线...
最近项目上有这样的需求,需要依据设备的经纬度坐标计算距离及角度。经验证后效果较好,并分享。 1 经纬度转换距离代码 #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'Seven' import math # 计算...
软件介绍: ...本程序能够根据经纬度测量两点之间的距离,精确度很高,本软件考虑了球南北极半径不等于赤道半径的现实情况,经过测距计算,输入A、B两点的经度纬度,即可快速计算出两点间的距离KM。
如果以0度经线为基准,那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离(这里忽略地球表面地形对计算带来的误差,仅仅是理论上的估算值)。设第一点A的经纬度为(LonA, LatA),第二点B的经纬度为...
根据三个点的经度纬度值, 计算出三点圆的半径
图1中,O为地心,OD为地球半径R, A为雷达架设点,AD为雷达架设高度h,雷达探测水平面为AF,B为雷达探测的任意一点。 雷达探测极坐标系的三个参数为r,θ,δ。 雷达探测拟直角坐标系的三个参数为X,Y,H,其中H为距...
微信小程序-实现电子围栏-半径-经纬度-是否在围栏内-画圆等
Java 计算两个GPS坐标点之间的距离 JAVA 计算两个经纬度关系计算 - FALCON - 斑驳...3. 6378.137为地球半径,单位为千米; 计算出来的结果单位为千米。 从google maps的脚本里扒了段代码,是用来计算两点间经纬度距离
因为工作需要,经常要根据经纬度测量两点之间的距离,而网络上的各种小工具并不精确,没有考虑地球南北极半径不等于赤道半径的现实情况,本着严谨的态度,自己开发了一个MFC工具,经过测距计算,还是不错的,分享给...
经纬度转米的小函数,其中半径为月球半径。可用于将DEM的经纬度单位转为米单位,供研究使用。 压缩包内为一个cal.h文件和一个cal.cpp文件。
最后,利用二者的经纬度坐标,计算每家上市公司与孔庙之间的距离,并基 于此获取上市公司注册地一定半径范围内孔庙数量(100km、200km、300km ),Confu 值越大表示企业所受到儒家文化影响程度越高。 3.资料包含:...
python-geo 一个简单的python API,可找到经纬度半径范围内的位置。 该项目显示了如何在Google地图上导航以及如何根据地图的中心显示先前在mongo db上添加的点。 要完全运行此项目,请确保已安装PyMongo,Bottle和db...
在echarts2的地图展示中,国内的地级市不全,现在整理了全国所有地级市的坐标值,并导出Oracle的sql数据库导入格式,方便大家使用。
轴线车(即中大件运输平板车)转弯半径计算程序,界面简洁,使用简单,可快速计算出车辆所需最小转弯半径。厂矿道路设计必备助手
车辆转弯半径计算公式,图文并茂,图面清晰,操作简单。
JAVA应用程序 输入半径及横、纵坐标画圆,可清除画布
椭球曲率半径计算,平均地球曲率半径,卯西圈平均曲率半径