最近我把Android开发作为一种爱好,并且正在寻求开发一个可以使用Google Maps查找和跟踪用户位置的应用程序。
应用程序具有GPS锁定后,应用程序可以使用覆盖类绘制路径来跟踪其移动。
我见过像Mytracks这样的类似应用程序是开源的,但它们现在对我来说太复杂了。
理想情况下,我很乐意创建一个看起来像这样的应用程序
他是我的代码,没有导入。
我要做的是创建一系列地理点。 每次位置更改时,都会创建一个新的地理点。 然后我尝试使用for循环遍历每个geopoint并在它们之间绘制路径。
public class Tracking extends MapActivity implements LocationListener {
LocationManager locman;
LocationListener loclis;
Location Location;
private MapView map;
List<GeoPoint> geoPointsArray = new ArrayList<GeoPoint>();
private MapController controller;
String provider = LocationManager.GPS_PROVIDER;
double lat;
double lon;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
initMapView();
initMyLocation();
locman = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// locman.requestLocationUpdates(provider,60000, 100,loclis);
// Location = locman.getLastKnownLocation(provider);
}
/** Find and initialize the map view. */
private void initMapView() {
map = (MapView) findViewById(R.id.map);
controller = map.getController();
map.setSatellite(false);
map.setBuiltInZoomControls(true);
}
/** Find Current Position on Map. */
private void initMyLocation() {
final MyLocationOverlay overlay = new MyLocationOverlay(this, map);
overlay.enableMyLocation();
overlay.enableCompass(); // does not work in emulator
overlay.runOnFirstFix(new Runnable() {
public void run() {
// Zoom in to current location
controller.setZoom(24);
controller.animateTo(overlay.getMyLocation());
}
});
map.getOverlays().add(overlay);
}
@Override
public void onLocationChanged(Location location) {
if (Location != null) {
lat = Location.getLatitude();
lon = Location.getLongitude();
GeoPoint New_geopoint = new GeoPoint((int) (lat * 1e6),
(int) (lon * 1e6));
controller.animateTo(New_geopoint);
}
}
class MyOverlay extends Overlay {
public MyOverlay() {
}
public void draw(Canvas canvas, MapView mapv, boolean shadow) {
super.draw(canvas, mapv, shadow);
Projection projection = map.getProjection();
Path p = new Path();
for (int i = 0; i < geoPointsArray.size(); i++) {
if (i == geoPointsArray.size() - 1) {
break;
}
Point from = new Point();
Point to = new Point();
projection.toPixels(geoPointsArray.get(i), from);
projection.toPixels(geoPointsArray.get(i + 1), to);
p.moveTo(from.x, from.y);
p.lineTo(to.x, to.y);
}
Paint mPaint = new Paint();
mPaint.setStyle(Style.STROKE);
mPaint.setColor(0xFFFF0000);
mPaint.setAntiAlias(true);
canvas.drawPath(p, mPaint);
super.draw(canvas, map, shadow);
}
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
应用程序运行良好且没有错误,但没有绘制路径,位置点只是随着移动而移动。
非常感谢任何帮助 感谢。
答案 0 :(得分:22)
您感谢的Android移动应用 open-gpstracker 的源代码可用here。
您可以使用SVN客户端应用程序或通过Git:
签出代码调试源代码肯定会对您有所帮助。
答案 1 :(得分:-1)
基本上,您需要执行以下操作才能使位置检测器成为Android应用
现在,如果您自己编写每个模块,那么需要很多时间和精力。因此,最好使用已经维护的现成资源。
使用所有这些资源,您将能够创建一个完美的android位置检测应用程序。
您首先需要收听用户的当前位置。您可以使用以下任何一种库来快速入门。
此库提供了最新的已知位置,位置更新
使用此库,您只需提供一个Configuration对象即可 您的要求,您将收到一个位置或失败原因 上面介绍了所有的东西。
使用Hypertrack Live应用程序的此开放源回购构建实时版本 在几个小时内即可在您的应用中分享位置信息。 HyperTrack Live应用程序可帮助您与朋友共享您的实时位置 途中通过您最喜欢的短信应用程序和家人 见面。 HyperTrack Live使用HyperTrack API和SDK。
Google Maps Android API utility library
如果您想在应用程序中添加路线图功能,可以使用 DrawRouteMaps使您的工作更加轻松。这是lib会帮助你 在两点LatLng之间绘制路线图。
使用Google地图上的路线/折线的简单,流畅的动画 预测。 (在制品)
该项目可让您计算两个之间的方向 位置,并使用Google在Google地图上显示路线 方向API。