Я надеюсь, что кто-то может помочь с этим. Я видел много сообщений и ответов, но ни один из них, похоже, не касается моей конкретной проблемы, но если я что-то пропустил, заранее извиняюсь.
Я создаю небольшое приложение, которое хранит текущую долготу и широту телефона в виде удвоенных значений. Это делается с помощью LocationManager Android.
@TargetApi(23)
private void initLocationService(Context context) {
if (Build.VERSION.SDK_INT >= 23 &&
ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
try {
this.longitude = 0.0;
this.latitude = 0.0;
this.locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// Get GPS and network status
this.isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
this.isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (forceNetwork) isGPSEnabled = false;
if (!isNetworkEnabled && !isGPSEnabled) {
// cannot get location
this.locationServiceAvailable = false;
}
else
{
this.locationServiceAvailable = true;
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
updateCoordinates();
}
}//end if
if (isGPSEnabled) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
updateCoordinates();
}
}
}
} catch (Exception ex) {
}
}
public void updateCoordinates()
{
longitude = location.getLongitude();
latitude = location.getLatitude();
}
У меня есть набор координат долготы и широты, жестко закодированных в приложении, но мне нужен способ определить, находится ли мой пользователь в пределах определенного радиуса метра от жестко запрограммированной точки.
Я использую только Android API для проекта и не могу отклоняться от этого.
Я уже научился переводить долготу и широту из градусов в метры:
public double longOffset(int offsetX, double lon){
double longoff = offsetX / earthRadius;
return lon + longoff * 180 / Math.PI;
}
public double latOffset(int offsetY, double lat){
double latoff = offsetY / (earthRadius * cos(Math.PI*lat/180));
return lat + latoff * 180 / Math.PI;
}
Но я признаю, что был в тупике насчет остального. Мне интересно, если создать небольшую ограничительную рамку вокруг долготы и широты, а затем использовать метод, аналогичный показанному здесь: http://www.sanfoundry.com/java-program-check-whether-данная-точка-лежит-данный-полигон/
Я дошел до того, что сейчас я косоглазый, поэтому любая помощь будет оценена по достоинству.