嗨,大家好我正在开发Map-view Base应用程序。我几乎完成了地图视图的所有工作,但我无法比较两个不同的地图视图区域并找到新的地图视图区域。例如,如果用户拖动地图,我想找到该地区已经改变了多少。
答案 0 :(得分:1)
部分答案。平等遵守MKCoordinateRegion
extension MKCoordinateRegion: Equatable
{
public static func == (lhs: MKCoordinateRegion, rhs: MKCoordinateRegion) -> Bool
{
if lhs.center.latitude != rhs.center.latitude || lhs.center.longitude != rhs.center.longitude
{
return false
}
if lhs.span.latitudeDelta != rhs.span.latitudeDelta || lhs.span.longitudeDelta != rhs.span.longitudeDelta
{
return false
}
return true
}
}
答案 1 :(得分:0)
首先,您需要找到初始地图区域。假设你的地图名为mapView ...你可以先找到(在你的viewDidLoad中):
CLLocationCoordinate2D center = mapView.centerCoordinate;
CLLocationDegrees lat = center.latitude;
CLLocationDegrees lon = center.longitude;
MKCoordinateRegion region = mapView.region;
MKCoordinateSpan span = region.span;
//Assuming they have been declared as instance variables of type double
current_lat_low = lat - span.latitudeDelta / 2.0;
current_lat_high = lat + span.latitudeDelta / 2.0;
current_lon_low = lon - span.longitudeDelta / 2.0;
current_lon_high = lon + span.longitudeDelta / 2.0;
这将显示所显示地图的初始区域。然后在
- (void)mapView:(MKMapView*)mapView regionDidChangeAnimated:(BOOL)animated
{
CLLocationCoordinate2D center = mapView.centerCoordinate;
CLLocationDegrees lat = center.latitude;
CLLocationDegrees lon = center.longitude;
MKCoordinateRegion region = mapView.region;
MKCoordinateSpan span = region.span;
double lat_low = lat - span.latitudeDelta / 2.0;
double lat_high = lat + span.latitudeDelta / 2.0;
double lon_low = lon - span.longitudeDelta / 2.0;
double lon_high = lon + span.longitudeDelta / 2.0;
//do any work comparing the initial lat/lons with the new values
.....
//set current lat/lon to be the new lat/lon after work is complete
current_lat_low = lat_low;
current_lat_high = lat_high;
current_lon_low = lon_low;
current_lon_high = lon_high;
}
答案 2 :(得分:0)
我想这真的取决于您要执行的操作。例如,您可能试图比较两个区域的中心之间的差异。但是,您提到了区域。
MKCoordinateRegion
仅仅是一个矩形,除非缩放级别更改,否则其总面积(LxW units squared)相同。因此,我将带您到一个CLCircularRegion区域,该区域可以使用其半径与中心一起显示的半径来计算。
有很多方法可以从地图数据中获取圆形区域。您的问题并不清楚,您是否对区域中心之间的距离感兴趣,但是在找到差异时应该有很多SO答案。
如果其中一种情况与您要实现的目标不完全相同,请给我评论。
(source)
答案 3 :(得分:-1)
此答案显示如何比较两个地图点。您可以在地图区域的中心使用此选项:link。