kleines googlemaps problem

  • 5 Antworten
  • Letztes Antwortdatum
1

19sheriff93

Neues Mitglied
0
hi leute! habe ein kleines googlemaps problem, ärfere mich schon seit tagen damit rum, bekomms aber einfach nicht hin:

habe eine app geschrieben, in der man bestimmte betrirbe finden kann, diese werden aus einer datenbank ausgelesen. mit googlemaps werden alle betriebe angezeigt(ganz österreich) bei meiner vorherigen app funktionierte das wunderbar, jetzt allerdings nicht mehr und ich finde den dehler einfach nicht, ist echt zum verzweifeln :(

der cde allein nützt glaub ih nicht viel, darum hier das projekt: http://db.tt/Q0cGcXES
gibt bei erfolgreicher hilfe natürlich eine gegenleistung!


danke schonmal
lg sheriff

Gesendet von meinem GT-I9300 mit der Android-Hilfe.de App
 
Jetzt erwartest du wirklich, dass wir uns dadurch kämpfen?
Du willst also wirklich, dass wir auf die Dropbox seite gehen, versuchen deinen Code zu verstehen, den Fehler zu finden und dir dann die Lösung zu sagen?!

Du bist ja blauäugig :D

Guß
 
naja ich glaub der code allein nützt nicht viel oder? aber hier wäre er:
Code:
package kioe.first.com;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;


import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

public class LocationDemo2 extends MapActivity {

  private static final String TAG = "**** "+LocationDemo2.class.getSimpleName();
  
  private MapController mapController;
  MapView mapView;
  GeoPoint geoPoint;
  boolean art;
  int pFeld[];
  int districtID;
  double zielLat,zielLng;  //geographische Breite,Länge als Parameter des Ziels
  private boolean DEBUG = false;
  
  
  //Buttons:
  public void StartseiteKlick (View vies) {
  setContentView(R.layout.startseite);
    }
  public void GooglemapsKlick (View vies) {
  setContentView(R.layout.googlemaps);
    } 
  public void SucheKlick (View vies) {
setContentView(R.layout.suche);
    }
  public void BezirkeKlick (View vies) {
setContentView(R.layout.bezirke);
  }
    
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

    Intent in = getIntent();
    art = in.getBooleanExtra("karte", false);
    if (art) { //Karte mit allen Betrieben des Bezirks
      districtID=in.getIntExtra("districtID",0);
      pFeld = in.getIntArrayExtra("pFeld"); //Koordinaten der Betriebe
    } else { //Karte mit dem aus der Liste gewählten Betrieb im Mittelpunkt

      zielLat = in.getFloatExtra("lat",0);

      zielLng = in.getFloatExtra("lng",0);
      geoPoint = new GeoPoint((int)(zielLat*1E6), (int)(zielLng*1E6));

    }
// Zoom aktivieren
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
// MapController ermitteln
mapController = mapView.getController();
  } //Ende onCreate

  @Override
  protected void onStart() {
  super.onStart();
    if (!art) { //Karte nur für aus der Liste ausgewählten Betrieb
      //fügt der MapView neues Overlay (zum zeichnen der 'current location') hinzu
    List<Overlay> overlays = mapView.getOverlays();
//    overlays.clear();
      overlays.add(new MyOverlay());
    } else //alle Betriebe in Karte zeichnen
    multipleItems();
  }
  
  private void multipleItems() {
//      mapView.setSatellite(true);

    Drawable markerDefault = this.getResources().getDrawable(R.drawable.mm_20_green);
    MyItemizedOverlay itemizedOverlay = new MyItemizedOverlay(markerDefault);
    
    //für alle Betriebe ein Item aus den Koordinaten bilden und die
    //where-Klausel mit der _id des Betriebes hinzufügen für onTap
    for (int i=0; i<pFeld.length; i+=3) {
      if (pFeld[i+1] > 0)
      itemizedOverlay.addOverlayItem(pFeld[i+1],pFeld[i+2],"_id="+pFeld[i]);
    }
    //alle Items zur MapView hinzufügen
    mapView.getOverlays().add(itemizedOverlay);
    //den Mittelpunkt für den ausgewählten District heraussuchen
    int lat=0,lng=0;
    for (int i=0; i < Notepadv1.mpFeld.length; i+=3) {
      if (Notepadv1.mpFeld[i] == districtID) {
      lat = Notepadv1.mpFeld[i+1];
      lng = Notepadv1.mpFeld[i+2];
      //Darstellung Mittelpunkt
   //   itemizedOverlay.addOverlayItem(lat,lng,"",this.getResources().getDrawable(R.drawable.marker_default));
      mapController.setCenter(new GeoPoint(lat,lng));
      break;
      }
    }
    if (DEBUG) {
      String message="Anzahl Koord.:"+pFeld.length/3+", Mitte:"+lat+","+lng;
      Log.i(TAG,message);
      Toast.makeText(LocationDemo2.this, message, Toast.LENGTH_LONG).show();
    }
    mapController.zoomToSpan(itemizedOverlay.getLatSpanE6(), itemizedOverlay.getLonSpanE6());
  }

  @Override
  protected void onDestroy() {
  super.onDestroy();
  }
  
  @Override
  protected boolean isRouteDisplayed() {
  return false;
  }

  /* a private inner class which extends Overlay and override the draw method
   * [url]http://androidcookbook.com/Recipe.seam?recipeId=1541[/url]
   * zeichnet als 'overlay' den 'geoPoint' in die Karte
   */
  private class MyOverlay extends com.google.android.maps.Overlay {
    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
      super.draw(canvas, mapView, shadow);
      if (!shadow && geoPoint != null) {
      mapController.setCenter(geoPoint);
          Point point = new Point(); //wird Koordinate des GeoPoint
          mapView.getProjection().toPixels(geoPoint, point);
          Bitmap bmp = BitmapFactory.decodeResource(getResources(),//R.drawable.marker_default);
          R.drawable.mm_20_green);
          // Shift it left so the center of the image is aligned with the x-coordinate of the geo point
          int x = point.x - bmp.getWidth() / 2;
          // Shift it upward so the bottom of the image is aligned with the y-coordinate of the geo point
          int y = point.y - bmp.getHeight();
          canvas.drawBitmap(bmp, x, y, null);
      }
    }
  }

  private class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {
    private List<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
    public MyItemizedOverlay(Drawable defaultMarker) {
      super(boundCenterBottom(defaultMarker));
    }
    public void addOverlayItem(int lat, int lon, String title, Drawable altMarker) {
      GeoPoint point = new GeoPoint(lat, lon);
      OverlayItem overlayItem = new OverlayItem(point, title, null);
      addOverlayItem(overlayItem, altMarker);
    }
    public void addOverlayItem(int lat, int lon, String title) {
  GeoPoint point = new GeoPoint(lat, lon);
  OverlayItem overlayItem = new OverlayItem(point, title, null);
  addOverlayItem(overlayItem);
}
    public void addOverlayItem(OverlayItem overlayItem) {
      mOverlays.add(overlayItem);
      populate();
    }
    public void addOverlayItem(OverlayItem overlayItem, Drawable altMarker) {
      overlayItem.setMarker(boundCenterBottom(altMarker));
      addOverlayItem(overlayItem);
    }
    @Override
    protected OverlayItem createItem(int i) {
      return mOverlays.get(i);
    }
    @Override
    public int size() {
      return mOverlays.size();
    }
    @Override
    protected boolean onTap(int index) {
      if (DEBUG)
        Toast.makeText(LocationDemo2.this,
         getItem(index).getTitle()+", Index:"+index, Toast.LENGTH_LONG).show();
      Intent in = new Intent(getApplicationContext(),Notepadv1.class);
      in.putExtra("art", "where");
      //_id des gewählten Listenpunktes
      in.putExtra("where", getItem(index).getTitle());
      //Info-Daten zum gewählten Betrieb anzeigen
      startActivity(in);
      return true;
    }
  }
public void finish() {}
public void finishAffinity() {} 
}
bundesländer sind von 1-9 nummeriert, aber nur zwei werden angezeigt...

Gesendet von meinem GT-I9300 mit der Android-Hilfe.de App
 
Zuletzt bearbeitet von einem Moderator:
Fehler? Logcat?

Gesendet von meinem GT-S5660 mit der Android-Hilfe.de App
 
also: hab es jetzt mithilfe von einem kleinen tipp hinbekommen. aber jetzt ergibt sich folgendes problem: es werden 1200 standorte geladen, das braucht natürlich ewig. gibt es eine möglichkeit den vorgang zu beschleunigen?

lg
 
ja gibt es:

du lädst immer nur jene, die auch tatsächlich angezeigt werden. kein user will 1200 auf einmal sehen.

oder stichwort: Clustering
 
Zurück
Oben Unten