我正在尝试使用集成到其他程序中的 MapsForge 代码离线制作地图查看应用程序。他们分层工作。在第一层有另一个程序。触摸事件发生在这一层。根据触摸事件,程序生成输出数据,例如 X 方向 3 个单位和 Y 负方向 4 个单位。我想将数据传递给 MapsForge,以便它产生相应的反应。这将如何与我的代码示例一起使用?我应该改变什么?我也有这些库:androidsvg-1.2.1.jar、GtfBridge.jar、mapsforge-map-android-release-0.5.2.jar、SwingMapViewer-release-0.5.2.jar
package com.example.gtflauncher;
import android.app.Activity;
import android.app.Application;
import android.os.Environment;
import android.util.Log;
import org.mapsforge.core.model.LatLong;
import org.mapsforge.map.android.graphics.AndroidGraphicFactory;
import org.mapsforge.map.android.util.AndroidUtil;
import org.mapsforge.map.android.view.MapView;
import org.mapsforge.map.layer.cache.TileCache;
import org.mapsforge.map.layer.renderer.TileRendererLayer;
import org.mapsforge.map.reader.MapDataStore;
import org.mapsforge.map.reader.MapFile;
import org.mapsforge.map.rendertheme.InternalRenderTheme;
import java.io.File;
public class NavigationService
{
private MapView mapView;
private TileCache tileCache;
private TileRendererLayer tileRendererLayer;
private File mapFile;
public NavigationService(final Activity appActivity, final String modelPath)
{
mapFile = new File(modelPath + "/maps/", "baden-wuerttemberg.map");
if(!mapFile.isFile())
{
Log.e("NavigationService", "mapFile '" + mapFile.getAbsoluteFile() + "' couldn't be found.");
}
// Init MapView
mapView = (MapView) appActivity.findViewById(R.id.mapView);
mapView.setClickable(true);
mapView.getMapScaleBar().setVisible(true);
mapView.setBuiltInZoomControls(true);
mapView.getMapZoomControls().setZoomLevelMin((byte) 10);
mapView.getMapZoomControls().setZoomLevelMax((byte) 20);
// create a tile cache of suitable size
tileCache = AndroidUtil.createTileCache(appActivity, "mapcache",
mapView.getModel().displayModel.getTileSize(), 1f,
mapView.getModel().frameBufferModel.getOverdrawFactor());
}
public static void initGraphicsFactory(final Application application)
{
AndroidGraphicFactory.createInstance(application);
}
public void startNavigation()
{
if(!mapFile.isFile())
{
return;
}
// 48.779209, 9.1772152 = Stuttgart
mapView.getModel().mapViewPosition.setCenter(new LatLong(48.779209, 9.1772152));
mapView.getModel().mapViewPosition.setZoomLevel((byte) 12);
// tile renderer layer using internal render theme
MapDataStore mapDataStore = new MapFile(mapFile);
tileRendererLayer = new TileRendererLayer(tileCache, mapDataStore,
mapView.getModel().mapViewPosition, false, true, AndroidGraphicFactory.INSTANCE);
tileRendererLayer.setXmlRenderTheme(InternalRenderTheme.OSMARENDER);
// only once a layer is associated with a mapView the rendering starts
mapView.getLayerManager().getLayers().add(tileRendererLayer);
}
public void shutdownNavigation()
{
mapView.destroyAll();
}
}