1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

GeoPoint ungenau?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von HectorSavage, 21.09.2009.

  1. HectorSavage, 21.09.2009 #1
    HectorSavage

    HectorSavage Threadstarter Junior Mitglied

    Beiträge:
    37
    Erhaltene Danke:
    0
    Registriert seit:
    11.09.2009
    Hallo,
    ich tüftel gerade an Google Maps und meiner MapView herum. Über telnet schicke ich dem Emulator eine Location, die dann von meinem Programm in longitude/latitude umgerechnet wird. Die View springt dann zu diesem Punkt. Das klappt zwar, aber leider recht ungenau. Über maps.google.de habe ich mir z.b. die lat/long vom Empire State Building geholt: "40.748847,-73.986081"
    Wenn ich zu diesem Punkt hinspringe komme ich aber ca 500Meter entfernt an der W 17th Street raus und nicht an der 34. Wenn ich mir die Punkte mit loc.getLongitute/Latitude printen lasse kommen auch gleich mal andere Werte raus.
    "double: lat: 40.74000258333333, long: -73.99550045"

    Das mit dem Epire State Building war jetzt nur ein Beispiel, bei anderen Punkten ist es genauso ungenau, nur selten springt mein Programm zum exakten Punkt.

    Hier mein LocationListener, der auf veränderte Locations reagiert

    Code:
        private class MyLocationListener implements LocationListener 
        {
            public void onLocationChanged(Location loc) {
                if (loc != null) {
                    int lat = (int) (loc.getLatitude()* 1E6);
                    int lon = (int) (loc.getLongitude()* 1E6);
                    
                    GeoPoint geop = new GeoPoint(lat, lon); 
                    
                    mc.animateTo(geop);
                }
            }
    
    
    Kann sich jemand den Grund dafür vorstellen?
     
  2. swordi, 21.09.2009 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    ähm nur eine vermutung, ohne mich selbst damit beschäftigt zu haben:

    int lat = (int) (loc.getLatitude()* 1E6);
    int lon = (int) (loc.getLongitude()* 1E6);

    du castet nach int, int ist ja eine ganzzahl ohne nachkommastellen. vielleicht deshalb
     
  3. goto, 21.09.2009 #3
    goto

    goto Android-Hilfe.de Mitglied

    Beiträge:
    91
    Erhaltene Danke:
    8
    Registriert seit:
    01.05.2009
    Ich glaube die Klasse GeoPoint ist seid dem Release des SDK 1.6 veraltet, zumindest finde ich in der Doku nurnoch folgende Anmerkung:
    Quelle: SDK Release Notes | Android Developers

    Nichtsdestotrotz, denke ich könnte es ein Rundungsfehler sein da du direkt nacht int castest. Probier mal folgendes:
    Code:
       Double lat = loc.getLatitude()*1E6;
        Double long = loc.getLongitude()*1E6;
    
        Geopoint geop = new GeoPoint(latitude.intValue(),longitude.intValue());
    €: gnah. :/
     
  4. HectorSavage, 22.09.2009 #4
    HectorSavage

    HectorSavage Threadstarter Junior Mitglied

    Beiträge:
    37
    Erhaltene Danke:
    0
    Registriert seit:
    11.09.2009
    Danke für eure Antworten.
    Mit der double.IntValue() komme ich leider auf das gleich Ergebnis. Die GeoPoint Klasse wurde ja anscheinend schon im sdk 1.5 geändert. Bem 1.6 sdk hat sich nichts mehr geändert.

    Ich denke der Rundungsfehler tritt schon viel früher auf. Wenn ich nämlich über die onCreathe Methode mit den GeoPoint vom Empire State Building so erstelle:

    Code:
    // Empire State Building
    GeoPoint empireGp = new GeoPoint((int)(40.748408*1000000),(int)(-73.985813*1000000));
    
    und dann den MapController dort hinbewege:

    Code:
    mc.animateTo(empireGp);
    komme ich genau am Empire State Building raus.

    Ich habe mal die onLocationChanged-Methode mit Konsolenausgaben versehen. Hier tritt eine Rundung schon vor meinem int-cast auf!
    Code:
            public void onLocationChanged(Location loc) {
                System.out.println("location changed" + loc);
                if (loc != null) {
                    System.out.println("double: lat: " + loc.getLatitude() + ", long: " + loc.getLongitude());
                    System.out.println("lati: " + (int)(loc.getLatitude()*1000000) + ", Long: " + (int)(loc.getLongitude()*1000000));
                    //int lat = (int) (loc.getLatitude()* 1E6);
                    //int lon = (int) (loc.getLongitude()* 1E6);
                    Double lat = loc.getLatitude() * 1E6;
                    Double lon = loc.getLongitude() * 1E6;
                    
                    GeoPoint geop = new GeoPoint(lat.intValue(), lon.intValue()); 
                    
                    mc.animateTo(geop);
                }
            }
    
    
    Hier die Ausgabe auf der Konsole:
    " double: lat: 40.740002499999996, long: -73.99550040000001"
    "lati: 40740002, Long: -73995500"

    also scheint die loc.getlatitude/Longitude schon nicht die eingegebenen Zahlen(40.748408/-73.985813) richtig auszulesen...
     
    Zuletzt bearbeitet: 22.09.2009
  5. HectorSavage, 22.09.2009 #5
    HectorSavage

    HectorSavage Threadstarter Junior Mitglied

    Beiträge:
    37
    Erhaltene Danke:
    0
    Registriert seit:
    11.09.2009
  6. HectorSavage, 22.09.2009 #6
    HectorSavage

    HectorSavage Threadstarter Junior Mitglied

    Beiträge:
    37
    Erhaltene Danke:
    0
    Registriert seit:
    11.09.2009
    Coolio! Über DDMS funktioniert jetzt die GPS-Änderungen. Falls man eine deutsche Windows Version benutzt muss man:
    -Duser.country=US
    -Duser.language=en
    in die eclipse.ini schreiben.

    Jetzt werden die Latitudes und Longitudes auch richtig eingelesen.
     
  7. swordi, 22.09.2009 #7
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    ok gut zu wissen. is ja krass
     

Diese Seite empfehlen