Получите широту и долготу позиции, нажатой на карту forge 0.5.1 MapView

Я использую библиотеки forge 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;
        }
    });

Есть ли какой-либо альтернативный способ получения широты и долготы точки с использованием mapforge lib? Я делаю что-то неправильно? Если нет способа получить координаты после крана, я считаю, что в библиотеке отсутствует что-то очень важное.

Спасибо

Ответ 1

Используйте

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

THey изменил привязку в версии 0.4 или так далее, вместо того, чтобы получать проекцию из mapview, вы передаете карту в проекцию.

Ответ 2

Вы уверены, что импортировали правильный MapView? Существует версия Google MapView, которая не имеет этой функции, если вы импортировали ее, чтобы думать о ее неправильном классе.

Ответ 3

Вы можете использовать событие 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;
    }
};