0

画面の中心にマーカーを配置し、マーカーではなくマップを移動して、マーカーが示すポイントの緯度経度を取得するアプリケーションを作成する必要があります。Drag Marker のようなものをインターネットで検索しましたが、これが必要かどうかわかりません。解決策はありますか?

4

1 に答える 1

0

あなたのmapActivityでこれを書いてください。

Location l = new Location();
// Location class will be used to calculate distance moved by map
TimerTask tm;
GeoPoint oldCenterOfMap, newCenteOfMap;

// アクティビティの再開メソッドで oldCenterOfMap = mapView.getMapCenter(); を実行します。

Handler mHandler = new Handler();
int isTouched = 0;
MapView mapview = (MapView) findViewById(R.id.yourmapview_from_xml);

mapView.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_UP) {
newCenteOfMap = mapView.getMapCenter();

if (mapchanged(oldCenterOfMap, newCenteOfMap)) {
isTouched++;

    // Here is what would you do when you lift your finger fromt he map*****
newCenteOfMap =mapView.getMapCenter());

if (isTouched >= 1) {
if (isTouched > 1) {
mHandler.removeCallbacks(tm_circle);
isTouched = 1;
}
mHandler.postDelayed(tm_circle, 1200);
}
}
if (!mapchanged(oldCenterOfMap, newCenteOfMap))
mHandler.removeCallbacks(tm_circle);
}

return false;
}
});


tm_circle = new TimerTask() {

@Override
public void run() {
isTouched = 0;
// here is what you do after you touched a map moved after 1.2 seconds
oldCenterOfMap = mapView.getMapCenter();

}
};


public boolean mapchanged(GeoPoint oldCenter, GeoPoint newCenter) {

    String distance = l.CalclauteDistance(oldCenter.getLongitudeE6() / 1E6,
            oldCenter.getLatitudeE6() / 1E6,
            newCenter.getLongitudeE6() / 1E6,
            newCenter.getLatitudeE6() / 1E6);

    if (Double.valueOf(distance) == 0.0)
        return false;
    else
        return true;
}

以前のコードでは、マップの移動を追跡していました。次のコードは、マップ移動の場合に応答します。上記のコードにあるコメント ( // ここでは、1.2 秒後に移動した地図に触れた後に行うことと // 地図から指を離したときに行うことを示します*****) に従ってください。別の投稿での私の答えの説明。ここで mapview に複数のオーバーレイを動的に追加する

編集

public String CalclauteDistance(double long1, double lat1, double long2,
        double lat2) {
    String Result;
    Point p1 = new Point(long1, lat1);
    Point p2 = new Point(long2, lat2);
    Result = p1.distanceTo(p2) + "";
    return Result;

}

これは、ロケーション クラスの関数 (CalclauteDistance) です。

于 2013-02-12T07:47:12.057 に答える