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

Java根據(jù)坐標(biāo)經(jīng)緯度計(jì)算兩點(diǎn)距離(5種方法)、校驗(yàn)經(jīng)緯度是否在圓/多邊形區(qū)域內(nèi)的算法推薦

這篇具有很好參考價(jià)值的文章主要介紹了Java根據(jù)坐標(biāo)經(jīng)緯度計(jì)算兩點(diǎn)距離(5種方法)、校驗(yàn)經(jīng)緯度是否在圓/多邊形區(qū)域內(nèi)的算法推薦。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

前言

一、根據(jù)坐標(biāo)經(jīng)緯度計(jì)算兩點(diǎn)距離(5種方法)

1.方法一

2.方法二

3.方法三

4.方法四

5.方法五

5.1 POM引入第三方依賴

5.2 代碼

6.測(cè)試結(jié)果對(duì)比

二、校驗(yàn)經(jīng)緯度是否在制定區(qū)域內(nèi)

1.判斷一個(gè)坐標(biāo)是否在圓形區(qū)域內(nèi)

2.判斷一個(gè)坐標(biāo)是否在一個(gè)多邊形區(qū)域內(nèi)

3.結(jié)果

總結(jié)


前言

????????在開發(fā)項(xiàng)目中會(huì)用到根據(jù)兩點(diǎn)坐標(biāo)計(jì)算之間距離的算法,網(wǎng)上也找了很多的方法,多多少少會(huì)存在一些問題的。以下方法已經(jīng)在我本地運(yùn)行通過,利用百度地圖拾取坐標(biāo)系統(tǒng)和百度地圖測(cè)距工具進(jìn)行測(cè)試,現(xiàn)將其整理了一下。以供大家參考:


一、根據(jù)坐標(biāo)經(jīng)緯度計(jì)算兩點(diǎn)距離

1.方法一

package com.test.java.util;

/**
 * 坐標(biāo)位置相關(guān)util
 */
public class PositionUtil {

    /**
     * 赤道半徑(單位:米)
     */
    private static final double EQUATOR_RADIUS = 6378137;

    /**
     * 方法一:(反余弦計(jì)算方式)
     *
     * @param longitude1 第一個(gè)點(diǎn)的經(jīng)度
     * @param latitude1  第一個(gè)點(diǎn)的緯度
     * @param longitude2 第二個(gè)點(diǎn)的經(jīng)度
     * @param latitude2  第二個(gè)點(diǎn)的緯度
     * @return 返回距離,單位m
     */
    public static double getDistance1(double longitude1, double latitude1, double longitude2, double latitude2) {
        // 緯度
        double lat1 = Math.toRadians(latitude1);
        double lat2 = Math.toRadians(latitude2);
        // 經(jīng)度
        double lon1 = Math.toRadians(longitude1);
        double lon2 = Math.toRadians(longitude2);
        // 緯度之差
        double a = lat1 - lat2;
        // 經(jīng)度之差
        double b = lon1 - lon2;
        // 計(jì)算兩點(diǎn)距離的公式
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));
        // 弧長(zhǎng)乘赤道半徑, 返回單位: 米
        s = s * EQUATOR_RADIUS;
        return s;
    }

}

2.方法二

package com.test.java.util;

/**
 * 坐標(biāo)位置相關(guān)util
 */
public class PositionUtil {

    /**
     * 地球平均半徑(單位:米)
     */
    private static final double EARTH_AVG_RADIUS = 6371000;
    
