我正在使用适用于iOS的Google地图。每当用户向左或向右平移时,我都会使用此方法根据新位置重新加载一些数据
- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position {
现在我试图找到一种方法来计算如果用户在同一视图中移动了一点,并且更改不是很激烈并且不能保证另一个数据加载,那么就不要加载它。为此,我创建了一个名为mostRecentCoord的变量,我在负载时保持该变量保存初始位置
- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position
{
//Here mostRecentCoord is self descriptive, latest entry before this move occured.
if(position.target.latitude == mostRecentCoord.latitude && position.target.longitude ==
mostRecentCoord.longitude) {
return;
}
我认为我可以限制长度或纬度的变化,并根据它决定是否加载新数据,但是我必须考虑缩放级别,覆盖范围。 有人有这方面的想法吗?会很感激
答案 0 :(得分:0)
这是一个想法:
当您进行数据提取时,将所有边上的可见区域的边界填充一定量(例如,按20%)。
然后,当视图移动时,如果新的可见区域完全包含在填充区域内,则无需重新加载数据。如果某个新区域在外面,则需要重新加载。
答案 1 :(得分:0)
每次相机结束视图更改时都会调用idleAtCameraPosition。
lat和lng是你的动作,直到用户停止平移(改变相机)。您可以使用以下代码将其转换为像素,反之亦然:CGPoint point = [map.projection pointForCoordinate:coordinates];
GMSCameraPosition *lastCameraPosition;
- (void)mapView:(GMSMapView *)pMapView didChangeCameraPosition:(GMSCameraPosition *)position {
if (lastCameraPosition == nil) lastCameraPosition = position;
// Algebra :) substract coordinates with the difference of camera changes
double lat = position.target.latitude - lastCameraPosition.target.latitude;
double lng = position.target.longitude - lastCameraPosition.target.longitude;
}
别忘了:
- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position {
lastCameraPosition = nil;
}