Этот метод уже использовался в предыдущей реакции, к сожалению, он не подошел для React Native. Я отредактировал код, чтобы он работал на React Native.
Код выглядит следующим образом:
cities = [
["city1", 10, 50, "blah"],
["city2", 40, 60, "blah"],
["city3", 25, 10, "blah"],
["city4", 5, 80, "blah"]
];
nearestPlace = null;
deg2Rad = (deg) => {
return deg * Math.PI / 180;
}
pythagorasEquirectangular = (lat1, lon1, lat2, lon2) => {
lat1 = this.deg2Rad(lat1);
lat2 = this.deg2Rad(lat2);
lon1 = this.deg2Rad(lon1);
lon2 = this.deg2Rad(lon2);
const R = 6371;
const x = (lon2 - lon1) * Math.cos((lat1 + lat2) / 2);
const y = (lat2 - lat1);
const d = Math.sqrt(x * x + y * y) * R;
return d;
}
nearestCity = (latitude, longitude) => {
let mindif = 99999;
let closest;
for (let index = 0; index < this.cities.length; index++) {
const dif = this.pythagorasEquirectangular(latitude, longitude, this.cities[index][1],
this.cities[index][2]);
if (dif < mindif) {
closest = index;
mindif = dif;
}
}
this.nearestPlace = closest
}
Итак, когда вы затем this.nearestCity (yourLat, yourLon)
, вы найдете результат в this.nearestPlace
.
person
Joppe Meijers
schedule
02.03.2020