    /**
     * 方法二:(反余弦計(jì)算方式)
     *
     * @param longitude1 第一點(diǎn)的經(jīng)度
     * @param latitude1  第一點(diǎn)的緯度
     * @param longitude2 第二點(diǎn)的經(jīng)度
     * @param latitude2  第二點(diǎn)的緯度
     * @return 返回的距離,單位m
     */
    public static double getDistance3(double longitude1, double latitude1, double longitude2, double latitude2) {
        // 經(jīng)緯度(角度)轉(zhuǎn)弧度。弧度作為作參數(shù),用以調(diào)用Math.cos和Math.sin
        // A經(jīng)弧度
        double radiansAX = Math.toRadians(longitude1);
        // A緯弧度
        double radiansAY = Math.toRadians(latitude1);
        // B經(jīng)弧度
        double radiansBX = Math.toRadians(longitude2);
        // B緯弧度
        double radiansBY = Math.toRadians(latitude2);

        // 公式中“cosβ1cosβ2cos(α1-α2)+sinβ1sinβ2”的部分,得到∠AOB的cos值
        double cos = Math.cos(radiansAY) * Math.cos(radiansBY) * Math.cos(radiansAX - radiansBX) + Math.sin(radiansAY) * Math.sin(radiansBY);
        // System.out.println("cos = " + cos); // 值域[-1,1]

        // 反余弦值
        double acos = Math.acos(cos);
        // System.out.println("acos = " + acos); // 值域[0,π]
        // System.out.println("∠AOB = " + Math.toDegrees(acos)); // 球心角 值域[0,180]

        // 最終結(jié)果
        return EARTH_AVG_RADIUS * acos;
    }

}

3.方法三

基于谷歌地圖的計(jì)算公式計(jì)算距離

package com.test.java.util;

/**
 * 坐標(biāo)位置相關(guān)util
 */
public class PositionUtil {

    /**
     * 地球平均半徑(單位:米)
     */
    private static final double EARTH_AVG_RADIUS = 6371000;

    /**
     * 經(jīng)緯度轉(zhuǎn)化為弧度(rad)
     *
     * @param d 經(jīng)度/緯度
     */
    private static double rad(double d) {
        return d * Math.PI / 180.0;
    }

    /**
     * 方法三:(基于googleMap中的算法得到兩經(jīng)緯度之間的距離,計(jì)算精度與谷歌地圖的距離精度差不多。)
     *
     * @param longitude1 第一點(diǎn)的經(jīng)度
     * @param latitude1  第一點(diǎn)的緯度
     * @param longitude2 第二點(diǎn)的經(jīng)度
     * @param latitude2  第二點(diǎn)的緯度
     * @return 返回的距離,單位m
     */
    public static double getDistance2(double longitude1, double latitude1, double longitude2, double latitude2) {
        double radLat1 = rad(latitude1);
        double radLat2 = rad(latitude2);
        double a = radLat1 - radLat2;
        double b = rad(longitude1) - rad(longitude2);
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
        s = s * EARTH_AVG_RADIUS;
        s = Math.round(s * 10000d) / 10000d;
        return s;
    }

}

4.方法四

基于高德地圖

package com.test.java.util;

/**
 * 計(jì)算距離
 */
public class PositionUtil {


    /**
     * 方法四:(高德地圖計(jì)算方法)
     *
     * @param longitude1 第一點(diǎn)的經(jīng)度
     * @param latitude1  第一點(diǎn)的緯度
     * @param longitude2 第二點(diǎn)的經(jīng)度
     * @param latitude2  第二點(diǎn)的緯度
     * @return 返回的距離,單位m
     */
    public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) {
        if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) {
            return -1.0;
        }
        longitude1 *= 0.01745329251994329;
        latitude1 *= 0.01745329251994329;
        longitude2 *= 0.01745329251994329;
        latitude2 *= 0.01745329251994329;
        double var1 = Math.sin(longitude1);
        double var2 = Math.sin(latitude1);
        double var3 = Math.cos(longitude1);
        double var4 = Math.cos(latitude1);
        double var5 = Math.sin(longitude2);
        double var6 = Math.sin(latitude2);
        double var7 = Math.cos(longitude2);
        double var8 = Math.cos(latitude2);
        double[] var10 = new double[3];
        double[] var20 = new double[3];
        var10[0] = var4 * var3;
        var10[1] = var4 * var1;
        var10[2] = var2;
        var20[0] = var8 * var7;
        var20[1] = var8 * var5;
        var20[2] = var6;

        return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7;
        // 結(jié)果四舍五入 保留2位小數(shù)
        //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue();
    }

}

5.方法五

該方法是利用第三方j(luò)ar包計(jì)算

