drunken_guy Δημοσ. 28 Αυγούστου 2012 Δημοσ. 28 Αυγούστου 2012 Γειά σας παιδιά. Έχω ένα προβληματάκι και ήθελα να δω, μπας και έχετε καμιά ιδέα στο τι φταίει. Λοιπόν έχω φτιάξει μια εφαρμογή για 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, φαίνεται να λειτουργεί κανονικά. Καμιά ιδέα;
kagelos Δημοσ. 28 Αυγούστου 2012 Δημοσ. 28 Αυγούστου 2012 Προφανώς το cast σε int γίνεται πριν τον πολλαπλασιασμό: GeoPoint p = new GeoPoint(((int) y*1000000),((int) x*1000000)); Δοκίμασε: GeoPoint p = new GeoPoint(((int) (y*1000000)),((int) (x*1000000))); Τώρα απλά σε πάει στο 37N 22E
drunken_guy Δημοσ. 29 Αυγούστου 2012 Μέλος Δημοσ. 29 Αυγούστου 2012 πολύ σωστός! Αυτό ήταν το πρόβλημα, ευχαριστώ. Να ρωτήσω και κάτι ακόμα, ο ορισμός του 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). Σωστό;
kagelos Δημοσ. 29 Αυγούστου 2012 Δημοσ. 29 Αυγούστου 2012 Σημαίνει 10^6, όχι στην -6. Όπως το έκανες δηλαδή, επί 1000000. Αυτό το κάνουν ώστε να κάνουν όλες τις πράξεις με ακέραιους, για ταχύτητα.
drunken_guy Δημοσ. 30 Αυγούστου 2012 Μέλος Δημοσ. 30 Αυγούστου 2012 απολύτως σωστός. Ευχαριστώ πάρα πολύ.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα