国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【 Java-小記錄】墨卡托投影坐標(biāo)轉(zhuǎn)換經(jīng)緯度方法

這篇具有很好參考價(jià)值的文章主要介紹了【 Java-小記錄】墨卡托投影坐標(biāo)轉(zhuǎn)換經(jīng)緯度方法。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?墨卡托坐標(biāo)轉(zhuǎn)換 此方法轉(zhuǎn)換結(jié)果最接近騰訊地圖文章來源地址http://www.zghlxwxcb.cn/news/detail-417595.html

package cn.ydxiaoshuai.gis;


import java.math.BigDecimal;

/**
 * Description 墨卡托坐標(biāo)轉(zhuǎn)換 此方法轉(zhuǎn)換結(jié)果最接近騰訊地圖
 *             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,
     *                    墨卡托坐標(biāo)x軸區(qū)間[-20037508.3427892,20037508.3427892]
     *                    墨卡托坐標(biāo)系:展開地球,赤道作為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);
        //代碼轉(zhuǎn)換 39.996===89.7629 騰訊地圖 轉(zhuǎn)換 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;
}

到了這里,關(guān)于【 Java-小記錄】墨卡托投影坐標(biāo)轉(zhuǎn)換經(jīng)緯度方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包