创建Android GPS跟踪应用程序

时间:2011-02-23 19:43:39

标签: android dictionary gps tracking

最近我把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;
}
}

应用程序运行良好且没有错误,但没有绘制路径,位置点只是随着移动而移动。

非常感谢任何帮助 感谢。

2 个答案:

答案 0 :(得分:22)

您感谢的Android移动应用 open-gpstracker 的源代码可用here

您可以使用SVN客户端应用程序或通过Git:

签出代码

调试源代码肯定会对您有所帮助。

答案 1 :(得分:-1)

基本上,您需要执行以下操作才能使位置检测器成为Android应用

现在,如果您自己编写每个模块,那么需要很多时间和精力。因此,最好使用已经维护的现成资源

使用所有这些资源,您将能够创建一个完美的android位置检测应用程序。

1。位置监听

您首先需要收听用户的当前位置。您可以使用以下任何一种库来快速入门。

Google Play Location Samples

此库提供了最新的已知位置,位置更新

Location Manager

  

使用此库,您只需提供一个Configuration对象即可   您的要求,您将收到一个位置或失败原因   上面介绍了所有的东西。

Live Location Sharing

  

使用Hypertrack Live应用程序的此开放源回购构建实时版本   在几个小时内即可在您的应用中分享位置信息。   HyperTrack Live应用程序可帮助您与朋友共享您的实时位置   途中通过您最喜欢的短信应用程序和家人   见面。 HyperTrack Live使用HyperTrack API和SDK。

2。标记库

Google Maps Android API utility library

  • 标记聚类-处理大量点的显示
  • 热图-将大量点显示为热图
  • IconGenerator -在标记上显示文本
  • 多路解码和编码-路径的紧凑编码, 与Maps API网络服务的互操作性
  • 球面几何-例如:computeDistance,computeHeading, computeArea
  • KML -显示KML数据
  • GeoJSON —显示GeoJSON数据并设置其样式

3。折线库

DrawRouteMaps

  

如果您想在应用程序中添加路线图功能,可以使用   DrawRouteMaps使您的工作更加轻松。这是lib会帮助你   在两点LatLng之间绘制路线图。

trail-android

  

使用Google地图上的路线/折线的简单,流畅的动画   预测。 (在制品)

Google-Directions-Android

  

该项目可让您计算两个之间的方向   位置,并使用Google在Google地图上显示路线   方向API。

A map demo app for quick start with maps