java中经纬度使用与相关工具类

经纬度互换

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

根据一个经纬度,计算出当前经纬度的半径,可用于打卡,场合。工具类

/**
 * 经纬度,围栏相关工具类
 * 根据一个经纬度,计算出当前经纬度的半径,可用于打卡,场合。
 * @author zhangtonghao
 * @create 2022-03-17 14:37
 */
public class FenceUtils {

    //圆周率
    private static final double PI = 3.1415926;

    /**
     * 计算地球上任意两点(经纬度)距离
     *
     * @param long1 第一点经度
     * @param lat1  第一点纬度
     * @param long2 第二点经度
     * @param lat2  第二点纬度
     * @return 返回距离 单位:米
     */
    public static int distanceByLongNLat(double long1, double lat1, double long2, double lat2) {
        double a, b, R;
        //地球半径
        R = 6378137;
        lat1 = lat1 * Math.PI / 180.0;
        lat2 = lat2 * Math.PI / 180.0;
        a = lat1 - lat2;
        b = (long1 - long2) * Math.PI / 180.0;
        double d;
        double sa2, sb2;
        sa2 = Math.sin(a / 2.0);
        sb2 = Math.sin(b / 2.0);
        d = 2 * R * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1) * Math.cos(lat2) * sb2 * sb2));
        return (int)d;
    }

    /**
     * 根据经纬度和半径计算经纬度范围
     *
     * @param raidus 单位米
     * @return minLat, minLng, maxLat, maxLng
     */
    public static double[] getAround(double lat, double lon, int raidus) {

        Double latitude = lat;
        Double longitude = lon;

        Double degree = (24901 * 1609) / 360.0;
        double raidusMile = raidus;

        Double dpmLat = 1 / degree;
        Double radiusLat = dpmLat * raidusMile;
        Double minLat = latitude - radiusLat;
        Double maxLat = latitude + radiusLat;

        Double mpdLng = degree * Math.cos(latitude * (PI / 180));
        Double dpmLng = 1 / mpdLng;
        Double radiusLng = dpmLng * raidusMile;
        Double minLng = longitude - radiusLng;
        Double maxLng = longitude + radiusLng;
        return new double[]{minLat, minLng, maxLat, maxLng};
    }
}

本文链接:https://www.dzdvip.com/30979.html 版权声明:本文内容均来源于互联网。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 395045033@qq.com,一经查实,本站将立刻删除。
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年4月2日 12:21
下一篇 2022年4月2日 12:28