5.1 POM引入第三方依賴

    <!--用于計(jì)算兩點(diǎn)之間的距離-->
    <dependency>
        <groupId>org.gavaghan</groupId>
        <artifactId>geodesy</artifactId>
        <version>1.1.3</version>
    </dependency>

5.2 代碼

package com.test.java.util;

import org.gavaghan.geodesy.Ellipsoid;
import org.gavaghan.geodesy.GeodeticCalculator;
import org.gavaghan.geodesy.GeodeticCurve;
import org.gavaghan.geodesy.GlobalCoordinates;

/**
 * 坐標(biāo)位置相關(guān)util
 */
public class PositionUtil {

    /**
     * 方法四:(利用第三方j(luò)ar包計(jì)算)
     * 計(jì)算兩個(gè)經(jīng)緯度之間的距離
     *
     * @param longitude1 第一點(diǎn)的經(jīng)度
     * @param latitude1  第一點(diǎn)的緯度
     * @param longitude2 第二點(diǎn)的經(jīng)度
     * @param latitude2  第二點(diǎn)的緯度
     * @param ellipsoid  計(jì)算方式
     * @return 返回的距離,單位m
     */
    public static double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2, Ellipsoid ellipsoid) {
        // 創(chuàng)建GeodeticCalculator,調(diào)用計(jì)算方法,傳入坐標(biāo)系、經(jīng)緯度用于計(jì)算距離
        GlobalCoordinates firstPoint = new GlobalCoordinates(latitude1, longitude1);
        GlobalCoordinates secondPoint = new GlobalCoordinates(latitude2, longitude2);
        GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, firstPoint, secondPoint);
        return geoCurve.getEllipsoidalDistance();
    }

}

6.測(cè)試結(jié)果對(duì)比

這里我直接一起調(diào)用者4種方法,這樣看結(jié)果也更加直觀些。

    public static void main(String[] args) {

        double longitude1 = 117.344733;
        double latitude1 = 31.912334;
        double longitude2 = 117.272186;
        double latitude2 = 31.79422;

        double distance1 = PositionUtil.getDistance1(longitude1, latitude1, longitude2, latitude2);
        double distance2 = PositionUtil.getDistance2(longitude1, latitude1, longitude2, latitude2);
        double distance3 = PositionUtil.getDistance3(longitude1, latitude1, longitude2, latitude2);
        double distance4 = PositionUtil.getDistance4(longitude1, latitude1, longitude2, latitude2);
        double distance5 = PositionUtil.getDistance4(longitude1, latitude1, longitude2, latitude2, Ellipsoid.Sphere);
        double distance6 = PositionUtil.getDistance4(longitude1, latitude1, longitude2, latitude2, Ellipsoid.WGS84);


        System.out.println("方法1算出的距離:" + distance1);
        System.out.println("方法2算出的距離:" + distance2);
        System.out.println("方法3算出的距離:" + distance3);
        System.out.println("方法4算出的距離:" + distance4);
        System.out.println("方法4-Sphere算出的距離:" + distance5);
        System.out.println("方法4-WGS84算出的距離:" + distance6);
    }

java經(jīng)緯度計(jì)算距離,算法,java,spring boot,數(shù)據(jù)結(jié)構(gòu)

可以看出,這幾個(gè)方法算出的距離誤差相對(duì)較小。而且main方法中提供的測(cè)試數(shù)據(jù)也是我自身的真實(shí)數(shù)據(jù),結(jié)合百度地圖的測(cè)距工具進(jìn)行的測(cè)試。有需要的小伙伴,可以自行選擇合適的方法。

二、校驗(yàn)經(jīng)緯度是否在制定區(qū)域內(nèi)

怎么樣判斷一個(gè)坐標(biāo)點(diǎn)在指定的區(qū)域內(nèi)?其中區(qū)域又會(huì)分為:圓,多邊形和不規(guī)則的多邊形。

1.判斷一個(gè)坐標(biāo)是否在圓形區(qū)域內(nèi)

