gpt4 book ai didi

android - osmdroid 错误的 RoadManager

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:37 29 4
gpt4 key购买 nike

我在这里学习教程 https://code.google.com/p/osmbonuspack/wiki/Tutorial_1但我遇到了一个错误,它没有正确显示正确的路线。它只是显示从 A 点到 B 点的直线。

我想要实现的是显示从这些点出发的正确路线。我猜错误是它无法识别要经过的任何节点。

也有人问过类似的问题,如果我没有很好地解释我的问题,我假设我也有同样的问题。

类似的问题可以在这里找到:OSMDroid Routing problems when following a tutorial

这是我使用 RoadManager 的部分代码

这是部分代码。

try {

//get current longlat
gpsLocator.getLocation();
cur_loc_lat =gpsLocator.getLatitude();
cur_loc_long =gpsLocator.getLongitude();

} catch (Exception e) {
// TODO: handle exception
}

//--- Create Another Overlay for multi marker
anotherOverlayItemArray = new ArrayList<OverlayItem>();
anotherOverlayItemArray.add(new OverlayItem(
"UST", "UST", new GeoPoint( testlat, testlong)));

//--- Create Another Overlay for multi marker
anotherOverlayItemArray.add(new OverlayItem(
locDefine[0], "UST", new GeoPoint( sel_latitude, sel_longitude)));


ItemizedIconOverlay<OverlayItem> anotherItemizedIconOverlay
= new ItemizedIconOverlay<OverlayItem>(
TomWalks.this, anotherOverlayItemArray, myOnItemGestureListener);

myOpenMapView.getOverlays().add(anotherItemizedIconOverlay);
//---

//Add Scale Bar
ScaleBarOverlay myScaleBarOverlay = new ScaleBarOverlay(TomWalks.this);
myOpenMapView.getOverlays().add(myScaleBarOverlay);


try {


//1 Routing via road manager
RoadManager roadManager = new MapQuestRoadManager();
roadManager.addRequestOption("routeType=pedestrian");
/*
roadManager.addRequestOption("units=m");
roadManager.addRequestOption("narrativeType=text");
roadManager.addRequestOption("shapeFormat=raw");
roadManager.addRequestOption("direction=0");
*/
//Then, retrieve the road between your start and end point:
ArrayList<GeoPoint> waypoints = new ArrayList<GeoPoint>();
waypoints.add(new GeoPoint(testlat, testlong));
waypoints.add(new GeoPoint(sel_latitude,sel_longitude)); //end point

Road road = roadManager.getRoad(waypoints);


// then, build an overlay with the route shape:
PathOverlay roadOverlay = RoadManager.buildRoadOverlay(road, myOpenMapView.getContext());
roadOverlay.setColor(Color.GREEN);


//Add Route Overlays into map
myOpenMapView.getOverlays().add(roadOverlay);
myOpenMapView.invalidate();//refesh map


final ArrayList<ExtendedOverlayItem> roadItems =
new ArrayList<ExtendedOverlayItem>();
ItemizedOverlayWithBubble<ExtendedOverlayItem> roadNodes =
new ItemizedOverlayWithBubble<ExtendedOverlayItem>(TomWalks.this, roadItems, myOpenMapView);



myOpenMapView.getOverlays().add(roadNodes);
myOpenMapView.invalidate();//refesh map



int nodesize=road.mNodes.size();
double length = road.mLength;


Drawable marker = getResources().getDrawable(R.drawable.marker_node);

Toast.makeText(TomWalks.this, " Distance : " + length + " Nodes : "+nodesize ,Toast.LENGTH_SHORT).show();

for (int i=0; i<road.mNodes.size(); i++)
{
RoadNode node = road.mNodes.get(i);
ExtendedOverlayItem nodeMarker = new ExtendedOverlayItem("Step "+i, "", node.mLocation, TomWalks.this);
nodeMarker.setMarkerHotspot(OverlayItem.HotspotPlace.CENTER);
nodeMarker.setMarker(marker);
roadNodes.addItem(nodeMarker);

nodeMarker.setDescription(node.mInstructions);
nodeMarker.setSubDescription(road.getLengthDurationText(node.mLength, node.mDuration));
Drawable icon = getResources().getDrawable(R.drawable.marker_node);
nodeMarker.setImage(icon);

}//end for

myOpenMapView.getOverlays().add(roadNodes);
myOpenMapView.invalidate();//refesh map


} catch (Exception e) {
// TODO: handle exception


Toast.makeText(TomWalks.this,e.getMessage(),Toast.LENGTH_SHORT).show();


}

myMapController.setCenter(new GeoPoint( sel_latitude, sel_longitude));


} catch (Exception e) {
// TODO: handle exception
}
}

}

}//===================================================================================================

最佳答案

让我们试着为这个非常常见的问题提供一个完整的答案。

基本上,当您看到“直线”时,就意味着 RoadManager 出错了。

因此,首先,在您的代码中,您应该通过这种方式检查 getRoad 的结果:

if (road.mStatus != Road.STATUS_OK){
//handle error... warn the user, etc.
}

现在,这个错误是从哪里来的?=> 您必须在 logcat 中搜索。您应该找到已发送的完整 url,可能还有关于错误的堆栈跟踪。

我强烈建议您在浏览器中复制/粘贴此完整网址,然后检查结果。

以下是典型的错误,按概率递减:

1) 你没有仔细阅读 Tutorial_0 开头的“重要提示” ,并且您正尝试在主线程中使用 SDK >= 3.0 进行网络调用。=> 阅读此“重要说明”。

2) 你要求的路线是不可能的(真的不可能,或者因为奇怪的位置,或者因为设置了不受支持的选项)。=> 这很容易通过在网络浏览器中复制/粘贴完整的 url 并查看答案来检查。

3) 您的设备没有网络连接。

4) 路由服务更改了它的 API(这发生了不止一次......)。=> 可以通过在浏览器中复制/粘贴完整的 url 来检查。在这种情况下,请在 OSMBonusPack 项目中提出问题,以便我们尽快考虑。

5) 路由服务宕机。=> 通过在浏览器中复制/粘贴完整的 URL 来轻松检查。

关于android - osmdroid 错误的 RoadManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21213224/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com