Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Ejemplo sencillo de OSMDroid requerido

Estoy intentando crear una aplicación que utilice mapas sin conexión y mosaicos personalizados. Para esto he decidido utilizar OSMDroid y han incluido el tarro dentro de mi proyecto. Creare mis azulejos de encargo usando MOBAC.

Me han dirigido a estos ejemplos: http://code.google.com/p/osmdroid/source/browse/#svn%2Ftrunk%2FOpenStreetMapViewer%2Fsrc%2Forg%2Fosmdroid%2Fsamples

Pero estoy luchando para seguir como soy nuevo en java y android.

He creado un archivo de clase llamado test (que he creado siguiendo un ejemplo!):

public class test extends Activity { /** Called when the activity is first created. */ protected static final String PROVIDER_NAME = LocationManager.GPS_PROVIDER; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView map = (MapView) findViewById(R.id.map); map.setTileSource(TileSourceFactory.MAPQUESTOSM); map.setBuiltInZoomControls(true); map.setMultiTouchControls(true); map.getController().setZoom(16); map.getController().setCenter(new GeoPoint(30266000, -97739000)); } 

}

Con un archivo de diseño:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <org.osmdroid.views.MapView android:id="@+id/map" android:layout_width="fill_parent" android:layout_height="fill_parent" tilesource="MapquestOSM" android:layout_weight="1" /> </LinearLayout> 

Cuando ejecuto esto no veo ningún mapa, sólo una cuadrícula vacía. Creo que esto es debido a mi tilesource pero no estoy seguro de lo que necesito para cambiarlo.

ACTUALIZACIÓN: También tengo lo siguiente en mi archivo de manifiesto:

 <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" /> 

¿Alguien puede ayudar?

Bex

