Navigationskartenaktivität
Es gibt eine Karte und einen Schalter für das OpenGL-Rendering. Es gibt einen longClickListener auf mapView. Nach dem ersten Tippen wird der Startpunkt ausgewählt, nach dem zweiten Tippen wird das Ziel ausgewählt und die Routenberechnung gestartet.
public class NavigateMapActivity extends AppCompatActivity {
private OsmandApplication app;
private OsmandMapTileView mapTileView;
private MapViewWithLayers mapViewWithLayers;
private AppInitializeListener initListener;
private OnLongClickListener clickListener;
private LatLon start;
private LatLon finish;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_map_activity);
mapViewWithLayers = findViewById(R.id.map_view_with_layers);
app = (OsmandApplication) getApplication();
mapTileView = app.getOsmandMap().getMapView();
mapTileView.setupOpenGLView();
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setTitle("Navigate map");
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
}
CompoundButton openglSwitch = findViewById(R.id.opengl_switch);
openglSwitch.setChecked(app.getSettings().USE_OPENGL_RENDER.get());
openglSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
app.getSettings().USE_OPENGL_RENDER.set(isChecked);
RestartActivity.doRestart(this);
});
//set start location and zoom for map
mapTileView.setIntZoom(14);
mapTileView.setLatLon(52.3704312, 4.8904288);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
@SuppressLint("SyntheticAccessor")
protected void onResume() {
super.onResume();
mapViewWithLayers.onResume();
mapTileView.setOnLongClickListener(getClickListener());
}
private OnLongClickListener getClickListener() {
if (clickListener == null) {
clickListener = new OnLongClickListener() {
@Override
public boolean onLongPressEvent(PointF point) {
LatLon latLon = mapTileView.getLatLonFromPixel(point.x, point.y);
if (start == null) {
start = latLon;
app.showShortToastMessage("Start point " + latLon.getLatitude() + " " + latLon.getLongitude());
} else if (finish == null) {
finish = latLon;
app.showShortToastMessage("Finish point " + latLon.getLatitude() + " " + latLon.getLongitude());
startNavigation();
}
return true;
}
};
}
return clickListener;
}
private void startNavigation() {
OsmandSettings settings = app.getSettings();
RoutingHelper routingHelper = app.getRoutingHelper();
settings.setApplicationMode(ApplicationMode.CAR);
TargetPointsHelper targetPointsHelper = app.getTargetPointsHelper();
targetPointsHelper.setStartPoint(start, false, new PointDescription(start.getLatitude(), start.getLongitude()));
targetPointsHelper.navigateToPoint(finish, true, -1, new PointDescription(finish.getLatitude(), finish.getLongitude()));
app.getOsmandMap().getMapActions().enterRoutePlanningModeGivenGpx(null, start, null, true, false);
settings.FOLLOW_THE_ROUTE.set(true);
routingHelper.setFollowingMode(true);
routingHelper.setRoutePlanningMode(false);
routingHelper.notifyIfRouteIsCalculated();
routingHelper.setCurrentLocation(app.getLocationProvider().getLastKnownLocation(), false);
OsmAndLocationProvider.requestFineLocationPermissionIfNeeded(this);
app.showShortToastMessage("StartNavigation from " + start.getLatitude() + " " + start.getLongitude()
+ " to " + finish.getLatitude() + " " + finish.getLongitude());
start = null;
finish = null;
}
@Override
protected void onPause() {
super.onPause();
mapViewWithLayers.onPause();
mapTileView.setOnLongClickListener(null);
}
@Override
protected void onDestroy() {
super.onDestroy();
mapViewWithLayers.onDestroy();
}
}