こんにちは、マップビューがあります。緯度と経度に基づいてマップ上にピンをドロップする必要があります。以前は Web サービスから取得していましたが、取得してマップにプロットする方法を教えてください。 Web サービスのみを介して Web アプリケーションに反映されるマップ上の任意のピン。
2 に答える
マップに注釈を追加するためのチェックリスト
マップベースのアプリケーションでアノテーションを実装および使用するための手順を以下に示します。これらの手順は、アプリケーションがインターフェイスのどこかにMKMapViewオブジェクトを組み込んでいることを前提としています。
1. 次のいずれかのオプションを使用して、適切な注釈オブジェクトを定義します。
MKPointAnnotationクラスを使用して、単純な注釈を実装します。このタイプの注釈には、注釈の画面上のコールアウトバブルに表示するタイトルとサブタイトルの文字列を指定するためのプロパティが含まれています。 (または) 「カスタム注釈オブジェクトの定義」で説明されているように、MKA注釈プロトコルに準拠するカスタムオブジェクトを定義します。このタイプの注釈には、必要な任意のタイプのデータを格納できます。
2. データを画面に表示するための注釈ビューを定義します。注釈ビューを定義する方法は、ニーズによって異なり、次のいずれかになります。
注釈を静止画像で表すことができる場合は、MKAnnotationViewクラスのインスタンスを作成し、その画像をそのimageプロパティに割り当てます。「標準の注釈ビューの使用」を参照してください。 (または) 標準のピン注釈を使用する場合は、MKPinAnnotationViewクラスのインスタンスを作成します。「標準の注釈ビューの使用」を参照してください。静止画像が注釈を表すのに不十分な場合は、MKAnnotationViewをサブクラス化し、それを表示するために必要なカスタム描画コードを実装します。
3.マップビューデリゲートにmapView:viewForAnnotation:メソッドを 実装します。このメソッドの実装では、既存のアノテーションビューが存在する場合はデキューするか、新しいアノテーションビューを作成する必要があります。アプリケーションが複数のタイプのアノテーションをサポートしている場合は、このメソッドにロジックを含めて、提供されたアノテーションオブジェクトに適切なタイプのビューを作成する必要があります。
4. addAnnotation:またはaddAnnotations:メソッドを使用して、注釈オブジェクトをマップビューに追加します。
完全な参照については、ここを参照してください。
このコードを試してください:- storeListArr に Web サービスからの値を格納します
-(void)loadingMap
{
[self.mapView setMapType:MKMapTypeStandard];
[self.mapView setZoomEnabled:YES];
[self.mapView setScrollEnabled:YES];
NSLog(@"storeListArr = %@",storeListArr);
for(int i=0; i<[storeListArr count];i++)
{
MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } };
region.center.latitude = [[[storeListArr objectAtIndex:0] objectForKey:@"lat"] floatValue];
region.center.longitude = [[[storeListArr objectAtIndex:0] objectForKey:@"long"] floatValue];
region.span.longitudeDelta = .05f;
region.span.latitudeDelta = .05f;
[self.mapView setRegion: region animated:YES];
MyAnnotations *ann = [[MyAnnotations alloc] init];
NSString *str=[[storeListArr objectAtIndex:i] objectForKey:@"store_name"];
NSLog(@"Address %@",storeAddress);
ann.title = str;
ann.coordinate = region.center;
[self.mapView addAnnotation:ann];
}
[self.mapView setDelegate:self];
}
コールアウト用
- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
NSLog(@"MKAnnotationView");
MKPinAnnotationView *pinView = nil;
if(annotation != mapView.userLocation)
{
static NSString *defaultPinID = @"com.invasivecode.pin";
pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
if ( pinView == nil )
pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];
pinView.canShowCallout = YES;
UIImage *flagImage = [UIImage imageNamed:@"MapPin.png"];
pinView.image = flagImage;
pinView.opaque = NO;
UIButton *rightButton = [[UIButton alloc]initWithFrame:CGRectMake(0.0f,0.0f,28.0f,30.0f)];
[rightButton setImage:[UIImage imageNamed:@"MapArrow"] forState:UIControlStateNormal];
for (int i =0 ; i< [storeListArr count]; i++)
{
if ([[[storeListArr objectAtIndex:i] objectForKey:@"lat"] floatValue] == pinView.annotation.coordinate.latitude)
{
UIImageView *img = [[UIImageView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, 30.0f, 30.0f)];
if([[storeListArr objectAtIndex:i] objectForKey:@"imageUrl"])
{
[img setImage:[[storeListArr objectAtIndex:i] objectForKey:@"imageUrl"]];
}
pinView.leftCalloutAccessoryView =img;
[rightButton addTarget:self
action:@selector(showStoreDetail:)
forControlEvents:UIControlEventTouchUpInside];
pinView.rightCalloutAccessoryView = rightButton;
}
}
}
else
[mapView.userLocation setTitle:@"Current Location"];
return pinView;
}