经纬度和距离之间的计算

不是我写的, 也看不太懂, 备忘

package com.iwhere.easy.travel.tool;

import org.junit.Test;
import org.springframework.util.Assert;

/**
 */
public class GeoUtils {

    public final static float EARTH_RADIUS = 6378137; // 地球半径

    @Test
    public void test2() {
//        GeoUtils.getBoxByCoordinate(120.0, 40.0, 2000.0);
        Double distance = GeoUtils.getDistance(new Point(119.9765412051408, 39.98202952055585),
                new Point(120.0234587948592, 40.01797047944415));
        System.out.println(distance);
    }

    /**
     * 根据中心点获取box
     *
     * @return
     */
    public static Double[] getBoxByCoordinate(Double longitude, Double latitude, Double raidusMile) {
        Assert.notNull(longitude);
        Assert.notNull(latitude);

        Double degree = (24901 * 1609) / 360.0; // 获取每度弧长

        Double mpdLng = Double.parseDouble((degree * Math.cos(latitude * (Math.PI / 180)) + "").replace("-", ""));
        Double dpmLng = 1 / mpdLng;
        Double radiusLng = dpmLng * raidusMile;
        // 获取最小经度
        Double minLat = longitude - radiusLng;
        // 获取最大经度
        Double maxLat = longitude + radiusLng;

        Double dpmLat = 1 / degree;
        Double radiusLat = dpmLat * raidusMile;
        // 获取最小纬度
        Double minLng = latitude - radiusLat;
        // 获取最大纬度
        Double maxLng = latitude + radiusLat;
        System.out.println(minLat + ": " + maxLat + ": " + minLng + ": " + maxLng);
        return null;
    }

    /**
     * 获取距离
     *
     * @param from
     *            开始点
     * @param to
     *            结束点
     * @return
     */
    public static Double getDistance(Point from, Point to) {
        if (from == null || to == null || from.getLat() == null || from.getLng() == null || to.getLat() == null
                || to.getLng() == null) {
            return Double.NaN;
        } else {
            double lat1 = from.getLat() * Math.PI / 180.0;
            double lat2 = to.getLat() * Math.PI / 180.0;
            double a = lat1 - lat2;
            double b = (from.getLng() - to.getLng()) * Math.PI / 180.0;

            double sa2, sb2;
            sa2 = Math.sin(a / 2.0);
            sb2 = Math.sin(b / 2.0);
            return 2 * EARTH_RADIUS * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1) * Math.cos(lat2) * sb2 * sb2));
        }
    }

    /**
     *
     * ---------------------------------------------------------------------------
     * 点
     * ---------------------------------------------------------------------------
     * <strong>copyright</strong>: ?版权所有 成都都在哪网讯科技有限公司<br>
     * ----------------------------------------------------------------------------
     *
     * @author: hewei
     * @time:2016年10月28日 下午6:29:22
     *                   ---------------------------------------------------------------------------
     */
    public static class Point {
        public Double lat; // 纬度
        public Double lng; // 经度

        /**
         *
         */
        public Point() {
            super();
        }

        /**
         * @param lat
         * @param lng
         */
        public Point(Double lat, Double lng) {
            super();
            this.lat = lat;
            this.lng = lng;
        }

        /**
         * @return the lat
         */
        public Double getLat() {
            return lat;
        }

        /**
         * @param lat
         *            the lat to set
         */
        public void setLat(Double lat) {
            this.lat = lat;
        }

        /**
         * @return the lng
         */
        public Double getLng() {
            return lng;
        }

        /**
         * @param lng
         *            the lng to set
         */
        public void setLng(Double lng) {
            this.lng = lng;
        }
    }
}

参考: http://blog.csdn.net/koryako/article/details/51864161

时间: 2024-11-25 18:34:26

经纬度和距离之间的计算的相关文章

经纬度 范围 距离 计算

