這次碰到的問題是根據(jù)云檢索稠歉,獲取到了很多組大頭針數(shù)據(jù)射众,并將它們在地圖上顯示澎胡。然后有時候我們的搜索條件會致使大頭針的數(shù)量不同,那么它在地圖上的分布就應(yīng)該以所有大頭針都能包括的區(qū)域而動態(tài)改變地圖的等級预厌。研究了下阿迈,發(fā)現(xiàn)了跟這個類有關(guān)系BMKCoordinateRegion。廢話不多說配乓,上代碼~
在本地云檢索的代理方法onGetCloudPoiResult中仿滔,我們檢索大頭針的個數(shù)的常用代碼如下:
if (error == BMKErrorOk) {
BMKCloudPOIList* result = [poiResultList objectAtIndex:0];
NSLog(@"1111111");
for (int i = 0; i < result.POIs.count; i++) {
BMKCloudPOIInfo* poi = [result.POIs objectAtIndex:i];
BMKPointAnnotation* item = [[BMKPointAnnotation alloc] init];
CLLocationCoordinate2D pt = (CLLocationCoordinate2D){ poi.longitude,poi.latitude};
item.coordinate = pt;
item.title = poi.title;
[_mapView addAnnotation:item];
......//下面還有點(diǎn),都是常見的犹芹,這里不寫了崎页,這不是重點(diǎn)
}
一般如上代碼,我們可以得到我們需要在地圖上插得所有大頭針腰埂。我們既然要讓地圖按照大頭針的分布來自動縮放地圖飒焦,那么就得知道這么多大頭針中經(jīng)緯度最大的和最小的,然后取個中點(diǎn)屿笼,就像矩形那樣牺荠,得到中間點(diǎn),就好辦了~~~
思路:
我們可以創(chuàng)建兩個可變數(shù)組驴一,用來分別存放所有的經(jīng)度和緯度休雌,然后取出最大的和最小的經(jīng)緯度。OC中一個簡單的方法:[array valueForKeyPath:@"@min.floatValue"]] 取出數(shù)組中最小的肝断,[array valueForKeyPath:@"@max.floatValue"]] 取出數(shù)組中最大的杈曲。
得到中心點(diǎn)后,要根據(jù)region的范圍胸懈,來顯示合適的視角担扑。我下面寫的是0.06,大家可以根據(jù)自己需要調(diào)整,數(shù)字越小地圖等級越大趣钱,合適的就行了涌献。
最后通過方法 region = [_mapView regionThatFits:region];
[_mapView setRegion:region animated:YES];
代碼如下:
if (error == BMKErrorOk) {
//創(chuàng)建兩個數(shù)組,用來存所有的經(jīng)度和緯度
NSMutableArray *latArr = [[NSMutableArray alloc] init];
NSMutableArray *lonArr = [[NSMutableArray alloc] init];
BMKCloudPOIList* result = [poiResultList objectAtIndex:0];
NSLog(@"1111111");
for (int i = 0; i < result.POIs.count; i++) {
BMKCloudPOIInfo* poi = [result.POIs objectAtIndex:i];
BMKPointAnnotation* item = [[BMKPointAnnotation alloc] init];
CLLocationCoordinate2D pt = (CLLocationCoordinate2D){ poi.longitude,poi.latitude};
item.coordinate = pt;
item.title = poi.title;
//用經(jīng)緯度數(shù)組分別存儲所有的經(jīng)緯度
[latArr addObject:@(pt.latitude)];
[lonArr addObject:@(pt.longitude)];
[_mapView addAnnotation:item];
}
NSNumber *latMax = [latArr valueForKeyPath:@"@max.floatValue"];//最大緯度
NSNumber *latMin = [latArr valueForKeyPath:@"@min.floatValue"];//最小緯度
NSNumber *lonMax = [lonArr valueForKeyPath:@"@max.floatValue"];//最大經(jīng)度
NSNumber *lonMin = [lonArr valueForKeyPath:@"@min.floatValue"];//最小經(jīng)度
BMKCoordinateRegion region;
region.center.latitude = ([latMax doubleValue] + [latMin doubleValue]) / 2;
region.center.longitude = ([lonMax doubleValue] + [lonMin doubleValue]) / 2;
region.span.latitudeDelta = 0.06;
region.span.longitudeDelta = 0.06;
region = [_mapView regionThatFits:region];
[_mapView setRegion:region animated:YES];
NSLog(@"lat == %f, lon == %f, min1 == %f, min2 == %f", [latMax doubleValue], [latMin doubleValue], [lonMax doubleValue], [lonMin doubleValue]);
NSLog(@"2222222");
} else {
NSLog(@"error ==%d",error);
if (error == BMKErrorConnect) {
[Tool HUDShowAddedTo:self.view withTitle:@"網(wǎng)絡(luò)連接錯誤" delay:1.5];
} else if (error == BMKErrorResultNotFound) {
[Tool HUDShowAddedTo:self.view withTitle:@"搜索結(jié)果未找到" delay:1.5];
} else {
[Tool HUDShowAddedTo:self.view withTitle:@"檢索失敗" delay:1.5];
}
}
最后給看官們大致看一下效果圖
地圖自動根據(jù)大頭針個數(shù)縮放~~
如果對百度地圖不了解的童鞋首有,可以看我這篇文章燕垃,http://www.reibang.com/p/19f960054fd0