2013-12-04 1 views
0

Я пытаюсь отобразить наземное наложение, загруженное с url.Android Google Maps GroundOverlay из растрового изображения выглядит белым

проблема заключается в том, что изображение не отображается, а наложение выглядит как белый квадрат.

мышления растровый объект неисправен я тестировал:

  1. addding тот же растровый объект в маркер - маркер показывает нормально

  2. получить изображение с .fromResource(R.id.myimage) - наложение показывает нормально

но мое изображение из загруженного объекта Bitmap.

Это мой код:

private void addOverlayFromBitmap(Bitmap bmImage){ 
     BitmapDescriptor image = BitmapDescriptorFactory.fromBitmap(bmImage); 
     //image = BitmapDescriptorFactory.fromResource(R.drawable.radaraimage9); 

     //Set Anchors 
     LatLng NE_ANCHOR = new LatLng(34.516481,37.679488); 
     LatLng SW_ANCHOR = new LatLng(29.474814,31.876530); 

     //Set Bounds 
     LatLngBounds bounds = new LatLngBounds(SW_ANCHOR,NE_ANCHOR); 

     // Append Overlay to map - image appears as white square 
     map.addGroundOverlay(new GroundOverlayOptions() 
      .image(image) 
      .positionFromBounds(bounds) 
      .transparency((float) 0.5)); 

     //add marker for debugging - image appears fine 
     map.addMarker(new MarkerOptions() 
       .position(NORTH_EAST_ANCHOR) 
       .icon(image) 
       ); 
} 

AsyncTask:

private class LoadRadarImageryTask extends AsyncTask<String, Void, Bitmap> { 
    Bitmap bmImage; 

    public LoadRadarImageryTask() { 
     super(); 
    } 

    protected Bitmap doInBackground(String... urls) { 
     String url = urls[0]; 
     Bitmap image = null; 
     try { 
      InputStream in = new java.net.URL(url).openStream(); 
      image = BitmapFactory.decodeStream(in); 
     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return image; 
    } 

    protected void onPostExecute(Bitmap image) { 
     addOverlayFromBitmap(image); 
    } 
} 

ответ

0

Это может быть проблема использования больших изображений означает более высокое разрешение. Это может быть предложено вашим лог-кошкой, поэтому вы можете вставить свой лог-код здесь.

ИЛИ

Попробуйте использовать плитки Overlay вместо наложения на земную поверхность.

ИЛИ

использовать этот код, который работал для меня та же проблема ..

import android.support.v4.app.FragmentActivity; 
    import android.support.v4.app.FragmentManager; 
    import android.util.Log; 
    import android.util.TypedValue; 
    import android.view.Menu; 
    import android.view.MenuItem; 





    public class MapDisplayActivity extends FragmentActivity implements   OnMapClickListener, OnMapLongClickListener { 
    private GoogleMap myMap; 

    private static LatLng SearchPlace; 
    double Latitude; 
    double Longitiude; 
    List<Address> addresses; 

    //Address location; 
    BitmapDescriptor image; 
/// private static final LatLng NEWARK = new LatLng(18.5236, 73.8478); 


     private GroundOverlay mGroundOverlay; 

     //this is for omnistarg dont touch this 
     LatLng southwest= new LatLng(-85.513398,-178.242187); 

     LatLng northeast= new LatLng(85.513398,178.242187); 

    float zoomValue = 7.0f; 
    private String SpinerValue; 
    private Bitmap bitmap; 
     @Override 
     `enter code here`protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mapactivity); 
    //VMRuntime.getRuntime().setMinimumHeapSize(4 * 1024 * 1024); 
    Log.v("Utils", "Max mem in MB : " + (Runtime.getRuntime().maxMemory()/(1024*1024))); 
    Runtime.getRuntime().maxMemory(); 
    Debug.getNativeHeapSize(); 

    initActionBar(); 

    //textInfo=(TextView)findViewById(R.id.locinfo); 

     FragmentManager myFragmentManager = getSupportFragmentManager(); 
     SupportMapFragment mySupportMapFragment 
     = (SupportMapFragment)myFragmentManager.findFragmentById(R.id.map); 
     myMap = mySupportMapFragment.getMap(); 





     // myMap.setMyLocationEnabled(true); 


     // myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
     myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     // myMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
     //myMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); 


     myMap.setOnMapClickListener(this); 
     myMap.setOnMapLongClickListener(this); 
     myMap.getUiSettings().setZoomControlsEnabled(true); 
     myMap.getUiSettings().setMyLocationButtonEnabled(true); 

     Intent intent=getIntent(); 
     Latitude=intent.getDoubleExtra("Latitude", 0.000); 
     Longitiude=intent.getDoubleExtra("Longititude", 0.000); 
     SpinerValue=(String)intent.getStringExtra("SPINNERVALUE"); 

     SearchPlace = new LatLng(Latitude, Longitiude); 

     myMap.moveCamera(CameraUpdateFactory.newLatLng(SearchPlace)); 
     myMap.addMarker(new MarkerOptions().position(SearchPlace));//.title(PlaceName)); 
     drawImageOverMap(); 




} 



