2013-02-09 94 views
0

我必须使用srceen中心的标记和移动地图 而不是标记获取标记显示点的纬度。我有搜索互联网的东西像拖动标记,但我是 不知道这是我需要什么。任何解决方案?通过一个稳定的标记获取纬度,经度?

+0

YOu可以收听地图movments并重新计算标记位置 – Mirco 2013-02-09 23:47:44

+0

在android中很难听地图的变化。 Android只有touchListeners。尝试在地图中心搜索绘制圆圈。我做了类似的事情。但是,我的观点迟迟没有跟上地图中心。如果您对我的代码感兴趣,请在这种情况下告诉我。 – 2013-02-10 08:08:22

回答

0

在你的mapActivity wrtie这。

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秒后移动的地图后执行的操作和/ /以下是您从地图中提起手指时的操作)关于我在另一篇文章上回答的指示。 这里Adding multiple overlays on mapview dynamically

编辑

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)。

+0

感谢您向我发送代码,但我有一个问题。在“l.CalclauteDistance”这一点,它告诉我,这是类型位置未定义。我应该改变这种方法与其他? – Dimitris 2013-02-13 15:30:01

+0

您可以使用distanceTo或API中可用的任何其他方法来计算两点之间的距离。但请确保它返回的数据类型。从现在起10个小时,我会用这种方法更新你。 – 2013-02-13 19:06:57

+0

对不起。这里是CalclauteDistance()方法。 – 2013-02-15 10:12:28