在Maps Forge 0.5.1 MapView中获取点击位置的纬度和经度

10
我使用Maps Forge 0.5.1库(API参考文档)。我已经按照所有官方说明操作,但遇到以下问题:

我在(org.mapsforge.map.android.view.MapView)mapView上添加了一个onTouchListener,但是当我尝试调用mapView.getProjection()方法时,我收到了错误信息“无法解析该方法getProjection()”。即使这个方法在许多在线示例中被调用,但在官方API参考文档或MapView.class中却不存在。 org.mapsforge.map.android.view.MapView

 org.mapsforge.map.android.view.MapView mapView;
 mapView.setOnTouchListener(new View.OnTouchListener(){

        @Override
        public boolean onTouch(View v, MotionEvent ev) {
            int actionType = ev.getAction();
            switch (actionType) {
                case MotionEvent.ACTION_DOWN:

                    return false;

                case MotionEvent.ACTION_UP:
                    mapView.getProjection(); // the error is here

                    return true;
                case MotionEvent.ACTION_MOVE:
                    return false;
            }
            return false;
        }
    });

使用Mapsforge库有其他获取点击点的纬度和经度的替代方法吗?我做错了什么吗? 如果无法在点击后获取坐标,则认为该库缺少非常重要的内容。

谢谢

3个回答

6
使用
new MapViewProjection(mapView).fromPixels(double x, double y);

他们在0.4版本中颠倒了链接方式 - 现在不再从mapview获取投影,而是将mapview传递到投影中。

1
你可以利用TileRendererLayer中的onTap事件,这样你就不需要处理“View.onTouch”事件,后者更难以识别单次点击。
// tile renderer layer using internal render theme
MapDataStore mapDataStore = new MapFile(filename);
TileRendererLayer tileRendererLayer = 
        new TileRendererLayer(tileCache,
                              mapDataStore,
                              this.mapView.getModel().mapViewPosition,
                              AndroidGraphicFactory.INSTANCE) {
    @Override
    public boolean onTap(LatLong tapLatLong, Point layerXY, Point tapXY) {
        ShowTapLocation(tapLatLong);
        return true;
    }
};

1

你确定导入了正确的MapView吗?存在一个谷歌版本的MapView,它没有该功能,如果你导入了该版本,它可能会认为是错误的类。


不,我已将我的MapView声明为org.mapsforge.map.android.view.MapView。 - karvoynistas
嗯,我刚刚看了你指向的文档,那里也没有getProjection函数。不确定为什么你认为应该存在这个函数。 - Gabe Sechan
旧版本的mapsforge,如0.3或0.4,包含getProjection方法。问题是,有没有办法获取所点击点的坐标?奇怪的是,旧版本比最新版本更完整。 - karvoynistas
1
你应该尽量清楚地表达你的问题。按照你所写的,你的问题看起来像是一个编译问题,答案是“他们移除了这个函数,你不能使用它”。你想要的是“如何获取Mapsforge MapView上点击位置的纬度和经度”,这是一个完全合理但完全不同的问题。很可能会吸引更多人查看,而不是另一个编译问题的问题。 - Gabe Sechan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接