public void drawImageOverMap(){ 

     myMap.animateCamera(CameraUpdateFactory.zoomTo(zoomValue)); 

      //image =BitmapDescriptorFactory.fromResource(R.drawable.omnistar_g); 
     if(SpinerValue.equalsIgnoreCase("TEC")){ 
      //centerpoint_vrs 
      bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.omnistar_two); 


      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize=4; 
      image=BitmapDescriptorFactory.fromBitmap(bitmap); 
       LatLngBounds bounds =new LatLngBounds(southwest, northeast); 


       mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions() 
        .image(image) 
        //.transparency(0.4f) 

        //.anchor(0, 1) 
        .positionFromBounds(bounds)); 

     } 
     else if(SpinerValue.equalsIgnoreCase("OmniSTARG2")){ 
      bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.omnistar_g_img); 


      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize=4; 
      image=BitmapDescriptorFactory.fromBitmap(bitmap); 
       LatLngBounds bounds =new LatLngBounds(southwest, northeast); 


       mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions() 
        .image(image) 
        .transparency(0.4f) 

        //.anchor(0, 1) 
        .positionFromBounds(bounds)); 
     } 
     else if(SpinerValue.equalsIgnoreCase("OmniStarHP")){ 
      bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.omnistar_hp_two); 


      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize=4; 
      image=BitmapDescriptorFactory.fromBitmap(bitmap); 
       LatLngBounds bounds =new LatLngBounds(southwest, northeast); 


       mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions() 
        .image(image) 
        .transparency(0.4f) 

        //.anchor(0, 1) 
        .positionFromBounds(bounds)); 
     } 
     ///////////////////////////////////////////// 
     else if(SpinerValue.equalsIgnoreCase("OmniStarVBS")){ 
      bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.omnistar_vbs_two); 


      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize=4; 
      image=BitmapDescriptorFactory.fromBitmap(bitmap); 
       LatLngBounds bounds =new LatLngBounds(southwest, northeast); 


       mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions() 
        .image(image) 
        .transparency(0.4f) 

        //.anchor(0, 1) 
        .positionFromBounds(bounds)); 

     } 
     else if(SpinerValue.equalsIgnoreCase("OmniSTARXP")){ 
      bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.omnistar_xp_two); 


      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize=4; 
      image=BitmapDescriptorFactory.fromBitmap(bitmap); 
       LatLngBounds bounds =new LatLngBounds(southwest, northeast); 


       mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions() 
        .image(image) 
        .transparency(0.4f) 

        //.anchor(0, 1) 
        .positionFromBounds(bounds)); 
     } 
     else if(SpinerValue.equalsIgnoreCase("RTXStandardviaCellular")){ 
      //rtxcell 
      bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.rtx_cell_two); 


      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize=4; 
      image=BitmapDescriptorFactory.fromBitmap(bitmap); 
       LatLngBounds bounds =new LatLngBounds(southwest, northeast); 


       mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions() 
        .image(image) 
        .transparency(0.3f) 

        //.anchor(0, 1) 
        .positionFromBounds(bounds)); 
     } 
     else if(SpinerValue.equalsIgnoreCase("RTXFastviaSatellite")){ 
      //rtxfast.png 
      bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.rtx_fast_two); 


      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize=4; 
      image=BitmapDescriptorFactory.fromBitmap(bitmap); 
       LatLngBounds bounds =new LatLngBounds(southwest, northeast); 


       mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions() 
        .image(image) 
        .transparency(0.3f) 

        //.anchor(0, 1) 
        .positionFromBounds(bounds)); 
     } 
     else if(SpinerValue.equalsIgnoreCase("RTXStandardviaSatellite")){ 
      //rtxsat.png 
      bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.rtx_sat_two); 


      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize=4; 
      image=BitmapDescriptorFactory.fromBitmap(bitmap); 
       LatLngBounds bounds =new LatLngBounds(southwest, northeast); 


       mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions() 
        .image(image) 
        .transparency(0.3f) 

        //.anchor(0, 1) 
        .positionFromBounds(bounds)); 
     } 
     else if(SpinerValue.equalsIgnoreCase("VRSNow")){ 
      //vrsnowtec.png 
      bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.vrsnow_tec_two); 


      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize=4; 
      image=BitmapDescriptorFactory.fromBitmap(bitmap); 
       LatLngBounds bounds =new LatLngBounds(southwest, northeast); 


       mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions() 
        .image(image) 
        .transparency(0.3f) 

        //.anchor(0, 1) 
        .positionFromBounds(bounds)); 
     } 
        // InputStream is =getClass().getResourceAsStream(omnistar_g); 
        //bitmap = readAssetsBitmap("omnistar_g.png"); 
        //bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.trimble_screen_logo); 
        //bitmap=bitmap(is); 


        //image =BitmapDescriptorFactory.fromResource(R.drawable.omnistar_g); 


          bitmap.recycle(); 
          bitmap = null; 
          System.gc(); 
          Runtime.getRuntime().gc(); 



} 
+0

Мишень изображение GIF 512x512 и при сохранении в компьютере его размер 100kb. – gvitz

+0

это слишком большой? , я ничего не нашел в журнале и проблемы с его печатью, но при попытке использовать значок Android (размер 4kb) он работает. есть ли другой вариант, а не TileOverlay? – gvitz

+0

Уверен, что это проблема больших изображений, потому что он работает с маленьким значком размера. в чем проблема перехода к наложениям на плитки? и если вы не хотите двигаться, см. мое редактирование. –

Смежные вопросы