2013-01-10 75 views
2

我試圖做一個應用程序,它將顯示離線地圖上有一些可點擊的點。 我的問題是,當我測試我的應用程序時,地圖切片不會顯示。此外,只要移動地圖,可點擊的點(標記)就會消失。Osm瓷磚沒有顯示在Android應用程序

對問題的任何幫助或想法都會非常有幫助。

這裏是我的代碼:

MainActivity.java:

package com.cvasil05.offlinemapwithoverlay; 

import java.util.ArrayList; 
import org.osmdroid.tileprovider.tilesource.TileSourceFactory; 
import org.osmdroid.util.GeoPoint; 
import org.osmdroid.views.MapController; 
import org.osmdroid.views.MapView; 
import org.osmdroid.views.overlay.MyLocationOverlay; 
import org.osmdroid.views.overlay.OverlayItem; 

import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainActivity extends Activity { 


// Default map zoom level: 
private int MAP_DEFAULT_ZOOM = 17; 

// Default map Latitude: 
private double MAP_DEFAULT_LATITUDE = 35.14476619358656E6; 

// Default map Longitude: 
private double MAP_DEFAULT_LONGITUDE = 33.409520387649536E6; 

private MapView    mymapView   = null; 
private MapController  myMapController  = null; 
private MyLocationOverlay location   = null; 
LocationManager    mylocmanager  = null; 
LocationListener   myloclistener  = null; 

ArrayList<OverlayItem>  OverlayItemArray = null; 
MyOverlayItem    overlay    = null; 

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

    // Initialize Map with its properties 
    mymapView = (MapView)findViewById(R.id.mapview); 
    mymapView.setBuiltInZoomControls(false); 
    mymapView.setMultiTouchControls(false); 
    mymapView.setTileSource(TileSourceFactory.MAPQUESTOSM); 

    // Initialize Map Controller 
    myMapController = mymapView.getController(); 

    mylocmanager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    myloclistener = new LocationListener() { 

     public void onStatusChanged(String provider, int status, Bundle extras) { 
      // TODO Auto-generated method stub 

     } 

     public void onProviderEnabled(String provider) { 
      // TODO Auto-generated method stub 

     } 

     public void onProviderDisabled(String provider) { 
      // TODO Auto-generated method stub 

     } 

     public void onLocationChanged(Location location) { 
      myMapController.animateTo(new GeoPoint(location.getLatitude(), location.getLongitude())); 
      myMapController.setZoom(17); 
      mymapView.invalidate(); 
     } 

     public void run() { 
      // TODO Auto-generated method stub 
      location.runOnFirstFix(new Runnable() { 
       public void run() { 
        mymapView.getController().animateTo(location.getMyLocation()); 
       } 
      }); 
     } 
    }; 
    mylocmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,0,myloclistener); 



    OverlayItemArray = new ArrayList<OverlayItem>(); 
    // Points to be added 
    GeoPoint point1 = new GeoPoint(35.14392398396914E6, 33.40521812438965E6); 
    OverlayItem overlayitem1 = (OverlayItem) new OverlayItem("Εστίες", "Οι εστίες του Πανεπιστημίου Κύπρου.", point1); 
    OverlayItemArray.add(overlayitem1); 

    GeoPoint point2 = new GeoPoint(35.14447668501356E6, 33.41047525405884E6); 
    OverlayItem overlayitem2 = new OverlayItem("ΘΕΕ02", "Κτίριο Χημείας & Φυσικής.", point2); 
    OverlayItemArray.add(overlayitem2); 

    GeoPoint point3 = new GeoPoint(35.14461705293515E6, 33.41110825538635E6); 
    OverlayItem overlayitem3 = new OverlayItem("ΘΕΕ01", "Κτίριο Πληροφορικής & Μαθηματικών.", point3); 
    OverlayItemArray.add(overlayitem3); 

    GeoPoint point4 = new GeoPoint(35.14512588462148E6, 33.41071128845215E6); 
    OverlayItem overlayitem4 = new OverlayItem("ΧΩΔ01", "Χώροι Διδασκαλίας", point4); 
    OverlayItemArray.add(overlayitem4); 

    GeoPoint point5 = new GeoPoint(35.1459856274836E6, 33.41367244720459E6); 
    OverlayItem overlayitem5 = new OverlayItem("Κέντρο αθλητισμού", "Αποτελείται από το Γυμναστήριο, το Γήπεδο Τέννις και το Γύπεδο Φούτσαλ.", point5); 
    OverlayItemArray.add(overlayitem5); 

    // Add Points to Overlay 
    overlay = new MyOverlayItem(this, OverlayItemArray); 
    mymapView.getOverlays().add(overlay); 


    /* 
    // Get Location 
    location = new MyLocationOverlay(getApplicationContext(), mymapView); 
    // View Location 
    mymapView.getOverlays().add(location); 
    location.enableMyLocation(); 
    location.disableFollowLocation(); 
    */ 


    // Zoom and Center Map 
    myMapController.setZoom(MAP_DEFAULT_ZOOM); 
    myMapController.setCenter(new GeoPoint(MAP_DEFAULT_LATITUDE, MAP_DEFAULT_LONGITUDE)); 

}  


// Create Menu 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

// Actions on Menu Options 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    if(item.getItemId() == R.id.esties){ 
     myMapController.setZoom(MAP_DEFAULT_ZOOM); 
     myMapController.setCenter(new GeoPoint(MAP_DEFAULT_LATITUDE, MAP_DEFAULT_LONGITUDE)); 
    } 
    return super.onOptionsItemSelected(item); 
} 



} 

MyOverlayItem.java:

package com.cvasil05.offlinemapwithoverlay; 

import java.util.List; 

import org.osmdroid.views.MapView; 
import org.osmdroid.views.overlay.ItemizedIconOverlay; 
import org.osmdroid.views.overlay.OverlayItem; 

import android.app.AlertDialog; 
import android.content.Context; 

public class MyOverlayItem extends ItemizedIconOverlay<OverlayItem> { 

private Context mContext; 

public MyOverlayItem(final Context context, final List<OverlayItem> aList) { 
    super(context, aList, new OnItemGestureListener<OverlayItem>() { 
     public boolean onItemSingleTapUp(final int index, 
       final OverlayItem item) { 
      return false; 
     } 

     public boolean onItemLongPress(final int index, 
       final OverlayItem item) { 
      return false; 
     } 
    }); 
    // TODO Auto-generated constructor stub 
    mContext = context; 
} 

@Override 
protected boolean onSingleTapUpHelper(final int index, final OverlayItem item, final MapView mapView) { 
    AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 
    dialog.setTitle(item.getTitle()); 
    dialog.setMessage(item.getSnippet()); 
    dialog.show(); 
    return true; 
} 

} 

我的XML文件是:

<org.osmdroid.views.MapView 
     android:id="@+id/mapview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:enabled="true"  
     android:clickable="true" 
    /> 

,我已將此添加到我的清單文件:

<supports-screens 
android:anyDensity="true" 
android:resizeable="false" 
android:largeScreens="true" 
android:normalScreens="true" /> 

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

回答

1

林在osmdroid一個newbe :)不過我有同樣的問題。在我的情況我EmulatorDevice是在沒有SD卡配置

相關問題