【问题标题】:Overriding osmdroid MapView’s Default Pan/move覆盖 osmdroid MapView 的默认平移/移动
【发布时间】:2014-07-17 20:31:50
【问题描述】:

我有 mapView 并以编程方式处理触摸事件。

问题是:如果mapview是ZoomOut到最大,平移会很小很慢,符合mapView是ZoomIn,平移会更大更快。换句话说:zoomIN 越大,平移运动越大。

如何使平移移动不相应地缩放,所以每次移动地图时,无论缩放级别如何,它都会移动相同的距离? 还是有其他方法可以覆盖地图视图中的平移?

这是我的安卓客户端

private double savedTouchedX = -1;
private double savedTouchedY = -1;
....

mapView.setOnTouchListener(new MapView.OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent event) {
            int action = event.getAction();
            final Projection pj = mapView.getProjection();
            GeoPoint eventPosition = (GeoPoint) pj.fromPixels((int)event.getX(), (int)event.getY());

             switch(action)
             {
                case MotionEvent.ACTION_DOWN:
                    savedTouchedX = eventPosition.getLongitude();
                    savedTouchedY = eventPosition.getLatitude();
                    break;
                case MotionEvent.ACTION_MOVE:
                    doPanning(eventPosition, mapView);
                    break;
                case MotionEvent.ACTION_UP:
                    doPanning(eventPosition, mapView);
                    savedTouchedX = -1;
                    savedTouchedY = -1;
                    break;
                default:
                    break;
             }
             return true;
        }
    });

//move mapView
private boolean doPanning(GeoPoint e, MapView mapView)
 {
        GeoPoint mapCenter = (GeoPoint) mapView.getMapCenter();
        GeoPoint panToCenter = new GeoPoint((int)(mapCenter.getLatitudeE6() + (e.getLatitude() - savedTouchedY) * 1E5),
        (int)(mapCenter.getLongitudeE6() - (e.getLongitude() - savedTouchedX) * 1E5));
        mapView.getController().setCenter(panToCenter);
    savedTouchedX = e.getLongitude();
    savedTouchedY = e.getLatitude();
    return true;
 }

【问题讨论】:

  • 您可能会使用 MapView 的 setOnDragListener 可能会有所帮助。否则,您可以使用 GeoLocations 逐步平移。只是一个想法。
  • 感谢@zIronManBox。我更新了上面实现 GeoLocations 的代码,但地图平移与鼠标方向相反。如果我向上移动它,它就会下降,如果我向右移动它,它就会向左移动。我的实现有问题吗?

标签: android android-mapview osmdroid touch-event panning


【解决方案1】:

您必须将 MotionEvent 位置(在屏幕坐标中)转换为 Map 位置。 这根本不是同一个坐标系!

final Projection pj = mapView.getProjection();
GeoPoint eventPosition = (GeoPoint) pj.fromPixels((int)event.getX(), (int)event.getY());

【讨论】:

  • 感谢@Mker。我更新了上面的代码来实现这一点,但是地图平移与鼠标方向相反。如果我向上移动它,它就会下降,如果我向右移动它,它就会向左移动。我的实现有问题吗?
  • 其实他们有平移有一个奇怪的行为
  • 您目前正在混合使用 getLatitudeE6 和 e.getLatitude()*1E5。一旦你添加,一旦你减去......“GeoPoint panToCenter = new GeoPoint(mapCenter.getLatitude() + e.getLatitude() - savedTouchedY, mapCenter.getLongitude() + e.getLongitude() - savedTouchedX);”应该会更好。
猜你喜欢
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多