最近、私は趣味としてAndroid開発を取り上げ、Googleマップを使用してユーザーの位置を検索および追跡できるアプリケーションの開発を探していました。
アプリケーションがGPSロックを取得すると、アプリケーションはオーバーレイクラスを使用してルートを描画することにより、自分の動きを追跡できます。
オープンソースのMytracksのような類似のアプリケーションを見てきましたが、今は複雑すぎます。
理想的には、このようなアプリケーションを作成したいと思います
彼は以下のインポートなしの私のコードです。
私がやろうとしているのは、ジオポイントの配列を作成することです。場所が変わるたびに、新しいジオポイントが作成されます。次に、forループを使用して各ジオポイントを反復処理し、それらの間にパスを描画してみます。
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;
}
}
アプリケーションはエラーなしで正常に実行されますが、描画されるパスはなく、移動すると位置ドットが移動します。
どんな助けでも大歓迎ですありがとう。
感謝したAndroidモバイルアプリケーションopen-gpstrackerのソースコードが利用可能です here 。
SVNクライアントアプリケーションまたはGitを使用してコードをチェックアウトできます。
ソースコードのデバッグはきっとあなたを助けます。
基本的に、位置検出機能Androidアプリを作成するには、次のものが必要です
これらの各モジュールを自分で記述すると、多くの時間と労力が必要になります。そのため、すでに維持されている使用可能なリソースを使用するの方が良いでしょう。
これらすべてのリソースを使用して、完璧なAndroid位置検出アプリを作成できます。
まず、ユーザーの現在の場所をリッスンする必要があります。以下のライブラリのいずれかを使用して、クイックスタートを行うことができます。
このライブラリは、最後の既知の場所、場所の更新を提供します
このライブラリを使用すると、必要な設定を構成オブジェクトに提供するだけで、上記のすべての処理が行われた場所または失敗の理由を受け取ります。
Hypertrack Liveアプリのこのオープンソースリポジトリを使用して、数時間以内にアプリ内でライブロケーション共有エクスペリエンスを構築します。 HyperTrack Liveアプリを使用すると、待ち合わせ中にお気に入りのメッセージングアプリを使用して、ライブロケーションを友人や家族と共有できます。 HyperTrack LiveはHyperTrack APIとSDKを使用します。
GoogleマップAndroid APIユーティリティライブラリ
アプリにルートマップ機能を追加する場合は、DrawRouteMapsを使用して作業をより簡単にすることができます。これは、2つのポイントLatLng間のルートマップの描画に役立つlibです。
投影を使用したGoogleマップのルート/ポリラインのシンプルでスムーズなアニメーション。 (仕掛品)
このプロジェクトでは、2つの場所間の方向を計算し、Google Directions APIを使用してGoogleマップにルートを表示できます。