10

我使用地图伪造 0.5.1 库(api 参考)我已遵循所有官方说明,但我有以下问题:

我在上面附加了一个 onTouchListener

(org.mapsforge.map.android.view.MapView)mapView

但是当我尝试调用方法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 lib 获取点击点的纬度和经度?难道我做错了什么?如果点击后无法获得坐标,我认为图书馆缺少一些非常重要的东西。

谢谢

4

3 回答 3

6

利用

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

他们在 0.4 版左右反转了链接 - 现在不是从 mapview 获取投影,而是将 mapview 传递给投影。

于 2015-05-21T21:53:13.583 回答
1

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

于 2015-05-21T20:09:28.810 回答
1

您可以使用 中的onTap事件TileRendererLayer,这样您就不需要处理 ``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;
    }
};
于 2017-07-13T16:17:00.873 回答