我正在使用navigator.geolocation.getCurrentPosition()
和navigator.geolocation.watchPosition()
获取手机的当前位置,然后在移动时实时保持该位置以及速度。在进行这些调用之后,我使用redux来设置当前位置和速度的状态。
当我在genymotion模拟器中测试它时,它在我更改gps坐标时按计划工作。状态随当前位置更新,并且信息将在屏幕上呈现。
然而,当我构建应用程序以在我的手机上进行测试时,它无法按预期工作。当我第一次打开应用程序时,该位置显示正确。当汽车开始行驶时,位置和速度只会经常更新。
在屏幕上,我有当前位置和当前速度,这是从我用redux填充的状态中提取数据。这些数字可能每5-10秒更新一次。
我在应用程序上打开了一张地图,显示/更新了我当前的位置(将其坐标从与我上面指出的“当前位置”和“当前速度”相同的状态拉出)。地图上的当前位置显示我几乎实时移动,每半秒左右更新一次。
对于所有文字感到抱歉,但最大的问题是:如果我的地图和屏幕正在从同一状态中提取数据,为什么地图会实时更新,而不是其他地方?我期望的目的是看到当前位置和速度数几乎每秒都在变化。
以下是我的导航地理定位代码供参考:
navigator.geolocation.getCurrentPosition()
navigator.geolocation.getCurrentPosition((position) => {
const lat = parseFloat(position.coords.latitude);
const long = parseFloat(position.coords.longitude);
const initialRegion = {
latitude: lat,
longitude: long,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA
};
this.props.setCurrentPosition(initialRegion);
},
error => console.log('getCurrentPosition error', JSON.stringify(error)),
{ enableHighAccuracy: true, maximumAge: 0 }
);
navigator.geolocation.watchPosition()
this.watchId = navigator.geolocation.watchPosition(position => {
console.log('watchposition: ', position);
const lat = parseFloat(position.coords.latitude);
const long = parseFloat(position.coords.longitude);
const lastRegion = {
latitude: lat,
longitude: long,
longitudeDelta: LONGITUDE_DELTA,
latitudeDelta: LATITUDE_DELTA
};
// convert speed from m/s to mph
const speed = position.coords.speed * 2.23694;
this.props.setCurrentPosition(lastRegion);
this.props.setCurrentSpeed(speed);
},
error => console.log('watchposition error', error),
{ enableHighAccuracy: true, maximumAge: 0 }
);
答案 0 :(得分:1)
我无法让watchPosition()始终如一地工作,但最终设置了一个计时器,每隔几秒运行一次getCurrentPosition(),这对我的应用程序来说也是如此。