我必须在用户位置周围显示位置。位置信息将从服务器到达。我正在使用'循环解析位置并添加到带有注释引脚的地图。截至目前,它仅显示最后到达的位置。
但要求是应该以用户位置为中心点显示多个位置。截至目前,我只能显示一个引脚。请帮忙解决这个问题?
for (NSDictionary* dictionary in responseDict)
{
NSString *latitudeString=[NSString stringWithFormat:@"%@",[dictionary valueForKey:@"LATITUDE"]];
double latitude=[latitudeString doubleValue];
NSString *longitudeString=[NSString stringWithFormat:@"%@",[dictionary valueForKey:@"LONGITUDE"]];
double longitude=[longitudeString doubleValue];
NSLog(@"the LATITUDE AND LONGITUDE is %f, %f",latitude,longitude);
CLLocationCoordinate2D locationCoordinate;
locationCoordinate.latitude=latitude;
locationCoordinate.longitude=longitude;
[self.mapView addAnnotation:locationCoordinate withPinColor:WKInterfaceMapPinColorPurple];
MKCoordinateSpan coordinateSpan = MKCoordinateSpanMake(0.05, 0.05);
[self.mapView setRegion:(MKCoordinateRegionMake(locationCoordinate, coordinateSpan))];
}
`
答案 0 :(得分:0)
在循环的每次迭代中缩放单个位置,因此最终您最终放大了最后一个位置。遗憾的是WKInterfaceMap
没有像showAnnotations
这样的MKMapView
方法,所以你需要自己编写一个函数来实现显示包含多个注释的MKCoordinateRegion
。
我暂时没有写过任何Obj-C,但是这里的Swift函数在地图上显示了两个注释并且在watchOS上工作:
func showTwoMapCoordinates(first: CLLocationCoordinate2D, second: CLLocationCoordinate2D)->MKCoordinateRegion{
let center = CLLocationCoordinate2D(latitude: (first.latitude+second.latitude)/2, longitude: (first.longitude+second.longitude)/2)
var latDelta:CLLocationDegrees {
let delta = abs((first.latitude-second.latitude)*1.4)
if delta > 0 {
return delta
} else {
return 0.1
}
}
var lonDelta:CLLocationDegrees {
let delta = abs((first.longitude-second.longitude)*1.4)
if delta > 0 {
return delta
} else {
return 0.1
}
}
let span = MKCoordinateSpan(latitudeDelta: latDelta, longitudeDelta: lonDelta)
return MKCoordinateRegion(center: center, span: span)
}
要将此扩展到n个点,其中n> 2,您需要做的就是遍历要显示的每对点,找到与上述函数相同的最大增量,并设置中心和跨度使用上面的函数调用产生最大增量的两个点。