GeoPoint ungenau?

  • 6 Antworten
  • Neuester Beitrag
Diskutiere GeoPoint ungenau? im Android App Entwicklung im Bereich Betriebssysteme & Apps.
H

HectorSavage

Neues Mitglied
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?
 
S

swordi

Lexikon
ä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
 
goto

goto

Ambitioniertes Mitglied
Ich glaube die Klasse GeoPoint ist seid dem Release des SDK 1.6 veraltet, zumindest finde ich in der Doku nurnoch folgende Anmerkung:
Resolved Issues, Changes
  • The SDK includes a new version of the Google APIs add-on. The add-on provides an updated com.google.android.maps external library that fixes compile errors related to certain classes such as GeoPoint. For information about the Google APIs add-on and the library it provides, see: Google APIs Add-On - Google Projects for Android
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. :/
 
H

HectorSavage

Neues Mitglied
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:
H

HectorSavage

Neues Mitglied
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.
 
S

swordi

Lexikon
ok gut zu wissen. is ja krass