java关于地图经纬度的计算

一,坐标体系

wgs坐标系是国际上通用的坐标系,也称地球坐标系,gps和北斗系统都使用的是wgs坐标系。谷歌地图使用的是wgs坐标系(中国部分除外),openstreetmap使用的也是这种坐标系

gcj02坐标系是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系,也称火星坐标系,谷歌中国地图、搜搜中国地图、高德地图采用的是GCJ02地理坐标系。

BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系,由百度公司独创,百度地图使用的就是这个坐标系。

应用中大多使用wgs坐标系,我们在计算经纬度的时候,使用wgs坐标系

在这里插入图片描述

二,坐标计算

引用jar包

 <dependency>
   <groupId>org.gavaghan</groupId>
   <artifactId>geodesy</artifactId>
   <version>1.1.3</version>
 </dependency>

以下计算使用的都是WGS84坐标系
1,计算两点坐标的距离
2,已知其中一点坐标、角度方向、距离,计算另一点坐标
这里的角度方向就是上图中的a角,正北方向是0,正东方向是90

public class JingWeiDuTest {

    public static void main(String[] args) {
        //计算两点坐标的距离
        getDistance(114.008919919000230, 22.727150549443284, 114.008919967000230, 22.727150537443284,3);
        //已知起点坐标、角度方向、距离(示例3.2mm),计算另一个坐标的经纬度
        getGlobalCoordinates(114.008919919000230, 22.727150549443284, 90, 0.0032);
    }
    

    /**
     * 根据经纬度,计算两点间的距离、方位、反方位
     * @param longitudeFrom  第一个点的经度
     * @param latitudeFrom  第一个点的纬度
     * @param longitudeTo 第二个点的经度
     * @param latitudeTo  第二个点的纬度
     * @param accurate  保留小数点几位
     */
    public static void getDistance(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo,int accurate) {
        GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom);
        GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo);
        //创建GeodeticCalculator,调用计算方法,传入坐标系、经纬度得到GeodeticCurve,用GeodeticCurve获取距离、方位、反方位
        GeodeticCurve geodeticCurve = new GeodeticCalculator().calculateGeodeticCurve(Ellipsoid.WGS84, source, target);
        //获取两点的方位
        double azimuth = geodeticCurve.getAzimuth();
        //获取两点之间的距离
        double distance = geodeticCurve.getEllipsoidalDistance();
        double v = distance*1000;//距离转为毫米
        //保留数据小数点位数且四舍五入
        BigDecimal bigDecimal = new BigDecimal(v).setScale(accurate,BigDecimal.ROUND_HALF_UP);
        double result = bigDecimal.doubleValue();
        System.out.println("两个坐标之间的距离是"+ result + "mm");
        System.out.println("两个坐标的方向是"+azimuth);
    }



    /**
     * 根据开始坐标点,角度,计算结束点坐标
     * @param longitudeFrom 开始点经度
     * @param latitudeFrom  开始点纬度
     * @param startAngle 方向(以起点为中心)如果是90角,startAngle=90,表示纬度不变,经度向东移动增大
     * @param distance 距离(单位:m)
     */
    public static void getGlobalCoordinates(double longitudeFrom, double latitudeFrom, double startAngle, double distance){
        //经纬度对象
        GlobalCoordinates startGlobalCoordinates = new GlobalCoordinates(latitudeFrom, longitudeFrom);
        //计算的坐标对象
        GlobalCoordinates globalCoordinates = new GeodeticCalculator().calculateEndingGlobalCoordinates(Ellipsoid.WGS84, startGlobalCoordinates, startAngle, distance);
        //获取纬度
        double latitude = globalCoordinates.getLatitude();
        //获取经度
        double longitude = globalCoordinates.getLongitude();
        System.out.println("坐标经度="+longitude+",坐标纬度="+latitude);
    }

}

结果

两个坐标之间的距离是5.107mm
两个坐标的方向是105.08285909485609
坐标经度=114.00891995015058,坐标纬度=22.72715054944328
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
百度地图经纬度计算距离可以使用以下方法: 引用\[2\]中的Java代码示例中的`getDistance`方法可以计算经纬度之间的距离,单位为米。你可以将经度和纬度作为参数传递给该方法,然后获取计算得到的距离。 另外,引用\[3\]中的PHP代码示例中的`actionGetDistance`方法也可以计算经纬度之间的距离,单位为公里。你可以将经度和纬度作为参数传递给该方法,然后获取计算得到的距离。 需要注意的是,这两种方法计算距离的精度可能会有所不同,具体使用哪种方法取决于你的需求和使用的编程语言。 #### 引用[.reference_title] - *1* [根据经纬度计算距离(百度地图)](https://blog.csdn.net/yang_guang3/article/details/108326682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [百度地图经纬度距离计算](https://blog.csdn.net/weixin_30486037/article/details/97370800)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [百度地图根据经度纬度计算距离,单位(km)](https://blog.csdn.net/diavid/article/details/80194282)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值