作为一名用户,我想使用Android应用程序使用路线在地图上导航。一旦我开始导航,我会开发其他方法来组织导航,但是到目前为止,我还不能在地图上显示路线。
我正在使用Mapbox自己提供的教程:https://www.mapbox.com/android-sdk/examples/directions/。没有消息错误,事实上,显示路线距离的toast消息在我访问地图视图后可见<代码>(“路线0.0米长。”) 我检查了日志,通用HTML代码是200(这是正确的),调试消息显示了一条0.0米长的路径。除此之外,日志中没有发现任何错误。
我已经对代码进行了一周的反复检查,检查是否有任何错误,但我没有发现任何可能导致错误的东西,无法显示路线。我也调试了代码,它毫无问题地实现了drawRoute函数,我也检查了令牌,它工作得很好。
我做了什么没有显示路线?谢谢!
尝试查看路线时的图像示例。
Java代码:
public class Mapa extends Activity {
private static final String TAG = "Mapa"; //Tag para usar no log de debug e error
private MapView mapView;
private MapboxMap map;
private DirectionsRoute currentRoute;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Mapbox usa esse token de acesso atraves de uma conta do mapbox, so precisa ser configurado uma vez!
MapboxAccountManager.start(this,getString(R.string.access_token));
// Contem o mapview exposto em XML e precisa ser chamado LOGO APOS o account manager
setContentView(R.layout.activity_main);
// Funcao que pede permissao para o usuario no seu celular -- TODO
PedePermissao();
// Origem: Rodoviaria
final Position origin = Position.fromCoordinates(-15.794082, -47.882645);
// Destino: Reitoria
final Position destination = Position.fromCoordinates(-15.762604, -47.866611);
//Configuracao do mapa
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(MapboxMap mapboxMap) {
map = mapboxMap;
// Criacao e declaracao do icone
IconFactory iconFactory = IconFactory.getInstance(Mapa.this);
Drawable iconDrawable = ContextCompat.getDrawable(Mapa.this, R.drawable.infoicon);
Icon icon = iconFactory.fromDrawable(iconDrawable);
Drawable iconeDrawableRota = ContextCompat.getDrawable(Mapa.this, R.drawable.infoicon_rota);
Icon iconeRota = iconFactory.fromDrawable(iconeDrawableRota);
//Marcadores das instalacoes
mapboxMap.addMarker(new MarkerViewOptions()
.position(new LatLng(-15.76363, -47.86949))
.title("ICC Centro")
.snippet(getString(R.string.desc_ICC_Centro))
.icon(icon));
mapboxMap.addMarker(new MarkerViewOptions()
.position(new LatLng(-15.7629936, -47.86717415))
.title("Reitoria")
.snippet(getString(R.string.desc_Reitoria))
.icon(icon));
mapboxMap.addMarker(new MarkerViewOptions()
.position(new LatLng(-15.76196106, -47.87008166))
.title("FAU")
.snippet(getString(R.string.desc_FAU))
.icon(icon));
// Adicionando os marcadores de destino da rota
mapboxMap.addMarker(new MarkerOptions()
.position(new LatLng(origin.getLatitude(), origin.getLongitude()))
.title("Origem")
.icon(iconeRota));
mapboxMap.addMarker(new MarkerOptions()
.position(new LatLng(destination.getLatitude(), destination.getLongitude()))
.title("Destino")
.icon(iconeRota));
try {
getRoute(origin, destination);
} catch (ServicesException servicesException) {
servicesException.printStackTrace();
}
//Dados da janela (infowindow) quando clicar em um ponteiro (marker)
mapboxMap.setInfoWindowAdapter(new MapboxMap.InfoWindowAdapter() {
//...
}
});
}
});
}
private void getRoute(Position origin, Position destination) throws ServicesException {
MapboxDirections client = new MapboxDirections.Builder()
.setOrigin(origin)
.setDestination(destination)
.setProfile(DirectionsCriteria.PROFILE_DRIVING)
.setAccessToken(MapboxAccountManager.getInstance().getAccessToken())
.build();
client.enqueueCall(new Callback<DirectionsResponse>() {
@Override
public void onResponse(Call<DirectionsResponse> call, Response<DirectionsResponse> response) {
// Voce pode pegar mensagens de erro genericas do http sobre o response
Log.d(TAG, "Codigo de resposta: " + response.code());
if (response.body() == null) {
Log.e(TAG, "Sem rotas encontradas, porém sem o uso do token, verifique o token de acesso");
return;
} else if (response.body().getRoutes().size() < 1) {
Log.e(TAG, "Sem rotas encontradas!");
return;
}
// Printa algumas informacoes sobre a rota
currentRoute = response.body().getRoutes().get(0);
Log.d(TAG, "Distancia: " + currentRoute.getDistance());
Toast.makeText(
Mapa.this,
"A rota tem " + currentRoute.getDistance() + " metros de distância.",
Toast.LENGTH_SHORT).show();
// Desenhar a rota no mapa
drawRoute(currentRoute);
}
@Override
public void onFailure(Call<DirectionsResponse> call, Throwable throwable) {
Log.e(TAG, "Erro: " + throwable.getMessage());
Toast.makeText(Mapa.this, "Erro: " + throwable.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
private void drawRoute(DirectionsRoute route) {
// Converter as coordenadas LineString em LatLng[]
LineString lineString = LineString.fromPolyline(route.getGeometry(), Constants.OSRM_PRECISION_V5);
List<Position> coordinates = lineString.getCoordinates();
LatLng[] points = new LatLng[coordinates.size()];
for (int i = 0; i < coordinates.size(); i++) {
points[i] = new LatLng(
coordinates.get(i).getLatitude(),
coordinates.get(i).getLongitude());
}
// Escrever os pontos no MapView
map.addPolyline(new PolylineOptions()
.add(points)
.color(Color.parseColor("#009688"))
.width(5));
}
你的坐标顺序不正确。当LatLng
按纬度、经度
顺序创建时,位置
为xy顺序或经度、经度
。所以你的出发地和目的地应该是:
// Origem: Rodoviaria
final Position origin = Position.fromCoordinates(-47.882645, -15.794082);
// Destino: Reitoria
final Position destination = Position.fromCoordinates(-47.866611, -15.762604);
我举了一个例子:https://docs.mapbox.com/android/maps/examples/marker-symbol-layer/ 它起作用了。 然后,我尝试用源geojson替换这些点,但没有成功,如下所述:https://docs.mapbox.com/android/maps/guides/data-driven-styling/#geojson 除了在地图上添加新东西的部
我在Android应用程序中使用Mapbox,需要在地图上显示从A点到B点的方向。 我知道Mapbox提供的方向应用编程接口。但是我不能在我的应用程序中使用它,因为包括“com.mapbox.mapboxsdk: mapbox-Android-方向:1.0.0@aar”它在gradle文件中与我的应用程序中的另一个依赖项冲突(不同版本的改造)。 所以我不得不使用API方法。我发出一个url GET
我刚刚开始尝试Android应用程序开发,所以我决定尝试一下Android自己的教程(这个:http://developer.android.com/training/basics/firstapp/starting-activity.html) 我的新活动中的文本视图不会显示。这是我的代码:
为了构建一个贴纸应用程序,我遵循以下指南:https://github.com/whatsapp/stickers/tree/master/Android 一切都很好(包括将贴纸添加到whatsapp),除了一件事:包细节视图()中没有显示webp贴纸。 我正在像这样更改贴纸文件的加载位置 StickerPreviewAdapter.java *如这里所述:https://github.com/w
我有一个ListView,对于每个列表项,我都希望它在下面显示一个阴影。我正在使用Android Lollipop的新elevation特性在我想投下阴影的视图上设置Z,并且已经在ActionBar(严格来说是Lollipop中的工具栏)中有效地做到了这一点。我正在使用Lollipop的提升,但出于某种原因,它没有在列表项下显示阴影。以下是如何设置每个列表项的布局: 我也尝试了以下几种做法,但都无
我的应用程序生成了一个通知,但我为该通知设置的图标没有显示。取而代之的是一个白色的方块。 我试过调整图标的png大小(尺寸720x720,66x66,44x44,22x22)。奇怪的是,当使用较小的尺寸时,白色的正方形更小。 我搜索了这个问题,以及生成通知的正确方法,从我读到的代码来看,应该是正确的。不幸的是,事情并不像他们应该的那样。