我在我的反应原生项目中使用navigator.geolocation.watchPosition在用户移动时在地图上绘制路径。我注意到这个函数的返回频率很低。当我在 GPS 模拟器中使用 iOS 模拟器和"高速公路驾驶"模式进行测试时,我至少教过它的频率。现在,当我改为使用"城市运行"进行测试时,我可以看到该位置的返回频率不依赖于某个时间间隔,而是取决于距离......该函数每 100 米返回一次其位置,无论位置变化需要多长时间。
为什么会这样?这是预期的行为吗?我不知道它是否与iOS模拟器或我的代码有关,但我真的希望位置更精确,我希望它尽可能频繁地返回。
componentDidMount() {
const { region } = this.state;
navigator.geolocation.getCurrentPosition(
(position) => {
this.setState({position});
},
(error) => alert(JSON.stringify(error)),
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000}
);
this.watchID = navigator.geolocation.watchPosition((lastPosition) => {
var { distanceTotal, record } = this.state;
this.setState({lastPosition});
if(record) {
var newLatLng = {latitude:lastPosition.coords.latitude, longitude: lastPosition.coords.longitude};
this.setState({ track: this.state.track.concat([newLatLng]) });
this.setState({ distanceTotal: (distanceTotal + this.calcDistance(newLatLng)) });
this.setState({ prevLatLng: newLatLng });
}
},
(error) => alert(JSON.stringify(error)),
{enableHighAccuracy: true, timeout: 20000, maximumAge: 0});
}
设置一个名为distanceFilter
的选项,您可以在该选项中以米为单位设置精度。它在地理位置文档中进行了说明,但没有解释它的作用或默认值。如果你看一下github的源代码,默认值设置为100米,这解释了你的行为。
如果需要 1 米的精度,请将选项设置为: {enableHighAccuracy: true, timeout: 20000, maximumAge: 0, distanceFilter: 1}