Java 遵循osmbonuspack时出错;你好,路由世界&引用;辅导的
我使用OSM创建了一个简单的项目。地图显示了我的当前位置。现在我想创建一个从我当前位置到地图上某个特定点的导航。我正在尝试跟随 在多段线roadOverlay=RoadManager.buildRoadOverlay(道路,此)行,我得到一个错误,如Java 遵循osmbonuspack时出错;你好,路由世界&引用;辅导的,java,android,navigation,openstreetmap,osmdroid,Java,Android,Navigation,Openstreetmap,Osmdroid,我使用OSM创建了一个简单的项目。地图显示了我的当前位置。现在我想创建一个从我当前位置到地图上某个特定点的导航。我正在尝试跟随 在多段线roadOverlay=RoadManager.buildRoadOverlay(道路,此)行,我得到一个错误,如 Type mismatch: cannot convert from PathOverlay to Polyline 我在项目中使用以下库: 1. osmdroid-android-4.1.jar 2. osmbonuspack_3.0.jar
Type mismatch: cannot convert from PathOverlay to Polyline
我在项目中使用以下库:
1. osmdroid-android-4.1.jar
2. osmbonuspack_3.0.jar
3. slf4j-android-1.5.8.jar
以下是主要活动:
import java.util.ArrayList;
import org.osmdroid.DefaultResourceProxyImpl;
import org.osmdroid.ResourceProxy;
import org.osmdroid.api.Polyline;
import org.osmdroid.bonuspack.routing.OSRMRoadManager;
import org.osmdroid.bonuspack.routing.Road;
import org.osmdroid.bonuspack.routing.RoadManager;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Menu;
public class MainActivity extends Activity {
MyItemizedOverlay myItemizedOverlay = null;
double latitude;
double longitude;
// The MapView variable:
private MapView m_mapView;
GeoPoint startPoint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GPSTracker tracker = new GPSTracker(this);
if (tracker.canGetLocation() == false) {
tracker.showSettingsAlert();
} else {
latitude = tracker.getLatitude();
longitude = tracker.getLongitude();
}
// Find the MapView controller in that layout:
m_mapView = (MapView) findViewById(R.id.mapview);
//MapView mapView = new MapView(this, 256); //constructor
m_mapView.setClickable(true);
m_mapView.setBuiltInZoomControls(true);
//setContentView(m_mapView); //displaying the MapView
m_mapView.setTileSource(TileSourceFactory.MAPQUESTOSM);
m_mapView.getController().setZoom(15); //set initial zoom-level, depends on your need
m_mapView.getController().setCenter(new GeoPoint(latitude, longitude));
m_mapView.setUseDataConnection(true);
m_mapView.setMultiTouchControls(true);
Drawable marker = getResources().getDrawable(R.drawable.pin_for_map);
int markerWidth = marker.getIntrinsicWidth();
int markerHeight = marker.getIntrinsicHeight();
marker.setBounds(0, markerHeight, markerWidth, 0);
ResourceProxy resourceProxy = new DefaultResourceProxyImpl(
getApplicationContext());
myItemizedOverlay = new MyItemizedOverlay(marker, resourceProxy);
m_mapView.getOverlays().add(myItemizedOverlay);
GeoPoint myPoint1 = new GeoPoint(latitude, longitude);
myItemizedOverlay.addItem(myPoint1, "myPoint1", "myPoint1");
startPoint = new GeoPoint(latitude, longitude);
}
//For routing
public void osmRoute()
{
//road manager
RoadManager roadManager = new OSRMRoadManager();
//start and end points
ArrayList<GeoPoint> waypoints = new ArrayList<GeoPoint>();
waypoints.add(startPoint);
GeoPoint endPoint = new GeoPoint(48.4, -1.9);
waypoints.add(endPoint);
//etreive the road between those points
Road road = roadManager.getRoad(waypoints);
//build a Polyline with the route shape
Polyline roadOverlay = RoadManager.buildRoadOverlay(road, this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.osmdroid.views.MapView
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:enabled="true"
android:clickable="true"
/>
</RelativeLayout>
import java.util.ArrayList;
导入org.osmdroid.DefaultResourceProxyImpl;
导入org.osmdroid.ResourceProxy;
导入org.osmdroid.api.Polyline;
导入org.osmdroid.bonuspack.routing.OSRMRoadManager;
导入org.osmdroid.bonuspack.routing.Road;
导入org.osmdroid.bonuspack.routing.RoadManager;
导入org.osmdroid.tileprovider.tilesource.TileSourceFactory;
导入org.osmdroid.util.GeoPoint;
导入org.osmdroid.views.MapView;
导入android.app.Activity;
导入android.graphics.drawable.drawable;
导入android.os.Bundle;
导入android.view.Menu;
公共类MainActivity扩展了活动{
MyItemizedOverlay MyItemizedOverlay=null;
双纬度;
双经度;
//MapView变量:
私有地图视图m_地图视图;
地点起点;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GPSTracker tracker=新的GPSTracker(本);
if(tracker.canGetLocation()==false){
tracker.showSettingsAlert();
}否则{
纬度=tracker.getLatitude();
longitude=tracker.getLongitude();
}
//在该布局中查找MapView控制器:
m_mapView=(mapView)findViewById(R.id.mapView);
//MapView MapView=新的MapView(这个,256);//构造函数
m_mapView.setClickable(真);
m_mapView.SetBuilTinZoomControl(真);
//setContentView(m_mapView);//显示地图视图
m_mapView.setTileSource(TileSourceFactory.MAPQUESTOSM);
m_mapView.getController().setZoom(15);//根据需要设置初始缩放级别
m_mapView.getController().setCenter(新的地理点(纬度、经度));
m_mapView.setUseDataConnection(true);
m_mapView.setMultiTouchControls(真);
Drawable marker=getResources().getDrawable(R.Drawable.pin_表示_映射);
int-markerWidth=marker.getIntrinsicWidth();
int-markerHeight=marker.getIntrinsicHeight();
标记.立根(0,标记高度,标记宽度,0);
ResourceProxy ResourceProxy=新的DefaultResourceProxyImpl(
getApplicationContext());
myItemizedOverlay=新的myItemizedOverlay(标记,resourceProxy);
m_mapView.getOverlays().add(MyItemizeOverlay);
地质点myPoint1=新的地质点(纬度、经度);
添加项(myPoint1,“myPoint1”,“myPoint1”);
起始点=新的地质点(纬度、经度);
}
//路由
公共void osmRoute()
{
//道路经理
RoadManager RoadManager=新的OSRMRoadManager();
//起点和终点
ArrayList航路点=新的ArrayList();
航路点。添加(起始点);
地质点端点=新的地质点(48.4,-1.9);
航路点。添加(终点);
//在这些点之间绕行道路
Road Road=roadManager.getRoad(航路点);
//使用管线形状构建多段线
多段线道路覆盖=RoadManager.buildRoadOverlay(道路,此);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
}
以下是活动\u main.xml:
import java.util.ArrayList;
import org.osmdroid.DefaultResourceProxyImpl;
import org.osmdroid.ResourceProxy;
import org.osmdroid.api.Polyline;
import org.osmdroid.bonuspack.routing.OSRMRoadManager;
import org.osmdroid.bonuspack.routing.Road;
import org.osmdroid.bonuspack.routing.RoadManager;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Menu;
public class MainActivity extends Activity {
MyItemizedOverlay myItemizedOverlay = null;
double latitude;
double longitude;
// The MapView variable:
private MapView m_mapView;
GeoPoint startPoint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GPSTracker tracker = new GPSTracker(this);
if (tracker.canGetLocation() == false) {
tracker.showSettingsAlert();
} else {
latitude = tracker.getLatitude();
longitude = tracker.getLongitude();
}
// Find the MapView controller in that layout:
m_mapView = (MapView) findViewById(R.id.mapview);
//MapView mapView = new MapView(this, 256); //constructor
m_mapView.setClickable(true);
m_mapView.setBuiltInZoomControls(true);
//setContentView(m_mapView); //displaying the MapView
m_mapView.setTileSource(TileSourceFactory.MAPQUESTOSM);
m_mapView.getController().setZoom(15); //set initial zoom-level, depends on your need
m_mapView.getController().setCenter(new GeoPoint(latitude, longitude));
m_mapView.setUseDataConnection(true);
m_mapView.setMultiTouchControls(true);
Drawable marker = getResources().getDrawable(R.drawable.pin_for_map);
int markerWidth = marker.getIntrinsicWidth();
int markerHeight = marker.getIntrinsicHeight();
marker.setBounds(0, markerHeight, markerWidth, 0);
ResourceProxy resourceProxy = new DefaultResourceProxyImpl(
getApplicationContext());
myItemizedOverlay = new MyItemizedOverlay(marker, resourceProxy);
m_mapView.getOverlays().add(myItemizedOverlay);
GeoPoint myPoint1 = new GeoPoint(latitude, longitude);
myItemizedOverlay.addItem(myPoint1, "myPoint1", "myPoint1");
startPoint = new GeoPoint(latitude, longitude);
}
//For routing
public void osmRoute()
{
//road manager
RoadManager roadManager = new OSRMRoadManager();
//start and end points
ArrayList<GeoPoint> waypoints = new ArrayList<GeoPoint>();
waypoints.add(startPoint);
GeoPoint endPoint = new GeoPoint(48.4, -1.9);
waypoints.add(endPoint);
//etreive the road between those points
Road road = roadManager.getRoad(waypoints);
//build a Polyline with the route shape
Polyline roadOverlay = RoadManager.buildRoadOverlay(road, this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.osmdroid.views.MapView
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:enabled="true"
android:clickable="true"
/>
</RelativeLayout>
我哪里做错了?我应该怎么做才能完成本教程?您可能导入了错误的多段线吗?尝试添加:
import org.osmdroid.bonuspack.overlays.Polyline;
并摆脱:
import org.osmdroid.api.Polyline;
除了kurtzmarc注释外,您还没有使用正确版本的OSMBonusPack: 如果您使用的是osmdroid-android-4.1.jar,那么您必须使用OSMBonusPack v4.2.6或更高版本
下载最新版本(v4.4),而不是过时的版本 现在我正在使用osmbonuspack_v4.4.jar,这是fine@kittu88,您是从哪里获得jar版本4.4的?链接?