`

【java】改写js百度地图测距方法

    博客分类:
  • java
 
阅读更多
百度地图测距js代码:
var EARTHRADIUS = 6370996.81; 
 /**
     * 将度转化为弧度
     * @param {degree} Number 度     
     * @returns {Number} 弧度
     */
    GeoUtils.degreeToRad =  function(degree){
        return Math.PI * degree/180;    
    }
    
    /**
     * 将弧度转化为度
     * @param {radian} Number 弧度     
     * @returns {Number} 度
     */
    GeoUtils.radToDegree = function(rad){
        return (180 * rad) / Math.PI;       
    }
    
    /**
     * 将v值限定在a,b之间,纬度使用
     */
    function _getRange(v, a, b){
        if(a != null){
          v = Math.max(v, a);
        }
        if(b != null){
          v = Math.min(v, b);
        }
        return v;
    }
    
    /**
     * 将v值限定在a,b之间,经度使用
     */
    function _getLoop(v, a, b){
        while( v > b){
          v -= b - a
        }
        while(v < a){
          v += b - a
        }
        return v;
    }

    /**
     * 计算两点之间的距离,两点坐标必须为经纬度
     * @param {point1} Point 点对象
     * @param {point2} Point 点对象
     * @returns {Number} 两点之间距离,单位为米
     */
    GeoUtils.getDistance = function(point1, point2){
        //判断类型
        if(!(point1 instanceof BMap.Point) ||
            !(point2 instanceof BMap.Point)){
            return 0;
        }

        point1.lng = _getLoop(point1.lng, -180, 180);
        point1.lat = _getRange(point1.lat, -74, 74);
        point2.lng =	
        point2.lat = _getRange(point2.lat, -74, 74);
        
        var x1, x2, y1, y2;
        x1 = GeoUtils.degreeToRad(point1.lng);
        y1 = GeoUtils.degreeToRad(point1.lat);
        x2 = GeoUtils.degreeToRad(point2.lng);
        y2 = GeoUtils.degreeToRad(point2.lat);

        return EARTHRADIUS * Math.acos((Math.sin(y1) * Math.sin(y2) + Math.cos(y1) * Math.cos(y2) * Math.cos(x2 - x1)));    
    }
    
    /**
     * 计算折线或者点数组的长度
     * @param {Polyline|Array<Point>} polyline 折线对象或者点数组
     * @returns {Number} 折线或点数组对应的长度
     */
    GeoUtils.getPolylineDistance = function(polyline){
        //检查类型
        if(polyline instanceof BMap.Polyline || 
            polyline instanceof Array){
            //将polyline统一为数组
            var pts;
            if(polyline instanceof BMap.Polyline){
                pts = polyline.getPath();
            } else {
                pts = polyline;
            }
            
            if(pts.length < 2){//小于2个点,返回0
                return 0;
            }

            //遍历所有线段将其相加,计算整条线段的长度
            var totalDis = 0;
            for(var i =0; i < pts.length - 1; i++){
                var curPt = pts[i];
                var nextPt = pts[i + 1]
                var dis = GeoUtils.getDistance(curPt, nextPt);
                totalDis += dis;
            }

            return totalDis;
            
        } else {
            return 0;
        }
    }


大概方法即以上方法。这里对方法进行改写。
写成java形式
package com.duduli.li.gps2baidu;

public class Point {
	private double x;
	private double y;
	public double getX() {
		return x;
	}
	public void setX(double x) {
		this.x = x;
	}
	public double getY() {
		return y;
	}
	public void setY(double y) {
		this.y = y;
	}
}


package com.duduli.li.gps2baidu;

import java.util.ArrayList;
import java.util.List;

public class Distacst {
	private double EARTHRADIUS = 6370996.81;
	
	public double degreeToRad(double degree){
		return Math.PI*degree/180;
	}
	
	public double _getRange(double v, int a, int b){
        if(a != 0){
            v = Math.max(v, a);
          }
          if(b != 0){
            v = Math.min(v, b);
          }
          return v;
      }
	
	public double _getLoop(double v, int a, int b){
        while( v > b){
            v -= b - a;
          }
          while(v < a){
            v += b - a;
          }
          return v;
      }
	
	
	public double getDis(List<Point> list){
		int size = list.size();
		double dis = 0.0;
		for(int i=0;i<size-1;i++){
			dis += EARTHRADIUS * Math.acos((Math.sin(degreeToRad(_getLoop(list.get(i).getY(), -74, 74))) * 
					Math.sin(degreeToRad(_getLoop(list.get(i+1).getY(), -74, 74))) + 
					Math.cos(degreeToRad(_getLoop(list.get(i).getY(), -74, 74))) *
					Math.cos(degreeToRad(_getLoop(list.get(i+1).getY(), -74, 74))) *
					Math.cos(degreeToRad(_getLoop(list.get(i).getX(), -180, 180)) - degreeToRad(_getLoop(list.get(i+1).getX(), -180, 180)))));
		}
		return dis;
	}
	

	
	public static void main(String[] args) {
		List<Point> list = new ArrayList<Point>();
		Point p1 = new Point();
		p1.setX(116.442953);
		p1.setY(39.982648);
		list.add(p1);
		
		Point p2 = new Point();
		p2.setX(116.444396);
		p2.setY(39.982521);
		list.add(p2);
		
		Point p3 = new Point();
		p3.setX(116.44574800000001);
		p3.setY(39.982348);
		list.add(p3);
		
		System.out.println(new Distacst().getDis(list));
		
		
//		System.out.println(new Distacst().getDis());
//		System.out.println(new Distacst().showList(getList()));
		
	}
	

}


传入参数为list。先算出两点之间的距离。然后进行累加。
如现在有3个点,那么先算1,2距离,然后算2,3距离。相加即得到结果。
以下是验证:






  • 大小: 161.9 KB
  • 大小: 30.2 KB
分享到:
评论
1 楼 di1984HIT 2015-12-25  
分别算么??

相关推荐

    JAVA项目暗箱和改写项目的图片

    【JAVA项目暗箱和改写项目】的知识点涵盖了多个领域,包括Java编程语言的基础、项目构建、代码管理和软件转型。以下是对这些知识点的详细解析: 1. **Java编程语言**:Java是一种广泛使用的面向对象的编程语言,...

    GPS坐标转换百度坐标js

    本文将详细讨论“GPS坐标转换百度坐标js”的相关知识点,包括GPS坐标系统、百度地图API、JavaScript编程以及批量处理坐标转换的方法。 首先,我们要了解的是GPS坐标系统。全球定位系统(GPS)使用的是WGS84坐标系,...

    百度地图,路书,边走边画线,显示详细消息demo

    百度地图,路书,边走边画线,显示详细消息demo,填上自己的ak可以正常运行,改写move方法

    js一般方法改写成面向对象方法的无限级折叠菜单示例代码

    在介绍如何将使用一般方法实现的无限级折叠菜单改写成面向对象的方式之前,需要了解几个重要的概念和知识点。 首先,无限级折叠菜单是一种网页元素,用户可以通过点击来展开或折叠菜单项,这种功能在导航栏中尤为...

    俄罗斯方块小游戏java改写

    本项目是基于Java语言改写的俄罗斯方块小游戏,旨在帮助初学者更好地掌握Java编程基础,同时体验游戏开发的乐趣。下面我们将深入探讨该项目中的主要知识点。 1. **Java基础知识**: - **类与对象**:游戏的核心...

    pdf_排序_java语言改写c_

    标题中的"pdf_排序_java语言改写c_"表明这是一个关于将C语言的排序算法转换为Java语言的教程或参考资料。这个主题对学习Java编程的学生,尤其是那些有一定C语言基础的人来说非常有帮助,因为他们可以通过对比两种...

    java利用接口和抽象类改写求圆的面积和梯形的面积.docx

    ### Java利用接口和抽象类改写求圆的面积和梯形的面积 #### 深入理解Java的接口和抽象类 在Java编程语言中,接口(Interface)和抽象类(Abstract Class)都是用于实现多态性和代码复用的重要概念。它们都无法被...

    个人亲测oracle触发器调用java程序

    Oracle触发器调用Java程序 Oracle触发器是Oracle数据库中...这将创建一个名为OracleTriggerJava的Java类,该类包含两个方法:main方法和modify方法。main方法用于文件的写入操作,而modify方法则用于文件的读写操作。

    echarts中使用天地图的插件示例

    echarts中使用天地图的插件示例,使用echarts中百度地图的插件改写,让其支持天地图的展示展示及使用。,使用echarts中高端地图的插件改写,让其支持天地图的展示及使用。 1.echarts-extension-tmap.js 在高度地图...

    根据javaeditor改写的bat编辑器

    【标题】"根据javaeditor改写的bat编辑器"是一个基于Eclipse示例程序`javaeditor`进行改造的项目,旨在创建一个专门针对批处理(BAT)脚本的文本编辑器。这个编辑器不仅具备基本的文本编辑功能,还特别加入了对BAT...

    大学Java基础代码计算器定时器简易银行等

    Java的`String`类提供了一些方法,如`indexOf()`和`contains()`,但更复杂的匹配可能需要用到正则表达式,通过`java.util.regex`包中的类实现。 每个项目都是一个独立的知识点,同时它们也相互关联,如事件处理、...

    ArcGIS For JS 改写的热力图

    ArcGIS For JavaScript (简称 ArcGIS for JS) 是Esri公司推出的一款强大的地图开发库,用于在Web应用中集成地理信息系统功能。它提供了一套完整的API,用于创建交互式的地图服务,包括矢量图层、栅格图层、地形图层...

    java-业务需求需要根据经纬度计算面积,整理了一下根据经纬度计算面积,根据openlayers借鉴改写,亲测可用

    java-业务需求需要根据经纬度计算面积,整理了一下根据经纬度计算面积,根据openlayers借鉴改写,亲测可用!

    sift 双目测距

    双目测距是一种基于计算机视觉技术的三维空间距离测量方法,它利用两个摄像头捕捉到的图像差异来计算物体的距离。SIFT(尺度不变特征变换)算法在此过程中扮演关键角色,因为它能够提供对图像尺度、旋转和光照变化的...

    android调用C语言实现内存的读取与修改的方法示例

    4. 最后,需要在 Java 代码中调用 JNI 类的native方法,以便实现内存的读取与修改。 示例代码 以下是使用 C 语言实现内存的读取与修改的示例代码: MainActivity.java: ```java package com.gs.jc; import ...

    Oracle查询优化改写技巧与案例2.zip

    《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...

    java普通作业程序

    普通作业啦。 需要的速度下载。

    尚硅谷Java8练习Java源码

    Java 8允许接口定义私有方法和静态方法,增强了接口的功能,使其能够更好地充当功能的容器。 以上就是Java 8的主要特性,通过尚硅谷的Java8练习源码,学习者可以实践这些概念,加深理解,并提升编程技能。这份源码...

    简单java文件过滤

    这里的“简单java文件过滤”指的是通过编程方式筛选出满足特定条件的文件,例如根据文件名、扩展名或文件内容进行过滤,并对这些文件进行进一步的操作,如改写特定字符串。下面我们将深入探讨这一主题。 首先,我们...

    Java核心技术 卷1

    《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了的部分内容,以便适应Java的最新特性。本版也不例外,它反遇了Java SE6的新特性...

Global site tag (gtag.js) - Google Analytics