| |||||||
Das Thema "GeoPoint ungenau?" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Junior Mitglied Registriert seit: 11.09.2009
Beiträge: 37
Abgegebene Danke: 5
Erhielt 0 Danke für 0 Beiträge
| 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);
}
} |
| | |
| | #2 (permalink) |
| Android Guru Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
|
ä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 ) |
| | |
| | #3 (permalink) | |
| Android-Hilfe.de Mitglied Registriert seit: 01.05.2009
Beiträge: 92
Abgegebene Danke: 2
Erhielt 11 Danke für 7 Beiträge
|
Ich glaube die Klasse GeoPoint ist seid dem Release des SDK 1.6 veraltet, zumindest finde ich in der Doku nurnoch folgende Anmerkung: Zitat:
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()); | |
| | |
| | #4 (permalink) |
| Junior Mitglied Registriert seit: 11.09.2009
Beiträge: 37
Abgegebene Danke: 5
Erhielt 0 Danke für 0 Beiträge
|
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)); Code: mc.animateTo(empireGp); 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);
}
} " 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) |
| | |
| | #5 (permalink) |
| Junior Mitglied Registriert seit: 11.09.2009
Beiträge: 37
Abgegebene Danke: 5
Erhielt 0 Danke für 0 Beiträge
|
ok, der link hier bestätigt meine vermutungen: "geo fix" yields incorrect values - Android Beginners | Google Groups |
| | |
| | #6 (permalink) |
| Junior Mitglied Registriert seit: 11.09.2009
Beiträge: 37
Abgegebene Danke: 5
Erhielt 0 Danke für 0 Beiträge
|
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 (permalink) |
| Android Guru Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
|
ok gut zu wissen. is ja krass
__________________ App Entwicklung Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD ) |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |