【问题标题】:how to show marker detail on marker click in android osm?如何在android osm中的标记点击上显示标记细节?
【发布时间】:2014-12-30 09:37:59
【问题描述】:

我是在 android 中使用 osm 的新手。我已成功在 android 中显示 OSM。但我不知道“如何单击标记并显示标记详细信息,如 google map v2 infowindow popup”。

如何使用图像 onclick marker openstreetmap android 显示标记详细信息,与 Google map Infowindow show on marker click 相同。

请给我代码或想法在osm android中实现标记点击事件。

提前谢谢你。

这是我在android java中实现的代码

public class MainActivity extends Activity 
{
private MapView mapView;
private MapController mapController;    
LocationManager locationManager;

ArrayList<OverlayItem> overlayItemArray;

@Override
protected void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView = (MapView)findViewById(R.id.mapview);

mapView.setBuiltInZoomControls(true);
mapView.setMultiTouchControls(true);
mapView.setClickable(true);
//mapView.setUseDataConnection(false);
mapController = (MapController) mapView.getController();
mapController.setZoom(17);

//--- Create Overlay
overlayItemArray = new ArrayList<OverlayItem>();

DefaultResourceProxyImpl defaultResourceProxyImpl = new DefaultResourceProxyImpl(this);
MyItemizedIconOverlay myItemizedIconOverlay = new MyItemizedIconOverlay(overlayItemArray, null, defaultResourceProxyImpl);
mapView.getOverlays().add(myItemizedIconOverlay);
//---

locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

//for demo, getLastKnownLocation from GPS only, not from NETWORK
Location lastLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(lastLocation != null)
{
    updateLoc(lastLocation);
}

//Add Scale Bar
ScaleBarOverlay myScaleBarOverlay = new ScaleBarOverlay(this);
mapView.getOverlays().add(myScaleBarOverlay);
}

@Override
protected void onResume()
{
super.onResume();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, myLocationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, myLocationListener);
}

@Override
protected void onPause() 
{
super.onPause();
locationManager.removeUpdates(myLocationListener);
}

private void updateLoc(Location loc)
{
GeoPoint locGeoPoint = new GeoPoint(loc.getLatitude(), loc.getLongitude());
mapController.setCenter(locGeoPoint);
mapController.animateTo(locGeoPoint);

setOverlayLoc(loc);

mapView.invalidate();
}

private void setOverlayLoc(Location overlayloc)
{
GeoPoint overlocGeoPoint = new GeoPoint(overlayloc);
//---
overlayItemArray.clear();

OverlayItem newMyLocationItem = new OverlayItem("My Location", "My Location", overlocGeoPoint);
overlayItemArray.add(newMyLocationItem);
//---
}

private LocationListener myLocationListener = new LocationListener()
{
@Override
public void onLocationChanged(Location location)
{
    updateLoc(location);
}

@Override
public void onProviderDisabled(String provider)
{           
}

@Override
public void onProviderEnabled(String provider)
{           
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{           
}
};

private class MyItemizedIconOverlay extends ItemizedIconOverlay<OverlayItem>
{

public MyItemizedIconOverlay(List<OverlayItem> pList,org.osmdroid.views.overlay.ItemizedIconOverlay.OnItemGestureListener<OverlayItem> pOnItemGestureListener,
        ResourceProxy pResourceProxy)
{
    super(pList, pOnItemGestureListener, pResourceProxy);           
}

@Override
public void draw(Canvas canvas, MapView mapview, boolean arg2)
{
    super.draw(canvas, mapview, arg2);

    if(!overlayItemArray.isEmpty())
    {
        //overlayItemArray have only ONE element only, so I hard code to get(0)
        GeoPoint in = overlayItemArray.get(0).getPoint();

        Point out = new Point();
        mapview.getProjection().toPixels(in, out);

        Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);
        canvas.drawBitmap(bm,out.x - bm.getWidth()/2,out.y - bm.getHeight()/2,null);
    }
}

@Override
public boolean onSingleTapUp(MotionEvent event, MapView mapView)
{
    //return super.onSingleTapUp(event, mapView);
    return true;
}

@Override
public boolean onSingleTapConfirmed(MotionEvent event, MapView mapView)
{
    return true;
}
}
}

activity_main.xm

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<org.osmdroid.views.MapView
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
</org.osmdroid.views.MapView>

</LinearLayout>

【问题讨论】:

标签: android openstreetmap osmdroid


【解决方案1】:

所有这些功能都在使用OSMBonusPack Marker 类时可用,其目的是为osmdroid 提供一个类似Google Maps v2 的Marker。

【讨论】:

    【解决方案2】:

    我从这个链接得到了解决方案

    http://code.google.com/p/osmdroid/issues/detail?id=245#makechanges

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      相关资源
      最近更新 更多