Ответ 1
Используйте
new MapViewProjection(mapView).fromPixels(double x, double y);
THey изменил привязку в версии 0.4 или так далее, вместо того, чтобы получать проекцию из 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? Я делаю что-то неправильно? Если нет способа получить координаты после крана, я считаю, что в библиотеке отсутствует что-то очень важное.
Спасибо
Используйте
new MapViewProjection(mapView).fromPixels(double x, double y);
THey изменил привязку в версии 0.4 или так далее, вместо того, чтобы получать проекцию из mapview, вы передаете карту в проекцию.
Вы уверены, что импортировали правильный MapView? Существует версия Google MapView, которая не имеет этой функции, если вы импортировали ее, чтобы думать о ее неправильном классе.
Вы можете использовать событие 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;
}
};