計(jì)算這個(gè)坐標(biāo)點(diǎn)和圓心之間的距離,然后跟圓的半徑進(jìn)行比較,如果比半徑大,就不在圓形區(qū)域內(nèi),如果小于等于圓的半徑,則該坐標(biāo)點(diǎn)在圓形區(qū)域內(nèi)。

package com.test.java.util;

import org.apache.commons.lang3.StringUtils;

/**
 * 計(jì)算距離
 */
public class PositionUtil {

    /**
     * 赤道半徑(單位:米)
     */
    private static final double EQUATOR_RADIUS = 6378137;

    /**
     * 方法一:(反余弦計(jì)算方式)
     *
     * @param longitude1 第一個(gè)點(diǎn)的經(jīng)度
     * @param latitude1  第一個(gè)點(diǎn)的緯度
     * @param longitude2 第二個(gè)點(diǎn)的經(jīng)度
     * @param latitude2  第二個(gè)點(diǎn)的緯度
     * @return 返回距離,單位m
     */
    public static double getDistance1(double longitude1, double latitude1, double longitude2, double latitude2) {
        // 緯度
        double lat1 = Math.toRadians(latitude1);
        double lat2 = Math.toRadians(latitude2);
        // 經(jīng)度
        double lon1 = Math.toRadians(longitude1);
        double lon2 = Math.toRadians(longitude2);
        // 緯度之差
        double a = lat1 - lat2;
        // 經(jīng)度之差
        double b = lon1 - lon2;
        // 計(jì)算兩點(diǎn)距離的公式
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));
        // 弧長(zhǎng)乘赤道半徑, 返回單位: 米
        s = s * EQUATOR_RADIUS;
        return s;
    }

    /**
     * 判斷坐標(biāo)點(diǎn)是否在圓形區(qū)域內(nèi)
     * 計(jì)算這個(gè)坐標(biāo)點(diǎn)和圓心點(diǎn)之間的距離,然后跟圓的半徑進(jìn)行比較,如果比半徑大,就不在圓形區(qū)域內(nèi),如果小于等于圓的半徑,則該坐標(biāo)點(diǎn)在圓形區(qū)域內(nèi)
     *
     * @param longitude1 第一點(diǎn)的經(jīng)度
     * @param latitude1  第一點(diǎn)的緯度
     * @param longitude2 第二點(diǎn)的經(jīng)度
     * @param latitude2  第二點(diǎn)的緯度
     * @param radius     圓形范圍半徑(單位:米)
     * @return true:不在區(qū)域內(nèi); false:在區(qū)域內(nèi)
     */
    public static boolean isInCircle(double longitude1, double latitude1, double longitude2, double latitude2, String radius) {
        if (StringUtils.isBlank(radius)) {
            throw new RuntimeException("請(qǐng)輸入范圍半徑");
        }
        return getDistance1(longitude1, latitude1, longitude2, latitude2) > Double.parseDouble(radius);
    }

}

2.判斷一個(gè)坐標(biāo)是否在一個(gè)多邊形區(qū)域內(nèi)

這里用到JAVA的一個(gè)類GeneralPath(由直線和二次和三次(B?zier)曲線構(gòu)成的幾何路徑。?它可以包含多個(gè)子路徑)使用這個(gè)類,結(jié)合傳入的各頂點(diǎn)參數(shù),畫一個(gè)幾何圖形,并通過它自身的contains方法,判斷該點(diǎn)是否在這個(gè)幾何圖形內(nèi)。

package com.test.java.util;

import org.apache.commons.lang3.StringUtils;

import java.awt.geom.GeneralPath;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.List;

/**
 * 計(jì)算距離
 */
public class PositionUtil {

