話不多說直接看**在
public class googlemovemarker
public void setpoints(listvar1)
stopmove();
points.clear();
iterator var7 = var1.iterator();
while (var7.hasnext())
}eachdistance.clear();
totaldistance = 0.0d;
for (int var8 = 0; var8 < points.size() - 1; ++var8)
remaindistance = totaldistance;
latlng var9 = points.get(0);
if (marker != null) else
marker = mmap.addmarker((new markeroptions()).position(var9).icon(descriptor).title("").anchor(0.5f, 0.5f));
}reset();
} catch (throwable var5) }}
//設定圖示 機動時間長度
public void setduration(int speed)
//重置
public void reset()
status = state.a;
}} catch (interruptedexception var1)
}//設定圖示
private void checkmarkericon()
marker.seticon(descriptor);
usedefaultdescriptor = false;}}
//設定總滑動時間
public void settotalduration(int var1)
/*** 開始移動
*/public void startsmoothmove() else
index = 0;
try catch (throwable var3) }}
}private class c implements runnable
public final void run()
if (status != state.d) }}
status = state.e;
} catch (throwable var5) }}
/*** 設定位置
* @param var1
*/private void getcurposition(long var1)
var3 -= var7;
}if (var9 != index && movelistener != null)
index = var9;
if (movelistener != null) movelistener.move(points.get(var9), points.get(var9 + 1));
}/**
* 根據兩點算取圖示轉的角度
*/public double getrotate(latlng frompoint, latlng topoint) else
}float deltangle = 0;
if ((topoint.latitude - frompoint.latitude) * slope < 0)
double radio = math.atan(slope);
double angle = 180 * (radio / math.pi) + deltangle - 90;
return angle;
}/**
* 算斜率
*/private double getslope(latlng frompoint, latlng topoint)
double slope = ((topoint.latitude - frompoint.latitude) / (topoint.longitude - frompoint.longitude));
return slope;
}/**
* 停止移動
*/public void stopmove()
}public marker getmarker()
public latlng getposition()
public int getindex()
public void resetindex()
/*** 銷毀
*/public void destroy()
if (marker != null)
object var1 = mlock;
synchronized (mlock)
} catch (throwable var4)
}public void removemarker()
points.clear();
eachdistance.clear();
}public void setposition(latlng var1) else
marker = mmap.addmarker((new markeroptions()).position(var1).icon(descriptor).title("").anchor(0.5f, 0.5f));}}
public void setdescriptor(bitmapdescriptor var1)
descriptor = var1;
if (marker != null)
}public void setrotate(float var1)
}public void setvisible(boolean var1)
}private class b implements threadfactory
public final thread newthread(runnable var1)
}public void setmovelistener(movelistener var1)
public inte***ce movelistener
private enum state
}}
下面是建立marker 的移動軌跡所有的 經緯度列表
public void setmarker(listpoints)
@override
public void move(latlng start, latlng end)
});}
//設定marker 移動間隔時間,越小移動的越快
mmovemarker.setduration(duration);
// 設定平滑移動的總時間 單位 秒
mmovemarker.settotalduration(mlistbeans.size() / 10);
// 設定軌跡點
mmovemarker.setpoints(points);
//停止移動
mmovemarker.stopmove();
//開始移動
mmovemarker.startsmoothmove();
//重置points下標
mmovemarker.resetindex();
//重置marker位置
mmovemarker.reset();
//設定起始移動點
mmovemarker.setposition(mpoints.get(0));
//設定兩點之間marker圖示方向的角度
mmovemarker.setrotate((float) mmovemarker.getrotate(start, end));
軌跡預處理(軌跡壓縮)
在介紹兩類壓縮演算法之前,本文先介紹兩種 距離度量 方法 第一種距離度量方法是 垂直的歐幾里得距離,如圖b所示,p1 p7 p12作為壓縮後的點。垂直度量 則為做垂線計算。第二種距離度量方法是 時間同步的歐幾里得距離,如圖a所示,p1 p7 p12作為壓縮後的點。p1與p2之間是3秒,p2與p3之間...
軌跡預處理(軌跡分段)
在軌跡聚類,分類之前,我們通常要將軌跡分段。第一種軌跡分段方法是利用 時間間隔 分段。具體來說,如果兩個軌跡點之間的時間差較大,則進行分段 另外一種則是按照時間段將軌跡分段。第二種方法是基於軌跡的形狀。具體來說,基於軌跡點方向的角度變化大小分段,如果變化超過一定的閾值,則分段 另外一種方法 線簡化 ...
智慧型循跡小車 循跡小車電子製作
第一步根據元器件清單清點器件,看是否缺件少件。下圖是元器件全家福 第二步依次焊接元器件 要先焊接小的元器件,再焊接大的元器件,最後粘上電池座和馬達。焊接好所有元器件後再次肉眼檢查有沒有焊反,虛焊漏焊的點。確認無誤後,進行第三步。第三步裝上電池除錯。電馬達的2根線可能會裝反,光敏電阻和發光二極體的相對...