1

マップビューにポイントをプロットしようとしています。2つのファイルを作成しました。1。nsobjectを拡張するファイル、および2.ビューを拡張するファイル。両方のファイルのソースコードは次のとおりです。

#import "gpMapViewAnnotations.h"

@implementation gpMapViewAnnotations
@synthesize title, coordinate;

- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d {

    title = ttl;
    coordinate = c2d;
    return self;
}

これはインターフェースファイルのコードです。

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface gpMapViewAnnotations : NSObject <MKAnnotation>{

    NSString *title;
    CLLocationCoordinate2D coordinate;
}
@property (nonatomic, copy) NSString *title;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d;


@end

@終わり

これがビューファイルのソースコードです。

#import <UIKit/UIKit.h>
#import <MapKit/Mapkit.h>
#import "ASIHTTPRequestDelegate.h"
#import "AppDelegate.h"
#import "gpMapViewAnnotations.h"

@interface gpViewController : UIViewController
< ASIHTTPRequestDelegate, MKMapViewDelegate>
{
     MKMapView *gpMapView;


    gpMapViewAnnotations *gpAnnotations;

}
@property (strong, nonatomic) IBOutlet MKMapView *gpMapView;

@end

そして、ここに実装ファイルがあります:

#import "gpViewController.h"
#import "ASIHTTPRequest.h"
#import "Parser.h"
#import "AppDelegate.h"
#import "TFHpple.h"
#import "TouchXML.h"
#import "gpMapViewAnnotations.h"


@interface gpViewController ()

@end

@implementation gpViewController
@synthesize gpMapView;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    // Set some coordinates for our position (Buckingham Palace!)
    CLLocationCoordinate2D location;
    location.latitude = (double) 51.501468;
    location.longitude = (double) -0.141596;

    // Add the annotation to our map view
    gpMapViewAnnotations *newAnnotation = [[gpMapViewAnnotations alloc] initWithTitle:@"Buckingham Palace" andCoordinate:location];
    [gpMapView addAnnotation:newAnnotation];

    NSURL *url = [NSURL URLWithString:@"http://v1.syndication.nhschoices.nhs.uk/organisations/gppractices/location.xml?apikey=YAHUGHET&range=50&northing=174900&easting=517900&name=richmond"];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

    [request setDelegate:self];

    [request startAsynchronous];
    [gpMapView setDelegate:self];

}

- (void)viewDidUnload
{
    [self setGpMapView:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

- (void)requestFinished:(ASIHTTPRequest *)request
{
     NSLog(@"view did load");
    NSLog(@"request finished");
    // Use when fetching text data
    NSString *responseString = [request responseString];
//   NSLog(@"%@",responseString);
    // Use when fetching binary data

    NSData *responseData = [request responseData];

    //  we will put parsed data in an a array
    NSMutableArray *res = [[NSMutableArray alloc] init];
    //  using local resource file
   // NSString *XMLPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"test.xml"];
  //  NSData *XMLData   = [NSData dataWithContentsOfFile:responseString];
    CXMLDocument *doc = [[CXMLDocument alloc] initWithData:responseData options:0 error:nil];

    NSArray *nodes = NULL;
    //  searching for piglet nodes
    nodes = [doc nodesForXPath:@"//*" error:nil];
    NSLog(@"coming here 1");
    for (CXMLElement *node in nodes) {
        //NSLog(@"coming here 2");

      //  NSMutableArray *item = [[NSMutableArray alloc]init];
        //create list object to store the title and latitude and longitude.
        List *gpList = [[List alloc]init];

        if([[node localName] isEqualToString:@"entry"]){
            NSArray *entryTagNodes = [node children];

            //iterate on entry nodes
            for(CXMLElement *entryTagNode in entryTagNodes){
                //check if the tagname is content
                if([[entryTagNode localName] isEqualToString:@"content"]){
                        //iterat on content tag childs
                    NSArray *contentTagNodes = [entryTagNode children];
                    // NSLog(@"tag: %d",[contentTagNodes count]);
                    for(CXMLElement *innerContentNode in contentTagNodes){

                        NSArray *organisationTagNodes = [innerContentNode children];
                        for(CXMLElement *orgTagNode in organisationTagNodes){
                           // NSLog(@"%@",[orgTagNode localName]);

                                //check for tag name is equal to name
                            if([[orgTagNode localName] isEqualToString:@"name"]){
                                gpList.title = [orgTagNode stringValue];

                            }else if([[orgTagNode localName] isEqualToString:@"geographicCoordinates"]){
                                NSArray *geoCordTags = [orgTagNode children];

                                for(CXMLElement *geoCordTag in geoCordTags){
                                    if([[geoCordTag localName] isEqualToString:@"latitude"]){
                                        gpList.latitude = [geoCordTag stringValue];

                                    }else if([[geoCordTag localName] isEqualToString:@"longitude"]){
                                        gpList.longitude = [geoCordTag stringValue];
                                    }

                                }
                               NSLog(@"latitude nad longitude %@ %@",gpList.latitude,gpList.longitude);

                            }
                        }
                    }


                }

            }
            [res addObject:gpList];

        }

        //  and here it is - attributeForName! Simple as that.
      //  [item setObject:[[node valueForKey:@"id"] stringValue] forKey:@"id"];  // <------ this magical arrow is pointing to the area of interest



    }

    //  and we print our results
  //  NSLog(@"%@", res);
    NSEnumerator *enumerator = [res objectEnumerator];
    id obj;
    while(obj = [enumerator nextObject]){

            NSLog(@"title %@",[obj title]);

    }

    /*
    TFHpple *doc = [TFHpple hppleWithData:responseData isXML:YES];
    NSArray *elements = [doc searchWithXPathQuery:@"/"];

    NSLog(@"%d",[elements objectAtIndex:0]);
   */
    /*
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:responseData];
    Parser *parser = [[Parser alloc] initParser];

    [xmlParser setDelegate:parser];
    BOOL worked = [xmlParser parse];
    if(worked){
        NSLog(@"parsing is happening ");

    }else{
        NSLog(@"parsing is not happening %@",[app.listArray count]);
    }*/


}

-(void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views{
    MKAnnotationView *annotationView = [views objectAtIndex:0];
    id <MKAnnotation> mp = [annotationView annotation];
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate], 1500, 1500);
    [mv setRegion:region animated:YES];
    [mv selectAnnotation:mp animated:YES];
}

- (void)requestFailed:(ASIHTTPRequest *)request
{
    NSError *error = [request error];
    NSLog(@"%@",error);
}

@end

単純な点をプロットする際にどこが間違っているのか、私には手がかりがありません。xmlファイルを読み取って作成した配列を使用して複数のポイントを配置する必要があります。しかし、単純な点でさえ、現在はプロットされていません。ここで私が間違っていることはありますか?

4

1 に答える 1

3

mapView:viewForAnnotation:デリゲートメソッドがわかりません。ここで、注釈とともに表示を追加できます。このようなもの:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if( annotation == mapView.userLocation ) return nil;

    MKPinAnnotationView *annotationView;
    annotationView = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"AnnotationIdentifier"];
    if( annotationView == nil ){
        annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"AnnotationIdentifier"];
    }

    return annotationView;
}
于 2012-04-30T15:55:01.927 に答える