1

我正在尝试使用集成到其他程序中的 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();
}
}
4

0 回答 0