2014-12-30 6 views
0

android.i에서 osm을 사용하는 것이 좋습니다. OSM을 android.But에 성공적으로 표시했습니다. "마커를 클릭하고 Google지도 v2 infowindow 팝업과 같은 마커 세부 사항을 표시하는 방법"을 가지고 있습니다.마커에 마커 세부 정보 표시 방법 android osm에서 클릭하십시오.

이미지로 마커 세부 정보를 표시하는 방법 onclick 마커 openstreetmap android, 마커 클릭시 Google지도 인포 우드 쇼와 동일합니다.

osm android에서 마커 클릭 이벤트를 구현하기위한 코드 또는 아이디어를 제공해주십시오.

미리 감사드립니다.

내가 안드로이드 자바로 구현 한 내 코드입니다

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> 
+2

http://stackoverflow.com/questions/12991175/osmdroid-ontap-example – royB

+0

로이 작품에 감사드립니다. – Nehalkumar

답변

1

모든 이러한 기능은을 사용할 때 사용할 수 있습니다.osmdroid에 Google지도 v2와 유사한 마커를 제공하는 마커 클래스입니다.