gpt4 book ai didi

java - 如何在谷歌地图上创建从用户位置到用户选择的项目覆盖的路线/导航?

转载 作者:行者123 更新时间:2023-12-01 14:51:26 27 4
gpt4 key购买 nike

我很困惑,如何执行操作来创建从用户位置到用户选择/点击图钉覆盖层的图钉覆盖层(谷歌位置)的路线/导航。这是我的 map Activity ,它将显示我的 map 。

public class PlacesMapActivity extends MapActivity {
// Nearest places
PlacesList nearPlaces;

// Map view
MapView mapView;

// Map overlay items
List<Overlay> mapOverlays;

AddItemizedOverlay itemizedOverlay;

GeoPoint geoPoint;
// Map controllers
MapController mc;

double latitude;
double longitude;
OverlayItem overlayitem;

private Context context;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_places);

// Getting intent data
Intent i = getIntent();

// Users current geo location
String user_latitude = i.getStringExtra("user_latitude");
String user_longitude = i.getStringExtra("user_longitude");

// Nearplaces list
nearPlaces = (PlacesList) i.getSerializableExtra("near_places");

mapView = (MapView) findViewById(R.id.mapView);
mapView.setBuiltInZoomControls(true);

mapOverlays = mapView.getOverlays();

// Geopoint to place on map
geoPoint = new GeoPoint((int) (Double.parseDouble(user_latitude) * 1E6),
(int) (Double.parseDouble(user_longitude) * 1E6));

// Drawable marker icon
Drawable drawable_user = this.getResources()
.getDrawable(R.drawable.mark_red);

itemizedOverlay = new AddItemizedOverlay(drawable_user, this);

// Map overlay item
overlayitem = new OverlayItem(geoPoint, "Your Location",
"That is you!");

itemizedOverlay.addOverlay(overlayitem);

mapOverlays.add(itemizedOverlay);
itemizedOverlay.populateNow();

// Drawable marker icon
Drawable drawable = this.getResources()
.getDrawable(R.drawable.mark_blue);

itemizedOverlay = new AddItemizedOverlay(drawable, this);


mc = mapView.getController();


// These values are used to get map boundary area
// The area where you can see all the markers on screen
int minLat = Integer.MAX_VALUE;
int minLong = Integer.MAX_VALUE;
int maxLat = Integer.MIN_VALUE;
int maxLong = Integer.MIN_VALUE;


// check for null in case it is null
if (nearPlaces.results != null) {
// loop through all the places
for (Place place : nearPlaces.results) {
latitude = place.geometry.location.lat; // latitude
longitude = place.geometry.location.lng; // longitude

// Geopoint to place on map
geoPoint = new GeoPoint((int) (latitude * 1E6),
(int) (longitude * 1E6));

// Map overlay item
overlayitem = new OverlayItem(geoPoint, place.name,
place.vicinity);

itemizedOverlay.addOverlay(overlayitem);


// calculating map boundary area
minLat = (int) Math.min( geoPoint.getLatitudeE6(), minLat );
minLong = (int) Math.min( geoPoint.getLongitudeE6(), minLong);
maxLat = (int) Math.max( geoPoint.getLatitudeE6(), maxLat );
maxLong = (int) Math.max( geoPoint.getLongitudeE6(), maxLong );
}
mapOverlays.add(itemizedOverlay);

// showing all overlay items
itemizedOverlay.populateNow();
}


// Adjusting the zoom level so that you can see all the markers on map
mapView.getController().zoomToSpan(Math.abs( minLat - maxLat ), Math.abs( minLong - maxLong ));

// Showing the center of the map
mc.animateTo(new GeoPoint((maxLat + minLat)/2, (maxLong + minLong)/2 ));
mapView.postInvalidate();
}


@Override
protected boolean isRouteDisplayed() {
return false;
}

}

这是我的项目叠加层,在 map 上显示图钉。

public class AddItemizedOverlay extends ItemizedOverlay<OverlayItem> {

private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();

private Context context;

public AddItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}

public AddItemizedOverlay(Drawable defaultMarker, Context context) {
this(defaultMarker);
this.context = context;
}

@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView)
{

if (event.getAction() == 1) {
GeoPoint geopoint = mapView.getProjection().fromPixels(
(int) event.getX(),
(int) event.getY());
// latitude
double lat = geopoint.getLatitudeE6() / 1E6;
// longitude
double lon = geopoint.getLongitudeE6() / 1E6;
//Toast.makeText(context, "Lat: " + lat + ", Lon: "+lon, Toast.LENGTH_SHORT).show();
}
return false;
}

@Override
protected OverlayItem createItem(int i) {
return mapOverlays.get(i);
}

@Override
public int size() {
return mapOverlays.size();
}

@Override
protected boolean onTap(int index) {
OverlayItem item = mapOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(this.context);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
return true;
}

public void addOverlay(OverlayItem overlay) {
mapOverlays.add(overlay);
}

public void populateNow(){
this.populate();
}

}

请给我你的意见。

最佳答案

使用“mapController”类的函数 animateTo(your_desired_point)。在 onTap() 的 AddItemizedOverlay 类中使​​用它。

关于java - 如何在谷歌地图上创建从用户位置到用户选择的项目覆盖的路线/导航?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14795793/

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