Solución Asegúrese de que la posición de los permisos esté en el lugar correcto en el manifiesto.

  • Android: el reproductor de youtube ha sido lanzado
  • Parámetro de vista de imagen a medida que se desplaza
  • La base de datos SQLite de Android se corrompe
  • Obtener la posición de un elemento dentro de un ListView?
  • Obtener los recursos de la aplicación idiomas
  • Conectarse a dispositivos Android utilizando wifi directo sin necesidad de ayuda
  • Toca dos veces para acercar y pellizcar para hacer zoom en ImageView en android
  • NotificationManager.cancel (id) no funciona dentro de un receptor de difusión
  • 6 Solutions collect form web for “Ejemplo sencillo de OSMDroid requerido”

    Este trabajó para mí:

     setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE); 

    como se hizo:

     setTileSource(TileSourceFactory.MAPNIK); 

    No necesitaba tener nada en el XML

    Está volviendo a ser ahora, tuve que añadir uno de estos:

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

    Al archivo manifest.xml.

    No puedo recordar cuál era necesario pero si usted pone todos los 3 adentro, debe trabajar.

    Bueno, aquí está mi fuente completa, que acabo de ejecutar en el emulador:

     package com.nbt.osmdroidtest; import org.osmdroid.tileprovider.tilesource.TileSourceFactory; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.MapController; import org.osmdroid.views.MapView; import android.app.Activity; import android.os.Bundle; public class OsmDroidTest extends Activity { /** Called when the activity is first created. */ private MapController mapController; private MapView mapView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mapView = (MapView) findViewById(R.id.mapview); mapView.setTileSource(TileSourceFactory.MAPNIK); mapView.setBuiltInZoomControls(true); mapController = mapView.getController(); mapController.setZoom(15); GeoPoint point2 = new GeoPoint(51496994, -134733); mapController.setCenter(point2); } protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } } 

    Déle un minuto o así que cargar, ya que inicialmente podría ser bastante lento en la construcción de una memoria caché. Esas coordenadas deberían ponerlo en el centro de Londres. Si todavía tiene problemas, vea si hay algo que ilumine en el logcat.

    Y el archivo main.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <org.osmdroid.views.MapView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> </LinearLayout> 

    Para evitar el crash bubbly tenía, debes agregar osmdroid-android.jar y slf4j-android.jar a libs en tu proyecto. Ver Simple osmdroid aplicación no funciona para más detalles

      final MapView mapView = new MapView(this, 256); mapView.setBuiltInZoomControls(true);//显示缩放按钮 //display the zoom button mapView.setMultiTouchControls(true);//开启多点触控 //turn on the multiple touch feature mapView.getController().setZoom(13); mapView.setTileSource(TileSourceFactory.MAPQUESTOSM); mapView.getController().setCenter(new GeoPoint(39.9,116.3));//设置中心点 //set the center //定位当前位置 // locate to current position myLocationOverlay = new MyLocationOverlay(getApplicationContext(), mapView); mapView.getOverlays().add(myLocationOverlay); myLocationOverlay.enableCompass(); myLocationOverlay.enableMyLocation(); myLocationOverlay.enableFollowLocation(); 

    Creo que al mirar otras muestras, se pierden permisos. A menos que el mapa ya esté en caché en su dispositivo, definitivamente necesita acceder a INTERNET. Prueba este conjunto:

     <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" /> 

    buena suerte

    ** Tenga en cuenta que si está orientado a dispositivos Android> = 6.0 (SDK> = 23), debe comprobar si hay permisos "peligrosos" en tiempo de ejecución. Los permisos peligrosos necesarios para osmdroid son: WRITE_EXTERNAL_STORAGE y ACCESS_COARSE_LOCATION / ACCESS_FINE_LOCATION. Consulte esta implementación

    Toma de: "Cómo usar la biblioteca osmdroid" – link

    He integrado el mapa OSM en mi aplicación. La clase siguiente se utiliza 1.OSMMap actividad 2.OSMMap ItemizedOverlay Tres jar tiene que copiar en la carpeta lib de Proyecto-> App-> lib OSMBonusPack-v5.8.1-sources (1) .jar osmdroid-android-4.3.jar slf4j-android -1.5.8.jar Actividad 1.OSMmap

      public class OSMMap extends Activity { MapView mapView; MapController mapController; private double latitude; private double longitude; String date,time,vname; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_osmmap2); //Coming Parameter is from vehicleinfo activity Intent intent=getIntent(); Bundle bundle=intent.getExtras(); latitude = Double.parseDouble(bundle.getString("lat")); Log.i("CPA","In the OSM map method"+latitude); longitude = Double.parseDouble(bundle.getString("lng")); Log.i("CPA","In the OSM map method"+longitude); date = bundle.getString("date"); Log.i("CPA","In the OSM map method"+date); time = bundle.getString("time"); Log.i("CPA","In the OSM map method"+time); vname = bundle.getString("vname"); Log.i("CPA","In the OSM map method"+vname); mapView= (MapView) findViewById(R.id.mapview); mapView.setTileSource(TileSourceFactory.MAPNIK); // mapView.setTileSource(TileSourceFactory.BASE_OVERLAY_NL); // mapView.setTileSource(TileSourceFactory.CYCLEMAP); // mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE); // mapView.setTileSource(TileSourceFactory.BASE); // mapView.setTileSource(TileSourceFactory.MAPQUESTOSM); // mapView.setTileSource(TileSourceFactory.MAPQUESTAERIAL); mapView.setBuiltInZoomControls(true); mapView.setMultiTouchControls(true); mapController= (MapController) mapView.getController(); Log.i("CPA","In the map view"+mapView); // GeoPoint geoPoint=new GeoPoint(40.712784,-74.005941); GeoPoint geoPoint=new GeoPoint(latitude,longitude); Log.i("CPA","In the OSM map method"+latitude); Log.i("CPA","In the OSM map method"+longitude); mapController.setZoom(8); mapController.animateTo(geoPoint); Log.i("CPA","In the OSM map method"+geoPoint); Log.i("CPA","In the OSsM map method"); List<Overlay> mapOverlays = mapView.getOverlays(); Drawable drawable = this.getResources().getDrawable(R.drawable.blue_marker); OSMDemo itemizedoverlay = new OSMDemo(drawable,this); itemizedoverlay.setEnabled(true); OverlayItem overlayItem=new OverlayItem("Vehicle"+time,"VEHICLE NO"+date,geoPoint); mapView.getController().setZoom(18); mapView.getController().setCenter(geoPoint); itemizedoverlay.addOverlay(overlayItem); mapOverlays.add(itemizedoverlay); mapView.getOverlays().add(itemizedoverlay); mapView.setMultiTouchControls(true); } } 

    2.OSM ItemizedOverlay

     public class OSMDemo extends ItemizedOverlay<OverlayItem> { static ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); private Context mContext; public OSMDemo(Drawable pDefaultMarker, Context context) { super(pDefaultMarker,new DefaultResourceProxyImpl(context)); mContext=context; } public void addOverlay(OverlayItem overlay) { mOverlays.add(overlay); populate(); } @Override protected OverlayItem createItem(int i) { return mOverlays.get(0); } @Override public int size() { return mOverlays.size(); } @Override public boolean onSnapToItem(int i, int i1, Point point, IMapView iMapView) { return false; } public boolean ontap(int index) { Log.i("CPA","In the OSMDEMO ONTAP"); OverlayItem item = mOverlays.get(index); AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setTitle(item.getTitle()); dialog.setMessage(item.getSnippet()); dialog.show(); return true; } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.