【 Java-小记录】墨卡托投影坐标转换经纬度方法

这篇具有很好参考价值的文章主要介绍了【 Java-小记录】墨卡托投影坐标转换经纬度方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 墨卡托坐标转换 此方法转换结果最接近腾讯地图文章来源地址https://www.toymoban.com/news/detail-417595.html

package cn.ydxiaoshuai.gis;


import java.math.BigDecimal;

/**
 * Description 墨卡托坐标转换 此方法转换结果最接近腾讯地图
 *             https://lbs.qq.com/service/webService/webServiceGuide/webServiceTranslate
 * ProjectName worktools
 * Created by 小帅丶 on 2023-04-17 16:28.
 * Version 1.0
 */

public class MercatorWGS84ConvertUtil {

    /**
     * @EARTH_CIRCLE_HALF 地球赤道周长的一半
     *                    地球半径6378137米,赤道周长2*PI*r = 2 * 20037508.3427892,
     *                    墨卡托坐标x轴区间[-20037508.3427892,20037508.3427892]
     *                    墨卡托坐标系:展开地球,赤道作为x轴,向东为x轴正方,本初子午线作为y轴,向北为y轴正方向。
     **/
    private static BigDecimal EARTH_CIRCLE_HALF = new BigDecimal(20037508.34);

    /**
     * @EARTH_RADIUS 地球半径
     **/
    private static BigDecimal EARTH_RADIUS = new BigDecimal(6378137.0);

    /**
     * @STRAIGHT_ANGLE 平角 180°
     **/
    private static BigDecimal STRAIGHT_ANGLE = new BigDecimal(180);

    private static CoordinateBean  mercatorToWGS84(BigDecimal mercatorLngX,
                                                   BigDecimal  mercatorLatY){
        CoordinateBean coord = new CoordinateBean();
        BigDecimal coordLng = mercatorLngX.divide(EARTH_CIRCLE_HALF,BigDecimal.ROUND_CEILING).setScale(4,BigDecimal.ROUND_HALF_EVEN)
                .multiply(STRAIGHT_ANGLE).setScale(4,BigDecimal.ROUND_HALF_EVEN);
        BigDecimal coordLat = mercatorLatY.divide(EARTH_CIRCLE_HALF,BigDecimal.ROUND_CEILING).setScale(4,BigDecimal.ROUND_HALF_EVEN)
                .multiply(STRAIGHT_ANGLE).setScale(4,BigDecimal.ROUND_HALF_EVEN);
        Double tempLat = STRAIGHT_ANGLE.doubleValue() /
                Math.PI * (2 * Math.atan(Math.exp(coordLat.doubleValue() * Math.PI /
                STRAIGHT_ANGLE.doubleValue())) - Math.PI / 2);
        coordLat =  new BigDecimal(tempLat).setScale(4,BigDecimal.ROUND_HALF_EVEN);
        coord.setCoordLngX(coordLng);
        coord.setCoordLatY(coordLat);
        System.out.println(coordLng.doubleValue() + "===" + coordLat);
        return coord;
    }

    private static CoordinateBean WGS84ToMercator(BigDecimal lng,
                                                  BigDecimal lat){
        CoordinateBean coord = new CoordinateBean();
        BigDecimal PI = new BigDecimal(Math.PI);
        BigDecimal coordLng = lng.multiply(PI)
                .divide(STRAIGHT_ANGLE,BigDecimal.ROUND_CEILING)
                .multiply(EARTH_RADIUS)
                .setScale(4,BigDecimal.ROUND_HALF_EVEN);
        BigDecimal tempParam = lat.multiply(PI).divide(STRAIGHT_ANGLE,BigDecimal.ROUND_CEILING)
                .setScale(4,BigDecimal.ROUND_HALF_EVEN);
        Double tempLat = EARTH_RADIUS.doubleValue()
                / 2 * Math.log((1.0 + Math.sin(tempParam.doubleValue()))
                / (1.0 - Math.sin(tempParam.doubleValue())));
        BigDecimal coordLat = new BigDecimal(tempLat).setScale(4,BigDecimal.ROUND_HALF_EVEN);
        coord.setCoordLngX(coordLng);
        coord.setCoordLatY(coordLat);
        System.out.println(coordLng.toPlainString() + "===" + coordLat.toPlainString());
        return coord;
    }


    public static void main(String[] args) {
        BigDecimal coordLng = new BigDecimal(39419429.2936);
        BigDecimal coordLat = new BigDecimal(4452052.1597);
        //代码转换 39.996===89.7629 腾讯地图 转换 39.99303 === 89.740407
        mercatorToWGS84(coordLat,coordLng);
    }
}
package cn.ydxiaoshuai.gis;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;