private const double EARTH_RADIUS = 6378.137;//地球半径         private static double RAD = Math.PI / 180.0;        //获取两个经纬度之间的距离         public static double GetDistance(double lng1, double lat1, double lng2, double lat2)        {            double rad

【Python学习】指定两点地理位置经纬度的距离计算

指定两点地理位置经纬度的距离计算 1 #coding=utf-8 2 3 from math import * 4 5 # input Lat_A 纬度A 6 # input Lng_A 经度A 7 # input Lat_B 纬度B 8 # input Lng_B 经度B 9 # output distance 距离(km) 10 def calcDistance(Lat_A, Lng_A, Lat_B, Lng_B): 11 ra = 6378.140 # 赤道半径 (km) 12 rb =

计算经纬度、距离、方位角

1.根据两点经纬度计算其间距离,发现有3种公式,结果区别不是很大. 2.根据一点的经纬度与到另外一点的距离.方位角,计算另一点的经纬度,误差不是很大. 1 package com.zhs.util; 2 3 /** 4 * 5 * 计算经纬度.距离.方位角 6 * 7 * @author lillian.he 8 * @time 2016-06-02 9 * */ 10 public class CalculationLogLatDistance { 11 /** 12 * 地球赤道半径(km)

通俗解析莱文斯坦距离(Levenshtein Distance)计算原理(最小编辑距离)

[版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 最近看到一些动态规划的东西讲到莱文斯坦距离(编辑距离)的计算,发现很多都讲的不是很清楚,比较难理解,自己思考过后重新给大家讲解一下: 维基百科解析:莱文斯坦距离,又称Levenshtein距离,是编辑距离的一种.指两个字串之间,由一个转成另一个所需的最少编辑操作次数.允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符.例如将kitten转成sittin

【JAVA】两点经纬度直线距离的计算

来自谷歌地图的计算公式: 通过JAVA的Math类各种方法调用.实现上述公式 private static double EARTH_RADIUS = 6378.137;// 单位千米 /** * 角度弧度计算公式 rad:(). <br/> * * 360度=2π π=Math.PI * * x度 = x*π/360 弧度 * * @author chiwei * @param d * @return * @since JDK 1.6 */ private static double get

C#计算两个经纬度的距离

//地球半径,单位米 private const double EARTH_RADIUS = 6378137; /// <summary> /// 计算两点位置的距离,返回两点的距离,单位 米 /// 该公式为GOOGLE提供,误差小于0.2米 /// </summary> /// <param name="lat1">第一点纬度</param> /// <param name="lng1">第一点经度&l

Mysql 拿指定经纬度与数据库多条经纬度进行距离计算

公式例如以下,单位米: 第一点经纬度:lng1 lat1 第二点经纬度:lng2 lat2 round(6378.138*2*asin(sqrt(pow(sin( (lat1*pi()/180-lat2*pi()/180)/2),2)+cos(lat1*pi()/180)*cos(lat2*pi()/180)* pow(sin( (lng1*pi()/180-lng2*pi()/180)/2),2)))*1000) 比如: SELECT store_id,lng,lat, ROUND(6378.

指定经纬度与数据库多条经纬度进行距离计算

##121.308364,30.225778 示例对比的坐标 select * from broadcasts where location!='' and sqrt( ( ((121.308364-longitude)*PI()*12656*cos(((30.225778+latitude)/2)*PI()/180)/180) * ((121.308364-longitude)*PI()*12656*cos (((30.225778+latitude)/2)*PI()/180)/180) )

根据经纬度求两点之间距离(mysql 函数)

1 DROP FUNCTION IF EXISTS `getDistance`; 2 DELIMITER ;; 3 CREATE FUNCTION `getDistance`( 4 lon1 float(10,7) 5 ,lat1 float(10,7) 6 ,lon2 float(10,7) 7 ,lat2 float(10,7) 8 ) RETURNS double 9 begin 10 declare d double; 11 declare radius int; 12 set radi