- Forum-Beiträge: 93
06.04.2020, 19:14:21 via Website
06.04.2020 19:14:21 via Website
Hallo Leute!
Ich habe eine Test-App mit Hilfe eines Tutorials in Android Studio erstellt, mit der die aktuellen GPS-Daten abgefragt und ausgegeben werden. Soweit so gut. Diese Daten würde ich nun gerne umwandeln. Für das Umwandeln habe ich ein fertiges Java-Programm gefunden welches genau die erforderlichen Berechnungen durchführt. Den Java-Code hätte ich gerne als eigene Activity wobei dann die Werte "lat" und "lon" in der MainActivity an diese Activity mit dem Java-Code übergeben werden sollen. Dort sollen die beiden Werte für die Umwandlung in den "Maidenhead Locator" verwendet und anschließend dieser Wert wieder an die MainActivity übergeben werden.
Bei meiner lang zurückliegenden C++-Ausbildung war leider kurz nach dem Start mit OOP Schluss und jetzt blicke ich nicht mehr ganz durch.
Was mich auch noch etwas verwirrt, sind die beiden Methoden mit gleichem Namen in der "CoordtoLoc-Klasse".
Vielleicht kann mir ja hier jemand bei diesem kleinen Problem helfen.
MainActivity:
public class MainActivity extends AppCompatActivity{
Button btnGetLoc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnGetLoc = (Button) findViewById(R.id.btnGetLoc);
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 123);
btnGetLoc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
GPStracker g = new GPStracker(getApplicationContext());
Location l = g.getLocation();
if(l != null){
double lat = l.getLatitude();
double lon = l.getLongitude();
Toast.makeText(getApplicationContext(), "LAT: "+lat+ "\n LON: "+lon, Toast.LENGTH_LONG).show();
}
}
});
}
}
GPS-Activity:
public class GPStracker implements LocationListener {
Context context;
public Location getLocation(){
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(context, "Permission denied", Toast.LENGTH_SHORT).show();
return null;
}
LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
boolean isGPSEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
if(isGPSEnabled){
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 10, this);
Location l = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
return l;
}
else {
Toast.makeText(context, "Please enable GPS", Toast.LENGTH_LONG).show();
}
return null;
}
public GPStracker(Context c){
context = c;
}
}
Hier der Java Code:
public class Location {
String latlon;
String maidenhead;
public Location(String p1, String p2) {
float lat = -100.0f;
float lon = 0.0f;
try {
lat = Float.parseFloat(p1);
lon = Float.parseFloat(p2);
maidenhead = latLonToGridSquare(lat, lon);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Location(float lat, float lon) {
try {
maidenhead = latLonToGridSquare(lat, lon);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void gridSquareToLatLon(String grid) {
}
public String latLonToGridSquare(float lat, float lon) throws Exception{
float adjLat,adjLon;
char GLat,GLon;
String nLat,nLon;
char gLat,gLon;
float rLat,rLon;
String U = "ABCDEFGHIJKLMNOPQRSTUVWX";
String L = U.toLowerCase();
// support Chris Veness 2002-2012 LatLon library and
// other objects with lat/lon properties
// properties could be getter functions, numbers, or strings
if (Float.isNaN(lat)) throw new Exception("lat is NaN");
if (Float.isNaN(lon)) throw new Exception("lon is NaN");
if (Math.abs(lat) == 90.0) throw new Exception("grid squares invalid at N/S poles");
if (Math.abs(lat) > 90) throw new Exception("invalid latitude: "+lat);
if (Math.abs(lon) > 180) throw new Exception("invalid longitude: "+lon);
adjLat = lat + 90;
adjLon = lon + 180;
GLat = U.charAt((int) (adjLat/10));
GLon = U.charAt((int) (adjLon/20));
nLat = ""+(int)(adjLat % 10);
nLon = ""+(int)((adjLon/2) % 10);
rLat = (adjLat - (int)(adjLat)) * 60;
rLon = (adjLon - 2*(int)(adjLon/2)) *60;
gLat = L.charAt((int)(rLat/2.5));
gLon = L.charAt((int)(rLon/5));
String locator = ""+GLon+GLat+nLon+nLat+gLon+gLat;
return locator;
}
}
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.