相关推荐

  • 八国联军是哪八国(八国联军做了哪些坏事)

    “是指1900年(光绪二十六年)以军事行动侵入清朝的大英帝国(英)、美利坚合众国(美)、法兰西第三共和国(法)、德意志帝国(德)、俄罗斯帝国(俄)、大日本帝国(日)、奥匈帝国(奥)、意大利王国(意)的八国联合军队。 八国联军做了哪些坏事 八国联军,专指1900年武力入侵大清王朝的外国联合军队,八个国家指的是:英国、美国、法国、德国、俄罗斯、日本、意大利、奥匈帝国。 八国联军主力是哪国? 八国联军包括海军、海军陆战队、陆军,总人数大约5万人。 开始时,投入兵力3万人,由英国海军中将西摩尔率领。 八个国家中,日本派遣的兵力人数最多,达到20300人;第二名是俄罗斯,派遣的兵力达到12400人。 第三名是英国,派遣的兵力是10000人,以印度雇佣兵为主力。 派遣人数最少的是意大利,只有80人。 八国联军共委派了两任总司令:第一任总司令是英国海军中将西摩尔;第二任是德国陆军元帅瓦德西。 八国联军进入中国后,发生了什么事情? 八国联军首领 八国联军肆意杀人 最先提出镇压义和团的是俄罗斯,后来,八国联合公开目的就是“剿灭义和团”。 八国联军进入北京后,随意指人强说是义和团,然后不容置疑、肆意滥杀。 位于西四北太平仓胡同的庄亲王府,侵略军大肆搜刮后,放火烧光,当场在大火中丧生的人员高达1800人。 德国军队命令:只要是中国人,一律格杀勿论! 法国军队把一群中国人赶进死胡同,用机枪连续扫射15分钟。 八国联军为了取乐、留做纪念,对屠杀中国人的场景从不同角度照相,有时候也用来宣传,以恐吓中国百姓。 八国联军侵华 八国联军蹂躏女人 北京城被攻破了,枪炮轰击声中,总是夹杂着妇女小孩的呼救声。 八国联军把逮到的妇女,不管年龄老少、也不分身体强弱,全部带到诸裱褙胡同,放进不同的房屋里安定下来,作为官妓。 为了防止逃跑,胡同西头堵死,只留下东头作为出入之门,并且派人监视、看管。 八国军人自由进出、随心所欲、任意糟蹋这些可怜的中国女人。 大学士倭仁的妻子90岁,也没有躲过侵略军的残酷侮辱。 同治皇后父亲崇绮的妻子女儿,被侵略者囚禁在天坛,遭到八国联军30多人轮奸。终于被放回家,实在不能容忍心头之痛,全家自杀。崇绮本人服毒自尽。 漫画八国联军 八国联军践踏主权 1900年8月28日,八国联军竟然在中国北京举行阅兵活动,公然践踏中华主权。 天安门广场金水桥前,集结了八国军队。他们以本国军队的礼仪,通…

    2022年7月21日
    83
  • Java 面向对象的基础知识,你确定不了解一下吗?

    什么是面向对象? 面向对象是把问题按照一定规则划分为独立的对象,通过调用对象解决问题;面向对象的特点有封装性,继承性和多态性。 目录 ​​​​​​ 1.类与对象 类是具有共同特征的某类事物的抽象,对象是具体的事物; 1.类的定义 class 类名{ 成员变量; 成员方法; } 2.创建对象及使用方法 类名 对象名=new 类名(); 对象名.成员方法(); 3.封装性 封装的目的是保护内部数据信息,快速访问; public class teachers { private String name; private String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } } 4.访问权限 访问范围 privatre default protected public 同一类 yes yes yes yes 同包不同类 yes yes yes 不同包子类 yes yes 全局 yes 5.构造方法 a.名称与类名相同; b.无返回值类型声明,且无返回值; class Rectangle{ private int width,length; public Rectangle(int width,int length) { this.width=width; this.length=length; } } c.重载 方法名相同,成员变量不同 class Rectangle{ private int width,length; public Rectangle(int width) { this.width=width; } public Rectangle(int width,int length) { this.width=width; this.length=length; } } 6.this关键字 成员变量与局部变量重名; 7.static关键字 静态属性或全局属性,通过类名直接访问; 例题: B1–股票类(封装)返回 (时间限制:10…

    2022年7月7日
    10
  • 苹果手机拍照不好看?学会这4个拍摄技巧,效果堪比大片

    分享最实在的玩机技巧,洞察最前沿的科技资讯!大家好,这里是手机科技园! 很多人都说苹果手机拍照不好看,那么是因为你还不会设置,今天就来教大家4个iPhone相机拍摄技巧,拍出的效果堪比大片。 一、对焦和曝光我们打开iPhone相机拍照,用手指点击屏幕上的任意位置,就会出现一个黄色的“矩形框”,这是用来对焦的;旁边还附带一个“小太阳”,是用来调节曝光度的。 锁定对焦长按矩形框即可锁定对焦,无论你怎么移动相机,对焦位置都不会变。 滑动变焦相机底部会有个变焦按钮,长按滑动可以自由变焦,不过画质会受影响哦。 高曝光向上拖动“小太阳”,即可增加曝光,适合夜晚拍摄,让画面变亮。 低曝光向下拖动“小太阳”,即可较少曝光,适合强光拍摄,让画画变暗。 二、舞台聚光灯如果你拍人物照的话,切换到「人像」模式,这里有几种不同的场景,找到「舞台光」效果,将光圈对准人物,调整到合适的距离,立即按下快门键拍照。 下面我们打开相册,查看照片,左上角有“个人像”标识,画面背景变成黑色了,头顶上就像有一束光撒下来,还是非常有感觉的。 三、拍摄重影大片打开相机拍照,点击顶部的小圆点,开启实况模式,将镜头对准物体,在按下快门键的一瞬间,立刻点击底部的「1x」,画面放大一倍,此时保持相机稳定3秒。 接下来打开这张照片,单指向上滑动,可以选择效果,切换到「长曝光」,我们将会得到一张重影大片!这个方法同时适合拍摄人物。 四、照片制作视频平时喜欢自拍,相册中一定有很多自己的美照吧?可以利用「清爽视频编辑器」,将照片一键制作成特效视频,里面的视频模板种类非常多。 不需要你有任何的剪辑技术,选择自己喜欢的模板,直接添加照片,就会生成视频,每个视频中都有固定的照片数量,按要求添加即可。 写在后面: 今天的内容就到这里了,觉得不错的话可以分享出去,这样能够帮助到更多的人哦。 苹果手机拍照不好看?学会上面这4个拍摄技巧,效果堪比大片!

    2021年7月10日
    149
  • 信息发布广告投放的技巧有哪些?

    信息发布广告投放的技巧有哪些?【发软文用TM媒介】作为近几年迅速崛起的营销推广渠道,信息流广告的推广效果是有目共睹的。有别于单一搜索引擎的广告位展示,信息流广告的渠道和方式更加多样化和丰富,更有利于多方位的广告展示。于是今天小编就给大家讲一下信息流广告投放的技巧有哪些。明确投放目的做广告,一般都要求有明确的投放目的。总体上可分为4种目标:品牌,推广,曝光,转化。商标:培养商标的高度和声誉,开发商标 slogan。 举例来说:钻石恒久不变,一颗永传促销:热点营销,价格战,低价导向。暴露:传播快, CTR提高,一般以活动或热点传播为主。举例来说:网易云地铁广告,没有标准的文案,却成为热点传播。转化性:以直接购买或订购为主,一般说明功能达到转化性目的。比如:怕火,喝王老吉酒。第二,解析推广目标第三,理解市场需求我们必须明确自己的定位是否符合市场的需求。 可从两方面考虑:产业:了解产业特征;分析竞争对手,找出优势/劣势,找到推广的切入点。业务:站在用户的角度,找准用户的需求点;产品页面呈现,介绍和引导清楚。了解行业现状,竞品情况,客户的产品,优势和劣势,做到知己知彼,才能百战不殆!消费者购买过程分析主要有五个阶段:需求产生、信息收集、方案评估、购买决策和购买后行为分析。 按照购买流程,消费者可以分为三类:潜在用户、行业目标用户和品牌忠诚度用户。顾客处于不同的购买过程阶段,对产品的关注程度不同,因而对产品的广告创意也有不同的要求。对消费者进行分类归纳另外,除了按照第四步中购买过程将消费者分为三大类外,还可以根据消费者的群体属性进行分类:年龄、性别、地域。创作需要根据消费者的群体特征,揣摩其消费心理与需求,用文字与设计触动消费者的欲望。上面就是关于信息流广告投放技巧的知识分享,通过这篇文章,大家是否熟悉? 笔者希望本文能够对信息流广告投放的运营者有所帮助,帮助您更好的投放自己的广告,提高广告的展示量。详情请参阅本网站。

    2021年6月24日
    14
  • 联想手表watchx 天气设置教程

    联想手表Watch X 之 天气设置     安装两个app Gadgetbridge手表配对 lineageOS天气服务 开始操作 1.下面隆重出场超好用的APP,github上开源项目Gadgetbridge,适配市面上几乎所有主流表。     绝对良心 目前最新版0.59.2,总大小6.0M ,自带中文化,目的是为了让人好好使用手表本身的功能,无需注册账户,没必要把自己的隐私共享给厂家。     2.天气软件 安装另一个软件Weather notification,无广告,不流氓,就是个天气app,2MB。     3.重点这里不太好操作,需要一些技术,但也不是很难。 https://openweathermap.org 注册一下,网站是英文的,邮箱验证后邮件里获取API key,一串字符 ,复制下来,也可以网页登陆后自己看。 (难点:需要梯子,有谷歌或者国外邮箱,邮箱注册,邮箱验证)     4. 填写秘钥稍等一会就可以显示天气了。     连接成功语言设置     6.不想捣鼓,不想研究的直接联系我获取秘钥

    2021年9月11日
    23
  • 产品判断力,决策产品方向!

    作为一名产品经理,产品的判断力和决策力是最重要的技能,当然好的决策力则是判断力的前提。那么,相对来说,产品的判断力则是一个比较棘手的问题,良好的判断力能够决定产品的方向。本文重点分享了有关于如何提高自己的产品判断力的方法。 我一直都认为产品经理最重要的技能则是对产品的判断力和决策力,当然好的决策力一定是判断力的前提。 在我们平常做的项目的时候,难免会遇到各种各样的问题, 前期用户需求调研,是否是真正的需求,会不会只是这个客户单项的需求。 后台注册是否需要用户填写身份信息, 工作台上要不要植入其他平台广告, 确认按键是放在左边还是右边 这个时候都需要由产品经理来进行判断决策,最终你的决策将会直接影响产品的导向。产品判断确实是一个棘手的话题,因为在任何时候担任产品工作的人,经常会被质疑,还有很多人会通过他们对产品的认知,对你指指点点以至怀疑你的工作能力。 他们会经常询问你,你是如何判断这个功能要这样?采取你的想法会不会让用户感到不适?如果这些你都弄不清楚,那你怎么能担任产品经理的工作呢? 呃……NMMP背锅这件事,我们在这里就不谈论了。 在我们深入研究之前,我们首先要内心承认这并不是一门硬科学,不管怎么说,产品判断有一定的主观性,两个具有很强判断力的人可能意见不一,我希望在这里实现的是,尽可能的消除主观性,这样我们才可以更快更频繁的作出更高的产品决策。 一、如何获得产品判断力 产品判断是确实存在的,而且是通过学习得来的,其实没有人一开始就具备很强的产品判断力,它不是天生的,构建它需要时间,建立它需要你有刻意学习和自我判断。因此,有的人拥有它,而其他人并没有。 所有伟大的产品背后肯定有一支强大的产品经理团队。 产品路线图:当面对两个相互竞争的功能创意时,你是否能够有依据的给老板和同事讲解背后的逻辑,是否可以用产品判断力准确的预测哪一种方式更适合用户。 产品范围:当面临产品范围调用时,无论功能是发布或不发布,你是否可以通过减少争议,快速的找到功能与用户价值之间的平衡点。 产品设计:面对不同的设计方案时,你如何判断其中一种设计方案可以让用户更加喜欢,是否可以准确的预测用户将采用那些工作流程和路径,来完成你的产品体验,以及如何设计更改将影响用户路径。 1. 产品判断力是通过与用户直接沟通获得 你对真实用户做的真实情况的体验约直接,你的产品的判断就约快,你需要观察和交谈真正的用户…

    2021年8月1日
    33