Android получение расстояния с помощью объекта Location
Я хотел бы взять серию выборок координат, возвращаемых GPS, и вычислить расстояние (прямая линия) между ними, чтобы я мог построить график расстояний с помощью Excel. Я вижу метод distanceBetween
и distanceTo
класса Location
, но я обеспокоен тем, что они не возвращают расстояние прямой линии.
Знает ли кто-нибудь, какое расстояние возвращается этими методами, или есть ли какие-либо способы вычисления расстояния по прямой линии на основе значений широты/долготы, возвращаемых классом Location
?
4 ответа:
Поиск Google предложит решения, если вы каким-то образом захотите сделать этот расчет самостоятельно. Например, подход гаверсинус:
var R = 6371; // km var dLat = (lat2-lat1).toRad(); var dLon = (lon2-lon1).toRad(); var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * Math.sin(dLon/2) * Math.sin(dLon/2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); var d = R * c;
Сообщается здесь. Обратите внимание, что это прямая линия и не учитывает неровности в высоте и т. д.
Вот мой код
float[] result=new float[1]; if(cordenatalar.size()>1) { LatLong add_kor=(LatLong)cordenatalar.get(cordenatalar.size()-1); Location.distanceBetween(add_kor.getLat(), add_kor.getLongg(), location.getLatitude(), location.getLongitude(), result); kilometr+=result[0]; //KMTextView.setText(String.valueOf(kilometr)); } KMTextView.setText("sss: "+String.valueOf(cordenatalar.size()+" res: "+kilometr+" metr")); cordenatalar.add(new LatLong(location.getLatitude(), location.getLongitude()));