Как переместить слой Mapsforge (маркер) в Android

Я использую Mapsforge 0.5 для Android. Я добавил несколько маркеров на карту:

map.getLayerManager().getLayers().add(layer);

То, что я пытаюсь сделать, это изменить положение существующего слоя. У меня есть ссылка на сохраненный объект, но нет никакого способа переместить маркер. Есть только геттер для позиции

layer.getPosition() : LatLong

Поля широты и долготы LatLong являются окончательными :( Я решил проблему, сначала удалив слой, а затем добавив его снова, но это приводит к некоторой дополнительной логике координации. Есть ли способ, которым я действительно могу переместить слой (маркер)?


person maddob    schedule 07.01.2015    source источник
comment
Слой абстрактного класса определяет метод getPosition() для возврата null. github.com/mapsforge/mapsforge/blob/master/mapsforge-map/src/ Любой расширенный класс, такой как TileLayer, не изменяет его.   -  person ecle    schedule 07.01.2015
comment
Хорошо, класс Marker расширяется от Layer с измененным getPosition() Значение частного поля Marker.this.latLong даже не является окончательным. Он принимает изменение на Marker.this.latLong через Marker.setLatLong() github.com/mapsforge/mapsforge/blob/master/mapsforge-map/src/   -  person ecle    schedule 07.01.2015
comment
@eee, спасибо, мне просто нужно выполнить приведение к маркеру, чтобы иметь возможность перемещать позицию ... Теперь я понимаю логику API - это имеет смысл, поскольку у TileLayer на самом деле нет позиции, но у всех оверлеев, таких как маркер, Круг и т.д. должны иметь позицию. Пожалуйста, добавьте простой ответ, например, приведение к маркеру или другому классу, чтобы я мог его принять;)   -  person maddob    schedule 07.01.2015


Ответы (1)


Mapsforge рассматривает слои как слой рендеринга, слой листов, наложения карты, такие как маркеры и т. д.

Абстрактный класс Layer определяет метод getPosition() для возврата null по умолчанию.

Некоторые расширенные от него классы, такие как TileLayer, не изменяют поведение метода. Но некоторые расширенные классы Layer изменяют его.

В вашем случае тип наложения карты, Marker расширяется от Layer с помощью модифицированного метода getPosition(). Значение частного поля Marker.this.latLong даже не является окончательным. Он принимает изменение на Marker.this.latLong с помощью метода Marker.setLatLong().

При условии, что объект Layer действительно является экземпляром Marker, вы можете преобразовать объект как Marker.

person ecle    schedule 08.01.2015