今回はナビゲーションの設定についてのコードです。
public class MainActivity extends AppCompatActivity {
private SKMapSurfaceView skMapSurfaceView;
private SKMapViewHolder mapHolder;
String mapResourcesDirPath;
private SKCoordinate startSkCoordinate = new SKCoordinate(139.766084, 35.681382);
SKNavigationListener skNavigationListener = new SKNavigationListener() {
@Override
public void onDestinationReached() {
Log.d("SKNavigationListener", "onDestinationReached");
}
@Override
public void onSignalNewAdviceWithInstruction(String s) {
Log.d("SKNavigationListener", "onSignalNewAdviceWithInstruction:" + s);
}
@Override
public void onSignalNewAdviceWithAudioFiles(String[] strings, boolean b) {
Log.d("SKNavigationListener", "onSignalNewAdviceWithAudioFiles:" + b);
Log.d("SKNavigationListener","onSignalNewAdviceWithAudioFiles:" + b);
for (String string : strings) {
Log.d("SKNavigationListener","onSignalNewAdviceWithAudioFiles:" + string);
}
}
@Override
public void onSpeedExceededWithAudioFiles(String[] strings, boolean b) {
Log.d("SKNavigationListener", "onSpeedExceededWithAudioFiles");
Log.d("SKNavigationListener","onSpeedExceededWithAudioFiles:" + b);
for (String string : strings) {
Log.d("SKNavigationListener","onSpeedExceededWithAudioFiles:" + string);
}
}
@Override
public void onSpeedExceededWithInstruction(String s, boolean b) {
Log.d("SKNavigationListener", "onSpeedExceededWithInstruction" + s + b);
Log.d("SKNavigationListener", "String:" + s + "boolean:" + b);
}
@Override
public void onUpdateNavigationState(SKNavigationState skNavigationState) {
Log.d("SKNavigationListener", "onUpdateNavigationState:" + skNavigationState.toString());
}
@Override
public void onReRoutingStarted() {
Log.d("SKNavigationListener", "onReRoutingStarted");
}
@Override
public void onFreeDriveUpdated(String s, String s1, String s2, SKNavigationState.SKStreetType skStreetType, double v, double v1) {
Log.d("SKNavigationListener", s + "/" + s1 + "/" + s2 + "/" + skStreetType.toString() + "/" + v + "/" + v1);
}
@Override
public void onViaPointReached(int i) {
Log.d("SKNavigationListener", "onViaPointReached:" + i);
}
@Override
public void onVisualAdviceChanged(boolean b, boolean b1, SKNavigationState skNavigationState) {
Log.d("SKNavigationListener", "onVisualAdviceChanged:" + b +"/" +b1 + "/" + skNavigationState.toString());
}
@Override
public void onTunnelEvent(boolean b) {
Log.d("SKNavigationListener", "onTunnelEvent:" + b);
}
};
SKRouteListener skRouteListener = new SKRouteListener() {
@Override
public void onRouteCalculationCompleted(SKRouteInfo skRouteInfo) {
//経路計算が終わる毎に呼ばれる。
Log.d("skRouteListener", "onRouteCalculationCompleted:" + skRouteInfo.toString());
}
@Override
public void onRouteCalculationFailed(SKRoutingErrorCode skRoutingErrorCode) {
//経路計算が終わったときに呼ばれる。
Log.d("skRouteListener", "onRouteCalculationFailed:" + skRoutingErrorCode.toString());
}
@Override
public void onAllRoutesCompleted() {
//すべての経路計算が終わったときに呼ばれる。
Log.d("skRouteListener", "onAllRoutesCompleted");
//ナビゲーションの設定をする
SKNavigationSettings navigationSettings = new SKNavigationSettings();
//自分の位置をCCPアイコンにする
navigationSettings.setCcpAsCurrentPosition(true);
//ナビゲーションで使う距離の単位を設定する。
navigationSettings.setDistanceUnit(SKMaps.SKDistanceUnitType.DISTANCE_UNIT_KILOMETER_METERS);
//通りの名前を参照するかを設定する
navigationSettings.setEnableReferenceStreetNames(false);
//ナビゲーションタイプを設定する。
//SKNavigationSettings.SKNavigationType.SIMULATION → 開始地点から終了地点までをシミュレーションする。スワイプによる移動は禁止される。
//SKNavigationSettings.SKNavigationType.REAL → 端末のGPSをもとにナビゲーションする。
//SKNavigationSettings.SKNavigationType.FILE → GPSが記載されているファイルをもとにナビゲーションする。
navigationSettings.setNavigationType(SKNavigationSettings.SKNavigationType.SIMULATION);
// SKNavigationSettings#setNavigationTypeでSKNavigationSettings.SKNavigationType.FILEを設定したときに、使用するファイルのパスを指定する。
navigationSettings.setFileNavigationPath("");
//ナビゲーションでの移動方法を設定する。
//SKNavigationSettings.SKNavigationMode.PEDESTRIAN → 徒歩で移動する
//SKNavigationSettings.SKNavigationMode.BIKE → バイクで移動する
//SKNavigationSettings.SKNavigationMode.CAR → 車で移動する
//SKNavigationSettings.SKNavigationMode.DISABLED → 無効です
navigationSettings.setNavigationMode(SKNavigationSettings.SKNavigationMode.CAR);
//自位置に対して画面の水平位置(-0.5~0.5)を変更する。マイナスは左、プラスは右にずらす。
navigationSettings.setPositionerHorizontalAlignment(-0.1f);
//自位置に対して画面の垂直位置(-0.5~0.5)を変更する。マイナスは下、プラスは上にずらす。
navigationSettings.setPositionerVerticalAlignment(-0.1f);
//GPS位置を表示する
navigationSettings.setShowRealGPSPositions(true);
//都市部の法定速度を設定する。超えるとSKNavigationListener.onSpeedExceededWithAudioFiles、SKNavigationListener.onSpeedExceededWithInstructionが呼ばれる。
navigationSettings.setSpeedWarningThresholdInCity(60);
//郊外の法定速度を設定する。超えるとSKNavigationListener.onSpeedExceededWithAudioFiles、SKNavigationListener.onSpeedExceededWithInstructionが呼ばれる。
navigationSettings.setSpeedWarningThresholdOutsideCity(60);
//通過した経路を消していくかどうかを設定する。
navigationSettings.setSplitRouteEnabled(true);
//足跡の設定を行う
SKTrailType skTrailType = new SKTrailType();
// 足跡をドットで表示する。
// 第一引数-true:表示する/false:表示しない
// 第二引数:
skTrailType.setPedestrianTrailEnabled(true,1);
// ドットの間隔を設定する。
skTrailType.setSize(1);
// 色を設定する。効果がない
skTrailType.setColor(new float[]{0.976470588f, 0.003921569f, 0.580392157f, 1f});
// ドットとして表示するかを設定する。効果がない
skTrailType.setDotted(true);
navigationSettings.setTrailType(skTrailType);
// 指定したズームレベルにカメラを動かす。複数設定しても先頭のズームレベルにしかならない。
SKZoomLevelConfiguration[] skZoomLevelConfigurations = new SKZoomLevelConfiguration[3];
skZoomLevelConfigurations[0] = new SKZoomLevelConfiguration(10,12,18);
skZoomLevelConfigurations[1] = new SKZoomLevelConfiguration(10,12,5);
skZoomLevelConfigurations[2] = new SKZoomLevelConfiguration(10,12,18);
navigationSettings.setZoomLevelConfigurations(skZoomLevelConfigurations);
SKNavigationManager navigationManager = SKNavigationManager.getInstance();
navigationManager.setMapView(skMapSurfaceView);
navigationManager.setNavigationListener(skNavigationListener);
navigationManager.startNavigation(navigationSettings);
}
@Override
public void onServerLikeRouteCalculationCompleted(SKRouteJsonAnswer skRouteJsonAnswer) {
//???
Log.d("skRouteListener", "onServerLikeRouteCalculationCompleted:" + skRouteJsonAnswer.getJsonAnswer());
}
@Override
public void onOnlineRouteComputationHanging(int i) {
//???
Log.d("skRouteListener", "onOnlineRouteComputationHanging:" + i);
}
};
SKMapSurfaceListener skMapSurfaceListener = new SKMapSurfaceListener() {
@Override
public void onActionPan() {
}
@Override
public void onActionZoom() {
}
@Override
public void onSurfaceCreated(SKMapViewHolder skMapViewHolder) {
mapHolder = skMapViewHolder;
skMapSurfaceView = skMapViewHolder.getMapSurfaceView();
skMapSurfaceView.centerMapOnPosition(startSkCoordinate);
}
@Override
public void onMapRegionChanged(SKCoordinateRegion skCoordinateRegion) {
}
@Override
public void onMapRegionChangeStarted(SKCoordinateRegion skCoordinateRegion) {
}
@Override
public void onMapRegionChangeEnded(SKCoordinateRegion skCoordinateRegion) {
}
@Override
public void onDoubleTap(SKScreenPoint skScreenPoint) {
}
@Override
public void onSingleTap(SKScreenPoint skScreenPoint) {
SKCoordinate endSKSkCoordinate = skMapSurfaceView.pointToCoordinate(skScreenPoint);
launchRouteCalculation(startSkCoordinate, endSKSkCoordinate);
}
@Override
public void onRotateMap() {
}
@Override
public void onLongPress(SKScreenPoint skScreenPoint) {
}
@Override
public void onInternetConnectionNeeded() {
}
@Override
public void onMapActionDown(SKScreenPoint skScreenPoint) {
}
@Override
public void onMapActionUp(SKScreenPoint skScreenPoint) {
}
@Override
public void onPOIClusterSelected(SKPOICluster skpoiCluster) {
}
@Override
public void onMapPOISelected(SKMapPOI skMapPOI) {
}
@Override
public void onAnnotationSelected(SKAnnotation skAnnotation) {
}
@Override
public void onCustomPOISelected(SKMapCustomPOI skMapCustomPOI) {
}
@Override
public void onCompassSelected() {
}
@Override
public void onCurrentPositionSelected() {
}
@Override
public void onObjectSelected(int i) {
}
@Override
public void onInternationalisationCalled(int i) {
}
@Override
public void onBoundingBoxImageRendered(int i) {
}
@Override
public void onGLInitializationError(String s) {
}
@Override
public void onScreenshotReady(Bitmap bitmap) {
}
};
private void launchRouteCalculation(SKCoordinate startPoint, SKCoordinate destinationPoint) {
//経路情報のキャッシュをクリアする
SKRouteManager.getInstance().clearAllRoutesFromCache();
//経路計算のリスナーを追加する。
SKRouteManager.getInstance().setRouteListener(skRouteListener);
//経路計算の設定する。
SKRouteSettings skRouteSettings = new SKRouteSettings();
//開始位置を設定する
skRouteSettings.setStartCoordinate(startPoint);
//終了位置を設定する
skRouteSettings.setDestinationCoordinate(destinationPoint);
//最大計算経路数を設定する
skRouteSettings.setNoOfRoutes(5);
//移動手段の設定
//SKRouteSettings.SKRouteMode.BICYCLE_FASTEST→自転車最短時間
//SKRouteSettings.SKRouteMode.BICYCLE_QUIETEST→自転車ゆっくり?
//SKRouteSettings.SKRouteMode.BICYCLE_SHORTEST→自転車最短距離
//SKRouteSettings.SKRouteMode.BUS_FASTEST→バス最短時間
//SKRouteSettings.SKRouteMode.CAR_FASTEST→車最短時間
//SKRouteSettings.SKRouteMode.CAR_SHORTEST→車最短時間
//SKRouteSettings.SKRouteMode.EFFICIENT→???
//SKRouteSettings.SKRouteMode.PEDESTRIAN→歩き
skRouteSettings.setRouteMode(SKRouteSettings.SKRouteMode.PEDESTRIAN);
//接続モードを設定する
//SKRouteSettings.SKRouteConnectionMode.HYBRID→オフライン・オンラインの両方
//SKRouteSettings.SKRouteConnectionMode.OFFLINE→オフライン
//SKRouteSettings.SKRouteConnectionMode.ONLINE→オンライン
skRouteSettings.setRouteConnectionMode(SKRouteSettings.SKRouteConnectionMode.HYBRID);
//有料道路を避けるかどうか。避ける→true/避けない→false
skRouteSettings.setTollRoadsAvoided(true);
//高速道路を避けるかどうか。避ける→true/避けない→false
skRouteSettings.setHighWaysAvoided(true);
//フェリーを避けるかどうか。避ける→true/避けない→false
skRouteSettings.setAvoidFerries(true);
//経路情報だけを取得する。true:情報だけを取得し、地図上にルートを表示しない
skRouteSettings.setRouteExposed(true);
//自転車を運ぶのを避けるかどうか。
skRouteSettings.setBicycleCarryAvoided(false);
//自転車を降りて歩くのを避けるかどうか。
skRouteSettings.setBicycleWalkAvoided(false);
//経路計算を開始する。結果は成功失敗は各コールバックメソッドで返却する
SKRouteManager.getInstance().calculateRoute(skRouteSettings);
//わからない
//skRouteSettings.setUseRoadSlopes();
//skRouteSettings.setFilterAlternatives();
//skRouteSettings.setRequestAdvices();
//skRouteSettings.setExtendedPointsReturned();
//skRouteSettings.setCountryCodesReturned();
//skRouteSettings.setUseRoadSlopes();
//skRouteSettings.setAlternativeRouteModes();
//skRouteSettings.setDownloadRouteCorridor(true);
//skRouteSettings.setRouteCorridorWidthInMeters(100);
//skRouteSettings.setWaitForCorridorDownload(true);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapResourcesDirPath = getFilesDir().getPath() + "/" + "SKMaps/";
if (!new File(mapResourcesDirPath).exists()) {
new SKPrepareMapTextureThread(this, mapResourcesDirPath, "SKMaps.zip", new SKPrepareMapTextureListener() {
@Override
public void onMapTexturesPrepared(boolean b) {
if (b) {
initMapSetting();
}
}
}).start();
} else {
initMapSetting();
}
}
@Override
protected void onPause() {
super.onPause();
if (mapHolder != null) {
mapHolder.onPause();
}
}
@Override
protected void onResume() {
super.onResume();
if (mapHolder != null) {
mapHolder.onResume();
}
}
private void initMapSetting() {
SKMapsInitSettings initMapSettings = new SKMapsInitSettings();
initMapSettings.setMapResourcesPaths(mapResourcesDirPath,
new SKMapViewStyle(mapResourcesDirPath + "daystyle/", "daystyle.json"));
final SKAdvisorSettings advisorSettings = initMapSettings.getAdvisorSettings();
advisorSettings.setAdvisorConfigPath(mapResourcesDirPath + "Advisor");
advisorSettings.setResourcePath(mapResourcesDirPath + "Advisor/Languages");
advisorSettings.setLanguage(SKAdvisorSettings.SKAdvisorLanguage.LANGUAGE_EN);
advisorSettings.setAdvisorVoice("en");
initMapSettings.setAdvisorSettings(advisorSettings);
SKMaps.getInstance().initializeSKMaps(this, initMapSettings);
SKMapFragment mapFragment = new SKMapFragment();
mapFragment.setMapSurfaceListener(skMapSurfaceListener);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.container, mapFragment).commit();
}
}