Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γειά σας παιδιά. Έχω ένα προβληματάκι και ήθελα να δω, μπας και έχετε καμιά ιδέα στο τι φταίει. Λοιπόν έχω φτιάξει μια εφαρμογή για android, στην οποία διαβάζονται συντεταγμένες από βάση και τις δείχνει στο google maps. Το πρόβλημά μου είναι, πως όταν χρησιμοποιώ ένα εικονίδιο για να δείξω την συγκεκριμένη τοποθεσία, μου βγάζει (με τις ίδιες συντεταγμένες) λάθος τοποθεσία. Για παράδειγμα: με Latitude: 37.511738 και longtitude 22.378957, θα έπρεπε να μου εμφανίζεται το εικονίδιο στην Τρίπολη, αλλά παρόλα αυτά εμφανίζεται κάτω από την Καλαμάτα(επισυναπτόμενη φωτο). Ο κώδικας για να εμφανίζεται το σημείο είναι

>
private class ShopOverlay extends com.google.android.maps.Overlay {
 @Override
 public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
  Intent intent=getIntent();
	
	 double x=0,y=0;
	 Bundle extras=intent.getExtras();
	 x=extras.getDouble("x");
	 y=extras.getDouble("y");
	 String name=extras.getString("shopName");
	 System.out.println(" x "+x);
	 System.out.println(" y "+y);
	 System.out.println("NAME "+name);
 super.draw(canvas, mapView, shadow);
 Paint paint = new Paint();
 // Converts lat/lng-Point to OUR coordinates on the screen.


 GeoPoint p = new GeoPoint(((int) y*1000000),((int) x*1000000));
 Point myScreenCoords = new Point();
 mapView.getProjection().toPixels(p, myScreenCoords);
 paint.setStrokeWidth(1);
 paint.setARGB(255, 255, 255, 255);
 paint.setStyle(Paint.Style.STROKE);
 Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.androidmarker);
 canvas.drawBitmap(bmp, myScreenCoords.x, myScreenCoords.y, paint);
 canvas.drawText(name, myScreenCoords.x, myScreenCoords.y, paint);
 return true;
 }
   }

 

και γεμίζω τον χάρτη απλά με

>
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);
    MapView mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);
   
    mapView.setSatellite(true);
    myController=mapView.getController();
    myController.setZoom(1);
    myLocListen=new MyLocationListener();
    myLocManag=(LocationManager)getSystemService(this.LOCATION_SERVICE);
    myLocManag.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, myLocListen);
    GeoPoint initGeoPoint = new GeoPoint(((int) myLocManag.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLatitude()*1000000),((int) myLocManag.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLongitude()*1000000));
    CenterLocation (initGeoPoint);
   // List<Overlay> mapOverlays = mapView.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker);
   // MyItemizedOverlay itemizedoverlay = new MyItemizedOverlay(drawable,this);
    ShopOverlay sh=new ShopOverlay();
    MyLocationOverlay myOver = new MyLocationOverlay();
    List<Overlay> list = mapView.getOverlays();
    list.add(myOver);
    list.add(sh);
  
    // mapOverlays.add(itemizedoverlay);
   }

Το θέμα μου είναι πως όταν δεν χρησιμοποιώ, εικονίδια, απλά κεντράρω την εικόνα στην τοποθεσία που στέλνω με συντεταγμένες από το DDMS του eclipse, φαίνεται να λειτουργεί κανονικά. Καμιά ιδέα;

post-212007-0-55765200-1346166633_thumb.jpg

Δημοσ.

Προφανώς το cast σε int γίνεται πριν τον πολλαπλασιασμό:

GeoPoint p = new GeoPoint(((int) y*1000000),((int) x*1000000));

 

 

Δοκίμασε:

GeoPoint p = new GeoPoint(((int) (y*1000000)),((int) (x*1000000)));

 

 

Τώρα απλά σε πάει στο 37N 22E

Δημοσ.

πολύ σωστός! Αυτό ήταν το πρόβλημα, ευχαριστώ. Να ρωτήσω και κάτι ακόμα, ο ορισμός του geopoint στο developers.google.com είναι

>
GeoPoint(int latitudeE6, int longitudeE6)
	  Constructs a GeoPoint with the given latitude and longitude, measured in microdegrees (degrees * 1E6).

Αυτό σημαίνει μοίρες * 10^(-6). Σωστό;

Δημοσ.

Σημαίνει 10^6, όχι στην -6. Όπως το έκανες δηλαδή, επί 1000000. Αυτό το κάνουν ώστε να κάνουν όλες τις πράξεις με ακέραιους, για ταχύτητα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...