我有一系列的位置(城市),我想从我目前的位置找到最近的城市。
我想测试用户位置与阵列之间的距离,以查看最接近的位置。我该怎么做?
答案 0 :(得分:0)
关于如何使用Javascript示例计算两个地理位置之间的距离有一个非常好的文档,您可以找到here。
计算纬度/经度点之间的距离,方位等
此页面显示了各种纬度/经度计算 点,用formulæ和代码片段来实现它们。
所有这些形式都是基于球形的计算 地球(忽略椭球效应) - 这足够准确* 大多数目的...... [事实上,地球是略微椭圆形的;运用 球形模型给出的误差通常高达0.3%1 - 参见注释 进一步的细节]。
假设您有一个包含城市地理位置的数组,您可以循环并计算与使用Geolocation API react-native获得的用户当前位置的距离。
答案 1 :(得分:0)
假设您将数据作为数组/对象的数组。对于演示代码,我使用的是数组数组。
const cities = [
["city1", 10, 50, "blah"],
["city2", 40, 60, "blah"],
["city3", 25, 10, "blah"],
["city4", 5, 80, "blah"]
];
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 (index = 0; index < cities.length; ++index) {
const dif = this.pythagorasEquirectangular(latitude, longitude, cities[index][1],
cities[index][2]);
if (dif < mindif) {
closest = index;
mindif = dif;
}
return cities[closest]
}
或类似的东西。您也可以使用Geolocation获取当前位置。
用您当前的lat,lon调用nearestCity(lat, lon)
。
希望这会有所帮助。
答案 2 :(得分:0)
此方法已在之前的反应中使用,不幸的是它不适用于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
中找到结果。
答案 3 :(得分:-1)
您可以使用其他软件包来计算距离,例如https://github.com/cmoncrief/geodist
然后您可以通过代码计算两点之间的距离
var geodist = require('geodist')
var dist = geodist({lat: 41.85, lon: -87.65}, {lat: 33.7489, lon: -84.3881})
console.log(dist)
// => 587