React Native Geolocation Watchposition 不会实时更新
React Native Geolocation Watchposition Won't Real-Time Update
我正在使用 navigator.geolocation.getCurrentPosition()
和 navigator.geolocation.watchPosition()
获取 phone 的当前位置,然后在移动时实时获取该位置以及速度。进行这些调用后,我使用 redux 将状态设置为当前位置和速度。
当我在 genymotion 模拟器中对此进行测试时,当我更改 gps 坐标时它会按计划工作。状态随当前位置更新,并且该信息呈现在屏幕上。
但是,当我构建应用程序以在我的 phone 上进行测试时,它没有按预期运行。当我第一次打开应用程序时,位置显示正确。但是,当汽车开始移动时,位置和速度只会每隔一段时间更新一次。
在屏幕上,我有当前位置和当前速度,它是从我用 redux 填充的状态中提取数据的。这些数字可能每 5-10 秒更新一次。
我在应用程序上打开了一张地图,其中 shows/updates 显示了我的当前位置(从与我在上面指出的 "current position" 和 "current speed" 相同的状态中提取坐标)。地图上的当前位置显示我在移动,几乎是实时的,每半秒左右更新一次。
抱歉所有的文字,但这里最大的问题是:如果我的地图和屏幕正在从同一状态提取数据,为什么地图实时更新,而不是其他地方?我期望的目的是看到当前位置和速度数字几乎每秒都在变化。
下面是我的导航器地理定位代码,供参考:
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 }
);
我无法让 watchPosition() 始终如一地工作,但最终设置了一个计时器 运行 getCurrentPosition() 每隔几秒,这对我的应用程序同样有效。
我正在使用 navigator.geolocation.getCurrentPosition()
和 navigator.geolocation.watchPosition()
获取 phone 的当前位置,然后在移动时实时获取该位置以及速度。进行这些调用后,我使用 redux 将状态设置为当前位置和速度。
当我在 genymotion 模拟器中对此进行测试时,当我更改 gps 坐标时它会按计划工作。状态随当前位置更新,并且该信息呈现在屏幕上。
但是,当我构建应用程序以在我的 phone 上进行测试时,它没有按预期运行。当我第一次打开应用程序时,位置显示正确。但是,当汽车开始移动时,位置和速度只会每隔一段时间更新一次。
在屏幕上,我有当前位置和当前速度,它是从我用 redux 填充的状态中提取数据的。这些数字可能每 5-10 秒更新一次。
我在应用程序上打开了一张地图,其中 shows/updates 显示了我的当前位置(从与我在上面指出的 "current position" 和 "current speed" 相同的状态中提取坐标)。地图上的当前位置显示我在移动,几乎是实时的,每半秒左右更新一次。
抱歉所有的文字,但这里最大的问题是:如果我的地图和屏幕正在从同一状态提取数据,为什么地图实时更新,而不是其他地方?我期望的目的是看到当前位置和速度数字几乎每秒都在变化。
下面是我的导航器地理定位代码,供参考:
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 }
);
我无法让 watchPosition() 始终如一地工作,但最终设置了一个计时器 运行 getCurrentPosition() 每隔几秒,这对我的应用程序同样有效。