精华内容
下载资源
问答
  • Java实现dijkstra算法地图中任意起点寻找最佳路径
    2021-03-15 21:01:25

    wl){

    if(wl.size() == 0){

    System.out.println("done");

    return false;

    }else if(wl.size() == 1){

    current = wl.get(0).getDest();

    length = wl.get(0).getDist();

    Route.add(Route.size(), wl.get(0));

    wl.remove(wl.get(0));

    }else{

    Node s = wl.get(0);

    for(Node a:wl){

    if(a.getDist()s = a;

    }

    }

    current = s.getDest();

    length = s.getDist();

    Route.add(Route.size(), s);

    wl.remove(s);//将waiting list中的这一点删去

    }

    return true;

    }

    public void wrap(String start, String stop){

    current = start;

    if(addNodes()){

    for(int i=0;;i++){

    if(stop == current){

    //Route.add();

    break;}

    toWait(current);

    if(selectNext(Waiting))

    continue;

    else

    break;

    }

    if(Route.size()!=0&&Route.get(Route.size()-1).getDest()==stop){

    linkRoute(Route);

    System.out.print(Route.get(0).getDep()+" -> ");

    for(Node a:Route){

    System.out.print(a.getDest()+" ");

    }

    System.out.print("distance: "+Route.get(Route.size()-1).getDist()+"\n");

    }

    else

    System.err.println("no fucking way");

    }

    }

    public static void main(String[] args){

    new Dijkstra().wrap("A","G");

    }

    }

    class Node{

    String From;

    String To;

    int distance;

    Node(String f, String t, int d){

    this.From = f;

    this.To = t;

    this.distance = d;

    }

    public String getDep(){

    return this.From;

    }

    public String getDest(){

    return this.To;

    }

    public int getDist(){

    return this.distance;

    }

    }

    更多相关内容
  • java编写的轨迹纠偏算法,包含异常点检测、滤波平滑,以及代码使用示例和结果分析
  • 地图轨迹平滑算法

    万次阅读 2016-08-04 00:21:34
    地图轨迹平滑算法,Savitzky-Golay 滤波器

    地图轨迹平滑算法

    引子:

    之前看到网上有大神写过一个demo:
    http://blog.csdn.net/zhoumushui/article/details/41751259
    这里写图片描述
    但是提供的代码不全,一直没有明白这个算法是怎么做的:
    这里写图片描述
    这里写图片描述

    算法说明:

    后来一次偶然的机会,看到这篇文章(注意,这篇文章里的代码,部分算法的参数是错的):
    http://blog.csdn.net/liyuanbhu/article/details/11119081
    这里写图片描述
    其中的5点平滑代码恰恰和之前描述的一样,原来之前的文章只给出了边缘4个点(最前面2个点、最后面2个点),恰恰漏掉了最关键的中间所有点、虽然只是简单的5点平均

    这个算法是Savitzky-Golay 滤波器的“5点1阶”算法。那么,怎么推导出“n点k阶”的系数呢?笔者没有时间去仔细研究算法本身,只想找到最快的方法解决问题,最后发现可以通过MatLab直接的得到这些参数,比如:
    这里写图片描述
    这个矩阵前2行对应前两个点的系数,后2行对应后两个点的系数,中间行对应中间所有点的系数。

    结论:这样就完成了,用MatLab 根据需要得到矩阵,然后就可以编程了!

    展开全文
  • 地图纠偏算法

    2014-06-30 09:41:11
    算法主要是用于GPS坐标系转换成谷歌,高德的坐标
  • gps坐标转地图坐标算法,纠偏算法。GPS坐标就是传说中大地坐标系统(WGS-84),国内的互联网公司,都不会使用GPS坐标,因为这不符合国家政策。所以大家都会使用GCJ-02坐标系,如腾讯搜搜地图、搜狐搜狗地图、阿里云...
  • 利用Arcgis的API实现地图目标轨迹平滑移动。多目标示例:实现多个目标同时在地图上沿轨迹坐标点平滑移动,支持设置移动速度。单个目标示例有暂停、继续等功能代码。代码示例仅供参考。
  • 为此,提出一种基于地图匹配的时空轨迹匿名算法,利用真实路网数据构造假轨迹的候选匹配集,通过设置时间和空间匿名函数,利用启发式广度优先搜索算法搜索目标匹配轨迹点,满足时空匿名性和空间相关性的隐私安全条件...
  • 基于海量公交轨迹数据挖掘的地图匹配算法.pdf
  • GPS经纬度转转算法 GPS原始经纬度举例: 经度: 0c7e4c70 (116.44649777778) 纬度: 04486f08 (39.919933333333) 原始经度:保留6位小数 结果为:116.446497 原始纬度:保留6位小数 结果为:39.919933 然后再精确...
  • 基于融合函数构建的GPS车辆轨迹地图匹配算法.pdf
  • 北京出租车GPS轨迹数据地图匹配算法研究.pdf
  • GPS轨迹数据的综合地图匹配算法研究.pdf
  • 一种滑动窗口的GPS轨迹地图匹配算法.pdf
  • 动态GPS轨迹数据的地图匹配算法分析与初探.pdf
  • TraceByAmap - 自定义算法纠偏高德地图定位
  • 基于浮动车GPS轨迹点数据的地图匹配算法研究.pdf
  • 地图匹配算法的有效性和可靠性对于智能交通系统而言是非常重要的,而目前存在的...新算法引入Zernike矩描述轨迹曲线的形状,进一步修正了错误结果。通过仿真和实验表明,新算法在复杂环境下具有较强的有效性和可靠性。
  • 道格拉斯-普克算法(Douglas–Peucker algorithm,亦称为拉默-道格拉斯-普克算法、迭代适应点算法、分裂与合并算法)是将曲线近似表示为一系列点,并减少点的数量的一种算法。它的优点是具有平移和旋转不变性,给定...
    道格拉斯算法简介

    道格拉斯-普克算法(Douglas–Peucker algorithm,亦称为拉默-道格拉斯-普克算法、迭代适应点算法、分裂与合并算法)是将曲线近似表示为一系列点,并减少点的数量的一种算法。它的优点是具有平移和旋转不变性,给定曲线与阈值后,抽样结果一定。

    算法思想

    算法的基本思路是:对每一条曲线的首末点虚连一条直线,求所有点与直线的距离,并找出最大距离值dmax ,用dmax与限差D相比:若dmax <D,这条曲线上的中间点全部舍去;若dmax ≥D,保留dmax 对应的坐标点,并以该点为界,把曲线分为两部分,对这两部分重复使用该方法。

    应用场景

    最近有需求是 页面展示某物体的运动轨迹,但是在数据库中存入了这个物体的运动轨迹,但是存入的点太多,有上万个,担心前段地图展示会比较卡。所以需要java 后端 来对运动轨迹的点来做一下抽稀。此时就比较适合考虑道格拉斯算法来对轨迹的点进行处理了.

    代码实现
    //地图点实体类  get,set方法 以及其他不重要的字段已省略.
    public class Point{
    	private double lng;
    	private double lat;
    }
    //douglas算法实现类
    public class DouglasUtils{
    
    	//定义允许点的最大偏差距离
    	public static final double max = 1f;
    	
    	//利用三角形的勾股定理来求两点的距离
    	public static double calDistance(Point p1,Point p2){
    		double a = Math.round( (p2.getLng()-p1.getLng() )*100000);//求经度方向的距离差,同一纬度,经度每差一度,距离差大约 110000米
    		double b = Math.round( (p2.getLat()-p1.getLat() )*111320);//求纬度方向的距离差,同一经度,纬度每差一度,距离大约差100000米
    		return Math.sqrt(Math.pow(a,2) + Math.pow(b,2) );
    	}
    	
    	//计算点到直线的距离,将点和线的起点终点来看成为三角形,求点到直线的距离,就是求点到这条线的高, 来利用海伦公式利用三边长来求出面积,在利用面积和底边长来求出高
    	public static double calPointToLine(Point start,Point end,Point target){
    		//求三边长
    		double a = calDistance(target,start);
    		double b = calDistance(target,end);
    		double c = calDistance(start,end);
    		double p = (a + b + c)/2.0;
    		//求出三角形面积
    		double s = Math.sqrt(Math.abs( p*(p-a)*(p-b)*(p-c) ));
    		return s*2.0/c;
    	}
    	//递归方法实现轨迹点压缩
    	public static void compressLine(List<Point> points,int start,int end,List<Point> resList){
    		Point startPoint = points.get(start);
    		Point endPoint = points.get(end);
    		double maxDistance = 0;
    		int index = 0;
    		//遍历出离线距离最大的点
    		for(int i=start;i<=end;i++){
    			double currDistance = calPointToLine(startPoint,points.get(),points.get(i));
    			if(currDistance>maxDistance){
    				maxDistance = currDistance;
    				index = i;
    			}
    		}
    		//如果离线最大距离 没有超过了我们设置的最大偏移距离,就再以这个点为界限,分成两段,再分别去递归查询,并且要把这个点添加到存放压缩点的resList
    		//添加元素一定要在递归该点之前的路线之后添加,这样可以保证点的相对顺序不会变,否则点会顺序不对,在地图上连线是有问题的
    		if(maxDistance>max && index!=0){
    			compressLine(points,start,index-1,resList);
    			if(!resList.contains(points.get(index))){
    				resList.add(points.get(index));
    			}
    			compressLine(points,index+1,end-1,resList);
    		}
    	}
    
    	//获取压缩点的结果的方法,要想用道格拉斯算法抽稀点就可以调用此方法,传入点的集合即可.
    	public static List<Point> getCompressList(List<Point> list){
    		//存放压缩后点的集合
    		List<Point> resList = new ArrayList<>();
    		if(list.isEmpty()){
    			return resList;
    		}
    		compressLine(list,0,list.size()-1,resList);
    		return resList;
    		
    	}
    }
    
    

    经纬度丢失计算距离

    1.纬度相同,经度不同
    在纬度相同的情况下:
    经度每隔0.00001度,距离相差约1米;
    每隔0.0001度,距离相差约10米;
    每隔0.001度,距离相差约100米;
    每隔0.01度,距离相差约1000米;
    每隔0.1度,距离相差约10000米。
    2.经度相同,纬度不同
    纬度每隔0.00001度,距离相差约1.1米;
    每隔0.0001度,距离相差约11米;
    每隔0.001度,距离相差约111米;
    每隔0.01度,距离相差约1113米;
    每隔0.1度,距离相差约11132米。

    展开全文
  • 一种改进的基于低样本率数据集地图匹配算法,王东,李论,地图匹配算法是将一组有序的用户采集的GPS位置信息映射到电子地图中的路径网络中的方法。现有的基于低样本率数据集的地图匹配算法
  • gps地图匹配算法

    2013-04-22 21:34:59
    gps地图匹配算法,对地图匹配的几种算法进行深入分析和比较
  • 综合考虑浮动车数据轨迹点之间的整体特性,在局部和全局地图匹配算法的基础上,提出了一种基于改进AOE网络的低频浮动车数据地图匹配方法.首先,采用相交分析判断GPS点缓冲区和候选路段的关系,以获取候选路段和候选匹配...
  • 地图匹配是许多位置服务与轨迹挖掘应用的基础.随着定位技术和位置服务应用的发展,地图匹配研究不断演进,从早期基于高采样率GPS(Global Position System)的实时匹配,到近期基于低采样率GPS轨迹的离线匹配、再到...
  • 地图匹配算法的有效性和可靠性对于智能交通系统而言是非常重要的,而目前存在的地图...新算法引入Zernike矩描述轨迹曲线的形状,进一步修正了错误结果。通过仿真和实验表明,新算法在复杂环境下具有较强的有效性和可靠性。
  • 一个基于位置点匹配的地图匹配算法
  • 一、Android:(红色方法为主调函数,输入原始经纬度,输出纠偏后的经纬度)final static double pi = 3.14159265358979324;final static double a = 6378245.0;final static double ee = 0.0066934216229659...

    推荐一个程序员开发、学习的好网站,www.it123.top

    欢迎大家转发收藏。

    2ab9bb7168e8

    一、Android:(红色方法为主调函数,输入原始经纬度,输出纠偏后的经纬度)

    final static double pi = 3.14159265358979324;

    final static double a = 6378245.0;

    final static double ee = 0.00669342162296594323;

    public static double[] transform(double wgLat, double wgLon) {

    double[] latlng = new double[2] ;

    if (outOfChina(wgLat, wgLon)) {

    latlng[0] = wgLat;

    latlng[1] = wgLon;

    return latlng ;

    }

    double dLat = transformLat(wgLon - 105.0, wgLat - 35.0);

    double dLon = transformLon(wgLon - 105.0, wgLat - 35.0);

    double radLat = wgLat / 180.0 * pi;

    double magic = Math.sin(radLat);

    magic = 1 - ee * magic * magic;

    double sqrtMagic = Math.sqrt(magic);

    dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);

    dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);

    latlng[0] = wgLat + dLat;

    latlng[1] = wgLon + dLon;

    return latlng ;

    }

    private static boolean outOfChina(double lat, double lon) {

    if (lon < 72.004 || lon > 137.8347)

    return true;

    if (lat < 0.8293 || lat > 55.8271)

    return true;

    return false;

    }

    private static double transformLat(double x, double y) {

    double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y

    + 0.2 * Math.sqrt(Math.abs(x));

    ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;

    ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;

    ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;

    return ret;

    }

    private static double transformLon(double x, double y) {

    double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1

    * Math.sqrt(Math.abs(x));

    ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;

    ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;

    ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0

    * pi)) * 2.0 / 3.0;

    return ret;

    }

    二、IOS(红色方法为主调函数,输入原始经纬度,输出纠偏后的经纬度)

    const double a = 6378245.0;

    const double ee = 0.00669342162296594323;

    const double pi = 3.14159265358979324;

    +(double *)transformFromWGSToGCJ:(double)longitude and:(double)latitude

    {

    if([self isLocationOutOfChina:longitude and:latitude]){

    double are[] = {longitude ,latitude} ;

    return are ;

    }else{

    double adjustLat = [self transformLatWithX:longitude - 105.0 withY:latitude - 35.0];

    double adjustLon = [self transformLonWithX:longitude - 105.0 withY:latitude - 35.0];

    double radLat = latitude / 180.0 * pi;

    double magic = sin(radLat);

    magic = 1 - ee * magic * magic;

    double sqrtMagic = sqrt(magic);

    adjustLat = (adjustLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);

    adjustLon = (adjustLon * 180.0) / (a / sqrtMagic * cos(radLat) * pi);

    double jiupian_longitude = longitude + adjustLon ;

    double jiupian_latitude= latitude + adjustLat ;

    double are[] = {jiupian_longitude ,jiupian_latitude} ;

    return are ;

    }

    }

    //判断是不是在中国

    +(BOOL)isLocationOutOfChina:(double)longitude and:(double)latitude

    {

    if (longitude < 72.004 || longitude > 137.8347 || latitude < 0.8293 ||latitude > 55.8271)

    return YES;

    return NO;

    }

    +(double)transformLatWithX:(double)x withY:(double)y

    {

    double lat = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(abs(x));

    lat += (20.0 * sin(6.0 * x * pi) + 20.0 *sin(2.0 * x * pi)) * 2.0 / 3.0;

    lat += (20.0 * sin(y * pi) + 40.0 * sin(y / 3.0 * pi)) * 2.0 / 3.0;

    lat += (160.0 * sin(y / 12.0 * pi) + 320 * sin(y *pi / 30.0)) * 2.0 / 3.0;

    return lat;

    }

    +(double)transformLonWithX:(double)x withY:(double)y

    {

    double lon = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(abs(x));

    lon += (20.0 * sin(6.0 * x * pi) + 20.0 * sin(2.0 * x * pi)) * 2.0 / 3.0;

    lon += (20.0 * sin(x * pi) + 40.0 * sin(x / 3.0 * pi)) * 2.0 / 3.0;

    lon += (150.0 * sin(x / 12.0 * pi) + 300.0 * sin(x / 30.0 * pi)) * 2.0 / 3.0;

    return lon;

    }

    展开全文
  • 针对智能交通领域中动态轨迹点的地图匹配问题,提出并设计了一种基于动态规划算法轨迹匹配软件,并在路网拓扑构建、最短路径计算方面进行改进优化,提升了软件工作性能。工程应用表明,该软件具有较好的计算精度和效率...
  • 本文针对低采样率GPS轨迹提出了一种新的全局地图匹配算法ST-Matching.ST-Matching考虑(1)道路网络的空间几何和拓扑结构以及(2)时空轨迹的速度限制。 基于时空分析,构造候选图,从中识别出最佳匹配路径序列。 ...
  • 点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别,即求点到线段最短距离时需要考虑参考点在沿线段方向的投影点是否在线段上,若在线段上才可采用点到直线距离公式
  • 地图坐标轨迹平滑和纠偏

    千次阅读 2021-03-09 21:07:13
    轨迹平滑和纠偏纠偏通过gps获取坐标点时 因为gps信号不稳定等原因 出现坐标点异常 不符合实际 进行异常点的处理 来对轨迹纠正轨迹偏移不正常...百度地图鹰眼服务:源码主要实现思路:计算相邻坐标点之间距离 通过...
  • 地图匹配算法实践

    2020-12-23 12:06:00
    地图匹配(Map Matching)是指将行车轨迹的经纬度采样序列与数字地图路网匹配的过程,其本质上是平面线段序列的模式匹配问题( Alt等,2003)。在实际应用中,GPS采样信号的质量会严重影响地图匹配结果:采样频率的降低...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,179
精华内容 3,671
关键字:

地图轨迹算法