Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

GeoPoint ungenau?

Das Thema "GeoPoint ungenau?" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 21.09.2009, 17:00   #1 (permalink)
Junior Mitglied

Registriert seit: 11.09.2009
Beiträge: 37
Abgegebene Danke: 5
Erhielt 0 Danke für 0 Beiträge
Standard GeoPoint ungenau?

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?
HectorSavage ist offline   Mit Zitat antworten
Alt 21.09.2009, 19:57   #2 (permalink)
Android Guru

Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
Standard AW: GeoPoint ungenau?

ä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
__________________
App Entwicklung
Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD )
swordi ist offline   Mit Zitat antworten
Alt 21.09.2009, 20:24   #3 (permalink)
Android-Hilfe.de Mitglied
 
Benutzerbild von goto

Registriert seit: 01.05.2009
Beiträge: 92
Abgegebene Danke: 2
Erhielt 11 Danke für 7 Beiträge
Standard AW: GeoPoint ungenau?

Ich glaube die Klasse GeoPoint ist seid dem Release des SDK 1.6 veraltet, zumindest finde ich in der Doku nurnoch folgende Anmerkung:
Zitat:
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. :/
goto ist offline   Mit Zitat antworten
Alt 22.09.2009, 11:05   #4 (permalink)
Junior Mitglied

Registriert seit: 11.09.2009
Beiträge: 37
Abgegebene Danke: 5
Erhielt 0 Danke für 0 Beiträge
Standard AW: GeoPoint ungenau?

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...

Geändert von HectorSavage (22.09.2009 um 11:07 Uhr)
HectorSavage ist offline   Mit Zitat antworten
Alt 22.09.2009, 11:12   #5 (permalink)
Junior Mitglied

Registriert seit: 11.09.2009
Beiträge: 37
Abgegebene Danke: 5
Erhielt 0 Danke für 0 Beiträge
Standard AW: GeoPoint ungenau?

ok, der link hier bestätigt meine vermutungen:

"geo fix" yields incorrect values - Android Beginners | Google Groups
HectorSavage ist offline   Mit Zitat antworten
Alt 22.09.2009, 11:22   #6 (permalink)
Junior Mitglied

Registriert seit: 11.09.2009
Beiträge: 37
Abgegebene Danke: 5
Erhielt 0 Danke für 0 Beiträge
Standard AW: GeoPoint ungenau?

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.
HectorSavage ist offline   Mit Zitat antworten
Alt 22.09.2009, 12:51   #7 (permalink)
Android Guru

Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
Standard AW: GeoPoint ungenau?

ok gut zu wissen. is ja krass
__________________
App Entwicklung
Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD )
swordi ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht





Du liest gerade: "GeoPoint ungenau?" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.