    /**
     * 判斷坐標(biāo)點(diǎn)是否在多邊形區(qū)域內(nèi)
     *
     * @param pointLon 要判斷的點(diǎn)的經(jīng)度
     * @param pointLat 要判斷的點(diǎn)的緯度
     * @param lon      區(qū)域各頂點(diǎn)的經(jīng)度數(shù)組
     * @param lat      區(qū)域各頂點(diǎn)的緯度數(shù)組
     * @return true:范圍內(nèi); false:范圍外
     */
    public static boolean isInPolygon(double pointLon, double pointLat, double[] lon, double[] lat) {
        // 將要判斷的橫縱坐標(biāo)組成一個(gè)點(diǎn)
        Point2D.Double point = new Point2D.Double(pointLon, pointLat);
        // 將區(qū)域各頂點(diǎn)的橫縱坐標(biāo)放到一個(gè)點(diǎn)集合里面
        List<Point2D.Double> pointList = new ArrayList<>();
        double polygonPointToX;
        double polygonPointToY;
        for (int i = 0; i < lon.length; i++) {
            polygonPointToX = lon[i];
            polygonPointToY = lat[i];
            Point2D.Double polygonPoint = new Point2D.Double(polygonPointToX, polygonPointToY);
            pointList.add(polygonPoint);
        }
        return check(point, pointList);
    }

    /**
     * 坐標(biāo)點(diǎn)是否在多邊形內(nèi)
     *
     * @param point   要判斷的點(diǎn)的橫縱坐標(biāo)
     * @param polygon 組成的頂點(diǎn)坐標(biāo)集合
     */
    private static boolean check(Point2D.Double point, List<Point2D.Double> polygon) {
        GeneralPath generalPath = new GeneralPath();

        Point2D.Double first = polygon.get(0);
        // 通過移動(dòng)到指定坐標(biāo)(以雙精度指定),將一個(gè)點(diǎn)添加到路徑中
        generalPath.moveTo(first.x, first.y);
        polygon.remove(0);
        for (Point2D.Double d : polygon) {
            // 通過繪制一條從當(dāng)前坐標(biāo)到新指定坐標(biāo)(以雙精度指定)的直線,將一個(gè)點(diǎn)添加到路徑中。
            generalPath.lineTo(d.x, d.y);
        }
        // 將幾何多邊形封閉
        generalPath.lineTo(first.x, first.y);
        generalPath.closePath();
        // 測(cè)試指定的 Point2D 是否在 Shape 的邊界內(nèi)。
        return generalPath.contains(point);
    }

}

3.結(jié)果

    public static void main(String[] args) {

        double distance1 = PositionUtil.getDistance1(longitude1, latitude1, longitude2, latitude2);
        System.out.println("坐標(biāo)與圓心的距離:" + distance1);

        String radius1 = "10000";
        boolean inCircle1 = PositionUtil.isInCircle(longitude1, latitude1, longitude2, latitude2, radius1);
        System.out.println("校驗(yàn)坐標(biāo)是否在圓形范圍內(nèi):" + inCircle1);

        String radius = "15000";
        boolean inCircle2 = PositionUtil.isInCircle(longitude1, latitude1, longitude2, latitude2, radius);
        System.out.println("校驗(yàn)坐標(biāo)是否在圓形范圍內(nèi):" + inCircle2);

        double pointLon = 117.274984;
        double pointLat = 31.790718;

        // 坐標(biāo)在多邊形范圍內(nèi)的參數(shù):
        double[] lon = {117.272559, 117.276224, 117.278649, 117.273924};
        double[] lat = {31.791247, 31.792812, 31.78982, 31.788539};

        // 坐標(biāo)在多邊形范圍外的參數(shù):
        double[] lon1 = {117.291001, 117.299705, 117.298035, 117.291216};
        double[] lat1 = {31.806576, 31.806814, 31.802319, 31.802196};

        boolean a = PositionUtil.isInPolygon(pointLon, pointLat, lon, lat);
        boolean b = PositionUtil.isInPolygon(pointLon, pointLat, lon1, lat1);
        System.out.println("校驗(yàn)坐標(biāo)是否在多邊形范圍內(nèi):" + a);
        System.out.println("校驗(yàn)坐標(biāo)是否在多邊形范圍內(nèi):" + b);
    }

?java經(jīng)緯度計(jì)算距離,算法,java,spring boot,數(shù)據(jù)結(jié)構(gòu)


總結(jié)