/**
 * Description
 * ProjectName workdemo
 * Created by 小帅丶 on 2023-04-17 17:09.
 * Version 1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CoordinateBean {
    private BigDecimal coordLngX;
    private BigDecimal coordLatY;
}

到了这里,关于【 Java-小记录】墨卡托投影坐标转换经纬度方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 经纬度转换 | 基于Python的经纬度与xy坐标(屏幕坐标)相互转换(可批量),并在平面坐标系上以特定点为坐标原点重新建立坐标系,输出各点新坐标

    用的更多的场景是把 经纬度转化为xy平面坐标 ,因为经纬度是方便我们确定地理位置的,我们可以很容易的从地图数据(可利用高德开放平台)上获取某一个地址它的经纬度,但是我们看到的地图是平面的,所以要利用各种投影把经纬度转换为平面坐标便于我们自己分析~

    2024年02月07日
    浏览(74)
  • 经纬度转换为UTM坐标

    UTM(通用横向墨卡托投影): 是一种以米为单位的坐标系统,用于地图和GPS导航。将地球划分为60个纵向的区域。每个区域宽6度,从赤道开始往南北两级方向划分。每个区域都有一个特定的字母。 将经纬度值转化为弧度值 根据经纬度计算所在的UTM区域 计算UTM带号,即 zone

    2024年02月10日
    浏览(42)
  • 【Unity】坐标转换经纬度方法(应用篇)

    解决地图中经纬度坐标转换与unity坐标互转的问题。使用线性变换的方法,理论上可以解决小范围内所有坐标转换的问题。 之前有写过[Unity]坐标转换经纬度方法(原理篇),在实际使用中,由于步骤比较繁琐,基于之前的方法,详细说明使用方法。 案例资源下载地址 绑定脚本

    2024年02月10日
    浏览(30)
  • 基于Python的经纬度与xy坐标系相互转换

    代码是已经运行过的,可以直接输入参数使用 注意事项: 经纬度参数不可以写颠倒,否则会由于math.log参数不能为负数和0的原因报错 由于地球半径的不确定性,所以(x,y)与(lon, lat)相互转换会有误差 奉上代码及运行结果: 经纬度转换成xy坐标 实例经维度参数 (114.5456282282352

    2024年02月12日
    浏览(46)
  • Unity中实现世界坐标到GPS经纬度的转换解决方案

    在Unity3D中,将世界坐标转换为GPS经纬度是一个常见的需求,特别是在开发基于地理位置的应用程序时。本文将提供一种详细的解决方案,包括相应的源代码,以帮助您实现这一转换。 步骤1:获取参考点的GPS经纬度 首先,您需要获取一个已知GPS经纬度坐标和对应的Unity世界坐

    2024年02月03日
    浏览(35)
  • ArcGIS地图投影与坐标系转换的方法

      本文介绍在 ArcMap 软件中,对矢量图层或栅格图层进行 投影 (即将 地理坐标系 转为 投影坐标系 )的原理与操作方法。   首先,地理坐标系与投影坐标系最简单的区别就是,地理坐标系用 经度 、 纬度 作为空间衡量指标,而投影坐标系用 米 、 千米 等 长度单位 作为

    2024年02月08日
    浏览(28)
  • GPS学习(一):在ROS2中将GPS经纬度数据转换为机器人ENU坐标系,在RVIZ中显示坐标轨迹

    本文记录在Ubuntu22.04-Humbel中使用NMEA协议GPS模块的过程,使用国产ROS开发板鲁班猫(LubanCat )进行调试。 在淘宝找了款性价比较高的轮趣科技GPS北斗双模定位模块作为入门学习使用,支持GNSS系统(北斗、GPS、GLONASS、日本的QZSS以及卫星增强系统SBAS),定位精度在2.5m左右,属于民用

    2024年02月03日
    浏览(45)
  • 【Python&GIS】面矢量数据投影转换(WGS84转地方坐标系)

            之前分享过点矢量怎么进行投影转换,今天跟大家分享下面矢量如何投影转换。代码与之前的类似,只要注意一下GDAL对矢量文件划分的关系层次即可。         ogr库是一个处理地理空间矢量数据的开源库。它可以读取多种数据格式,进行地理处理、属性表操作、

    2024年02月14日
    浏览(32)
  • Java:计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现

    两个点的经纬度 latitude纬度 longitude经度 地点 22.678611 113.805695 深圳同泰万怡酒店 22.716473 113.826391 深圳宝安中天美景华美达酒店 各种计算方式 计算方式 距离 Elasticsearch:7.12.1 4715.088099751495 自定义公式计算 4720.367727793572 org.gavaghan/geodesy 4715.085736444097 org.geotools/gt-referencing 4701.260

    2024年02月02日
    浏览(52)
  • Java根据坐标经纬度计算两点距离(5种方法)、校验经纬度是否在圆/多边形区域内的算法推荐

    目录 前言 一、根据坐标经纬度计算两点距离(5种方法) 1.方法一 2.方法二 3.方法三 4.方法四 5.方法五 5.1 POM引入第三方依赖 5.2 代码 6.测试结果对比 二、校验经纬度是否在制定区域内 1.判断一个坐标是否在圆形区域内 2.判断一个坐标是否在一个多边形区域内 3.结果 总结   

    2024年02月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包