1. 程式人生 > >根據兩點的經緯度座標計算兩個座標點之間的直線距離

根據兩點的經緯度座標計算兩個座標點之間的直線距離

貼程式碼如下:

package com.qcsd.xulin.util;

import java.awt.*;

/**
 * @author xulin
 * @date create in 9:06 2018/11/1
 * Description 根據提供的兩個國標經緯度,計算兩個點之間的距離
 */
public class DistanceConsider {
    // 地球半徑
    private static double EARTH_RADIUS = 6378.137;

    private static double rad(double d) {
        return
d * Math.PI / 180.0; } /** * @author xulin * date 9:09 2018/11/1 * Description 計算距離 * 引數傳入:所在位置的座標 目標位置的座標 * 一個引數的經緯之前要求使用","英文的逗號進行分隔 * 返回: 輸入的兩個座標點之間的距離 精確到小數點後兩位 */ public static double getDistance(String location, String target) { int locationCount = location.indexOf(",");
// 源地點的經度 double lngLocation = Double.parseDouble(location.substring(0, locationCount)); // 源地點的維度 double latLocation = Double.parseDouble(location.substring(locationCount + 1, location.length())); int targetCount = target.indexOf(","); // 目標地點的經度 double lngTarget = Double.parseDouble(target.substring(0, targetCount));
// 目標地點的維度 double latTarget = Double.parseDouble(target.substring(targetCount + 1, target.length())); double lat1 = rad(latLocation); double lat2 = rad(latTarget); double lat = lat1 - lat2; double lng = rad(lngLocation) - rad(lngTarget); double distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(lat / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(lng / 2), 2))); distance = distance * EARTH_RADIUS; distance = Math.round(distance * 10000d) / 10000d; distance = distance * 1000; return distance; } public static void main(String args[]) { String location = "116.368904, 39.923423"; String target = "116.387271, 39.922501"; System.out.println(getDistance(location, target)); } }

剛開始一直計算錯誤,是自己沒有區分經緯度,地理是硬傷,谷歌的公式是對的,網上的大部分方法也是對的, 如果計算之後發現了較大的誤差,記得檢視經緯度是否計算反了,避免低階錯誤~~~~