????????這樣的計(jì)算方式得到的距離并非是真實(shí)的距離,可以說是邏輯距離(直線距離),但其距離也已經(jīng)很準(zhǔn)確。不過畢竟是通過邏輯計(jì)算得到的距離,若要求高準(zhǔn)確性的距離信息的話,還是借助第三方的地圖api接口獲取比較合適。

如果這篇文章對(duì)您有所幫助,或者有所啟發(fā)的話,求一鍵三連:點(diǎn)贊、評(píng)論、收藏?關(guān)注,您的支持是我堅(jiān)持寫作最大的動(dòng)力。文章來源地址http://www.zghlxwxcb.cn/news/detail-690868.html

到了這里,關(guān)于Java根據(jù)坐標(biāo)經(jīng)緯度計(jì)算兩點(diǎn)距離(5種方法)、校驗(yàn)經(jīng)緯度是否在圓/多邊形區(qū)域內(nèi)的算法推薦的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • JAVA計(jì)算兩經(jīng)緯度間的距離

    JAVA計(jì)算兩經(jīng)緯度間的距離

    無需依賴外部jar,可直接計(jì)算距離。DistanceUtil.java 可根據(jù)精度來判斷使用哪種方式(BigDecimal,double)。 在使用時(shí)具體保留位數(shù)可自行設(shè)置。 添加第三方j(luò)ar包。 直接采用第三方j(luò)ar包中的工具進(jìn)行計(jì)算。DistanceUtil.java 將其結(jié)果放在一起對(duì)比,會(huì)發(fā)現(xiàn)第三方j(luò)ar,Sphere更精準(zhǔn)一些。

    2024年02月14日
    瀏覽(31)
  • 經(jīng)緯度坐標(biāo)為中心點(diǎn)生成米距離長(zhǎng)度半徑的圓形面,含java js源碼+在線繪制,代碼簡(jiǎn)單零依賴

    經(jīng)緯度坐標(biāo)為中心點(diǎn)生成米距離長(zhǎng)度半徑的圓形面,含java js源碼+在線繪制,代碼簡(jiǎn)單零依賴

    目錄 java版源碼 js版源碼 在線繪制預(yù)覽效果 關(guān)于計(jì)算的精確度 前些時(shí)間在更新我的坐標(biāo)邊界查詢工具的時(shí)候,需要用到經(jīng)緯度坐標(biāo)點(diǎn)的距離計(jì)算,和以坐標(biāo)點(diǎn)為中心生成一個(gè)指定距離為半徑的圓,搜了一下沒有找到現(xiàn)成簡(jiǎn)單又合適的代碼,于是把自己壓箱底的代碼翻出來了

    2024年02月08日
    瀏覽(93)
  • ElasticSearch - 根據(jù)經(jīng)緯度,簡(jiǎn)單搜索指定距離范圍內(nèi)的數(shù)據(jù)

    ElasticSearch - 根據(jù)經(jīng)緯度,簡(jiǎn)單搜索指定距離范圍內(nèi)的數(shù)據(jù)

    ES的地圖檢索方式 ES支持的地圖檢索方式有以下幾種; geo_distance geo_bounding_box geo_polygon 1、 geo_distance :直線距離檢索,如給定點(diǎn)A,要求返回地圖上距離點(diǎn)A三千米的商家(點(diǎn)外賣場(chǎng)景) 2、查找索引內(nèi)距離北京站(116.433733,39.908404)3000米內(nèi)的點(diǎn) geo_distance涉及的參數(shù)如下 location:確

    2024年02月14日
    瀏覽(17)
  • mysql如何實(shí)現(xiàn)根據(jù)經(jīng)緯度判斷某一個(gè)坐標(biāo)是否在一個(gè)多邊形區(qū)域范圍內(nèi)

    mysql如何實(shí)現(xiàn)根據(jù)經(jīng)緯度判斷某一個(gè)坐標(biāo)是否在一個(gè)多邊形區(qū)域范圍內(nèi)

    要根據(jù)經(jīng)緯度判斷一個(gè)坐標(biāo)是否在一個(gè)多邊形區(qū)域內(nèi),MySQL提供了幾種函數(shù)來處理地理空間數(shù)據(jù),其中包括用于處理多邊形區(qū)域的函數(shù)。 首先,創(chuàng)建一個(gè)表來存儲(chǔ)多邊形區(qū)域??梢允褂?ST_GeomFromText 函數(shù)將多邊形的坐標(biāo)轉(zhuǎn)換為地理空間對(duì)象。我們給他插入兩條數(shù)據(jù),默認(rèn)id第一

    2024年02月08日
    瀏覽(134)
  • 【Python】一行代碼計(jì)算兩經(jīng)緯度點(diǎn)的距離及夾角

    【Python】一行代碼計(jì)算兩經(jīng)緯度點(diǎn)的距離及夾角

    2022.2.10更新,Python有現(xiàn)成的包可以直接調(diào)用。 geographiclib庫 https://pypi.org/project/geographiclib/ 用法說明見博客: python 計(jì)算地球上兩點(diǎn)距離和方位角(bearing)的包geographiclib_梓沂的博客-CSDN博客_geodesic python 通過經(jīng)緯度計(jì)算地圖上兩點(diǎn)的距離及方位角,百度的結(jié)果是許多個(gè)人寫的函

    2023年04月11日
    瀏覽(18)
  • 【 Java-小記錄】墨卡托投影坐標(biāo)轉(zhuǎn)換經(jīng)緯度方法

    ?墨卡托坐標(biāo)轉(zhuǎn)換 此方法轉(zhuǎn)換結(jié)果最接近騰訊地圖

    2023年04月18日
    瀏覽(20)
  • Java調(diào)用高德地圖API根據(jù)詳細(xì)地址獲取經(jīng)緯度

    Java調(diào)用高德地圖API根據(jù)詳細(xì)地址獲取經(jīng)緯度

    訪問高德開放平臺(tái)https://lbs.amap.com/ 登錄后,在控制臺(tái)中創(chuàng)建一個(gè)應(yīng)用,獲取生成的應(yīng)用key。這個(gè)key將用于訪問高德地圖API。 ? 您可以使用Java中的 HttpURLConnection 或 HttpClient 等工具發(fā)送HTTP請(qǐng)求到高德地圖API,并傳遞參數(shù)以獲取經(jīng)緯度信息。以下是一個(gè)使用 HttpURLConnection 的示例

    2024年02月05日
    瀏覽(161)
  • 微信小程序如何使用地球半徑計(jì)算兩組經(jīng)緯度點(diǎn)之間的距離(自身位置與接口返回位置)【上】

    微信小程序如何使用地球半徑計(jì)算兩組經(jīng)緯度點(diǎn)之間的距離(自身位置與接口返回位置)【上】

    目錄 1.配置位置權(quán)限? 2.獲取當(dāng)前自身經(jīng)緯度? 3. 請(qǐng)求接口拿到返回經(jīng)緯 4. 循環(huán)取每一項(xiàng)的經(jīng)緯 5.如何判斷是否打開了定位權(quán)限? 6.進(jìn)行距離計(jì)算操作? 7.運(yùn)行效果 8.完整代碼 首先在使用小程序時(shí),請(qǐng)求的接口一定要去配置合法域名,才能夠進(jìn)行接下來的操作。? 在app.json中添

    2024年02月06日
    瀏覽(24)
  • 經(jīng)緯度轉(zhuǎn)換為UTM坐標(biāo)

    UTM(通用橫向墨卡托投影): 是一種以米為單位的坐標(biāo)系統(tǒng),用于地圖和GPS導(dǎo)航。將地球劃分為60個(gè)縱向的區(qū)域。每個(gè)區(qū)域?qū)?度,從赤道開始往南北兩級(jí)方向劃分。每個(gè)區(qū)域都有一個(gè)特定的字母。 將經(jīng)緯度值轉(zhuǎn)化為弧度值 根據(jù)經(jīng)緯度計(jì)算所在的UTM區(qū)域 計(jì)算UTM帶號(hào),即 zone

    2024年02月10日
    瀏覽(18)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包